headless-wordpress-astro-setup.html
< BACK गर्म सुनहरे घंटे की रोशनी में पांडुलिपि पृष्ठों और टेप मशीन वाली विंटेज डेस्क

Headless WordPress + Astro: सामग्री-प्रधान साइटों के लिए एक कार्यशील सेटअप

एक client ने मुझे early 2023 में कॉल किया -- एक media publisher जिसके WordPress पर करीब 14,000 posts थे, एक theme जो छह साल में चार developers के हाथों से बना था, और एक Core Web Vitals score जो सच में शर्मनाक था। उनका LCP mobile पर 7.2 seconds दिखा रहा था। उन्होंने WP Rocket try किया, उन्होंने CDN try किया, उन्होंने अपने plugins का आधा हिस्सा भी हटा दिया। फिर भी slow। समस्या WordPress ही नहीं थी। समस्या यह थी कि हर एक page render PHP से होकर जा रहा था, एक bloated theme से, और एक database query chain से जिसे 2018 से कोई देख नहीं रहा था।Core Web Vitals score that was genuinely embarrassing. Their LCP was clocking in at 7.2 seconds on mobile. They'd tried WP Rocket, they'd tried a CDN, they'd even stripped half their plugins. Still slow. The problem wasn't WordPress itself. It was that every single page render was going through PHP, a bloated theme, and a database query chain that hadn't been looked at since 2018.

मुख्य निष्कर्ष: Headless WordPress और Astro के साथ कंटेंट साइट के लिए परफेक्ट संतुलन मिलता है — एडिटर्स के लिए wp-admin, विज़िटर्स के लिए स्टैटिक-फास्ट फ्रंट एंड, और दोनों को जोड़ने के लिए WPGraphQL।Headless WordPress with Astro is the content-site sweet spot: wp-admin for editors, static-fast front end for visitors, and WPGraphQL bridging the two.

यही वह moment था जब मैंने Astro को frontend के रूप में headless setup के लिए सच में commit किया। इसलिए नहीं कि यह fashionable है -- इसलिए कि एक site जो हज़ारों posts को push कर रही है heavy editorial content के साथ, यही एकमात्र architecture था जो sense में आता था।Astro as the frontend. Not because it's fashionable -- because for a site pushing thousands of posts with heavy editorial content, it was the only architecture that made sense.

यहाँ बताया गया है कि मैंने इसे सटीक रूप से कैसे सेटअप किया। ट्रेडऑफ़, वास्तविक कॉन्फ़िगरेशन, वे बिट जिन्होंने मुझे परेशान किया।

---

Astro और Next.js नहीं क्यों

मुझसे यह सवाल काफी बार पूछा जाता है। अगर आपके पास पहले से React-heavy टीम है या आपको complex client-side interactivity की जरूरत है तो Next.js स्पষ्ट जवाब है। लेकिन content-heavy sites के लिए? Astro जीतता है, और यह बहुत करीब नहीं है।Next.js is the obvious answer if you've already got a React-heavy team or you need complex client-side interactivity. But for content-heavy sites? Astro wins, and it's not particularly close.

Astro by default zero JavaScript ship करता है। एक blog, एक news site, या एक documentation portal के लिए, यही सही default है। आप JavaScript को वहाँ opt करते हो जहाँ आपको उसकी ज़रूरत है, बजाय 200kb React bundle को opt out करने के जिसकी आपको mostly ज़रूरत नहीं है। Astro docs में partial hydration पर -- वह इसे Islands architecture कहते हैं -- वह इसे एक sentence में मुझसे बेहतर समझाते हैं, लेकिन short version यह है: केवल interactive bits को JS मिलता है। Article body, header, sidebar? Static HTML।zero JavaScript by default. For a blog, a news site, or a documentation portal, that's the correct default. You opt into JavaScript where you need it, rather than opting out of a 200kb React bundle you mostly don't want. The Astro docs on partial hydration -- they call it the Islands architecture -- explain it better than I can in a sentence, but the short version is: only the interactive bits get JS. The article body, the header, the sidebar? Static HTML.

मैंने late 2022 में Next.js और WordPress के साथ एक legal content site बनाया। काफी fast, लेकिन client बार-बार पूछते रहे कि उनका Lighthouse score mobile पर 74 क्यों है जब "यह अभी fast होना चाहिए"। Hydration overhead। Astro के साथ, उसी type की site अब routinely 95-98 hit करती है। Bragging नहीं -- यही architecture से आपको free में मिलता है।

Astro किस चीज़ में अच्छा नहीं है

सच कहना काबिलेतारीफ है। अगर आपकी site को real-time personalisation, heavy shopping cart, या कुछ ऐसा चाहिए जो वाकई client-side state पर कई components में निर्भर हो, तो Astro awkward महसूस करने लगता है। यह एक React app नहीं है। Islands pattern शक्तिशाली है, लेकिन यह SPAs बनाने से एक अलग mental model है। मैंने mid-2023 में एक client dashboard को Astro project में shoehorn करने की कोशिश की और दो हफ़्तों में Next.js पर वापस चला गया। जान लीजिए कि आप क्या बना रहे हैं।

---

WordPress को Headless CMS के रूप में Set Up करना

WordPress एक genuinely अच्छा headless backend है। WP REST API core में ships करता है, यह well-documented है, और आपकी editorial team को कुछ नया सीखना नहीं पड़ता। यह आखिरी बात developers के लिए आमतौर पर माना जाता है उससे ज्यादा मायने रखती है।WP REST API ships in core, it's well-documented, and your editorial team doesn't have to learn anything new. That last point matters more than developers usually admit.

यह वह setup है जो मैं use करता हूँ:

  1. WordPress को एक subdomain पर install करें -- मैं cms.yourdomain.com या api.yourdomain.com use करता हूँ। इसे basic auth के पीछे रखें या कम से कम direct public traffic को restrict करें। Frontend yourdomain.com है। दो अलग-अलग deployments। -- I use cms.yourdomain.com or api.yourdomain.com. Keep it behind basic auth or at minimum restrict direct public traffic. The frontend is yourdomain.com. Two separate deployments.
  2. [WPGraphQL plugin](https://www.wpgraphql.com/) install करें -- मैं content sites के लिए GraphQL को REST से prefer करता हूँ क्योंकि आप अपने queries को अपने components के साथ co-locate कर सकते हो और exactly वह fields fetch कर सकते हो जिनकी आपको ज़रूरत है। कोई over-fetching नहीं। REST API ठीक है, लेकिन एक बार जब आपके पास 15+ custom fields per post type हैं, तो GraphQL approach काफी cleaner है। -- I prefer GraphQL over REST for content sites because you can co-locate your queries with your components and fetch exactly the fields you need. No over-fetching. The REST API is fine, but once you've got 15+ custom fields per post type, the GraphQL approach is noticeably cleaner.
  3. Advanced Custom Fields (ACF) और WPGraphQL for ACF extension install करें। यह combo ही वह है जो WordPress को genuinely flexible बनाता है headless content model के रूप में -- आप per post type structured data define कर सकते हो, इसे GraphQL के through expose कर सकते हो, और Astro इसे cleanly consume करता है। and the WPGraphQL for ACF extension. This combo is what makes WordPress genuinely flexible as a headless content model -- you can define structured data per post type, expose it through GraphQL, and Astro consumes it cleanly.
  4. Comments, emojis और default XML-RPC को disable करें अगर आपने पहले से नहीं किया है। ये overhead जोड़ते हैं और attack surface बढ़ाते हैं जो आपको चाहिए ही नहीं। if you haven't already. These add overhead and attack surface you don't need.
  5. Building शुरू करने से पहले permalinks को कुछ sensible में set करें। अगर आपके Astro routes पहले से set हैं तो mid-project में उन्हें बदलना सच में दर्दनाक है। to something sensible before you start building. Changing them mid-project when your Astro routes are already set is a genuine pain.

एक चीज जो लोगों को confuse करती है: CORS। Default में, WordPress अपने Astro dev server (localhost:4321 पर चलने वाले) को आपके WP install को requests करने नहीं देगा। Development के दौरान यह अपने theme के functions.php या एक छोटे utility plugin में डालें:localhost:4321) make requests to your WP install. Drop this into your theme's functions.php or a small utility plugin during development:

`` add_action('init', function() { header("Access-Control-Allow-Origin: *"); }); `` add_action('init', function() { header("Access-Control-Allow-Origin: *"); }); ``

Production में उसे specific origins तक tight करें। obviously।

---

Astro Project Structure

मैं इसे projects के across opinionated और consistent रखता हूँ। एक दर्जन या उससे ज्यादा headless builds के बाद, यह है जो काम करता है:

`` src/ components/ layouts/ pages/ index.astro blog/ [slug].astro lib/ wpgraphql.ts ← सभी WP query लॉजिक यहाँ रहता है styles/ `` src/ components/ layouts/ pages/ index.astro blog/ [slug].astro lib/ wpgraphql.ts ← all WP query logic lives here styles/ ``

lib/wpgraphql.ts file वह जगह है जहाँ मैं हर GraphQL fetch को centralise करता हूँ। कोई inline fetch calls scattered नहीं page files के across। हर query एक named, exported async function है। 14,000 posts के across इसे debug करना जब कुछ 2am पर break हो -- आप बाद में अपने को धन्यवाद दोगे।lib/wpgraphql.ts file is where I centralise every GraphQL fetch. No inline fetch calls scattered across page files. Every query is a named, exported async function. Debugging this across 14,000 posts when something breaks at 2am -- you'll thank yourself later.

Build Time पर Posts को Fetch करना

Astro का getStaticPaths यहाँ आपका मुख्य औज़ार है। हज़ारों posts वाले blog के लिए:getStaticPaths is your bread and butter here. For a blog with thousands of posts:

`` export async function getStaticPaths() { const posts = await getAllPostSlugs(); // WPGraphQL को कॉल करता है return posts.map(post => ({ params: { slug: post.slug }, })); } `` export async function getStaticPaths() { const posts = await getAllPostSlugs(); // calls WPGraphQL return posts.map(post => ({ params: { slug: post.slug }, })); } ``

getAllPostSlugs WPGraphQL के through after cursors का उपयोग करके paginate करता है -- WordPress की GraphQL layer by default 100 posts per request return करती है, तो 14,000 posts के लिए आप build time पर 140 requests बना रहे हो। यह scary लगता है। Practice में, एक decent server पर, full build करीब 4-5 minutes में run होता है। एक site के लिए perfectly acceptable जो एक दिन में कुछ बार rebuild होती है। paginates through WPGraphQL using after cursors -- WordPress's GraphQL layer returns 100 posts per request by default, so for 14,000 posts you're making 140 requests at build time. That sounds scary. In practice, on a decent server, the full build runs in about 4-5 minutes. Perfectly acceptable for a site that rebuilds a few times per day.

---

Images को संभालना बिना अपना दिमाग खोए

यह वह बात है जिस पर कोई काफी बात नहीं करता। WordPress इमेज URLs को आपके CMS सबडोमेन की ओर इशारा करके स्टोर करता है। जब Astro स्टैटिकली बिल्ड करता है, तो वे इमेजेस अभी भी cms.yourdomain.com पर रहती हैं -- जिसका मतलब है कि आपके विजिटर्स के ब्राउजर WordPress सर्वर से इमेजेस फेच कर रहे हैं, संभवतः आपके CDN को बाईपास करते हुए।cms.yourdomain.com -- which means your visitors' browsers are fetching images from your WordPress server, potentially bypassing your CDN.

मैं इसे कुछ तरीकों से संभालता हूँ:

  • दोनों डोमेन के सामने Cloudflare रखें। सबसे आसान विकल्प। yourdomain.com और cms.yourdomain.com दोनों को Cloudflare के माध्यम से प्रॉक्सी करें, /wp-content/uploads/* पर आक्रामक कैशिंग कॉन्फ़िगर करें, और आप ज्यादातर ठीक हैं। Simplest option. Proxy both yourdomain.com and cms.yourdomain.com through Cloudflare, configure aggressive caching on /wp-content/uploads/*, and you're mostly fine.
  • एक मीडिया ऑफलोड प्लगइन का इस्तेमाल करें। मुझे WP Offload Media पसंद है -- यह अपलोड्स को S3 (या compatible storage) में ले जाता है और URLs को ऑटोमेटिकली रीराइट करता है। यह वह approach है जो मैं किसी भी साइट के लिए इस्तेमाल करता हूँ जहाँ सीरियस ट्रैफिक की उम्मीद हो। आपका WordPress सर्वर पूरी तरह इमेजेस सर्व करना बंद कर देता है। I like WP Offload Media -- it moves uploads to S3 (or compatible storage) and rewrites URLs automatically. This is the approach I use for any site expecting serious traffic. Your WordPress server stops serving images entirely.
  • Astro का Image component। उन इमेजेस के लिए जिन्हें आप बिल्ड टाइम पर कंट्रोल करते हैं (featured इमेजेस जो GraphQL के जरिए pull की जाती हैं), आप remote URL को Astro के <Image> component में पास कर सकते हैं और यह उन्हें optimize, resize करेगा, और आपके बिल्ड आउटपुट से serve करेगा। बेहतरीन काम करता है। पोस्ट बॉडी HTML में embed की गई इमेजेस के लिए काम नहीं करता -- इसके लिए एक अलग pass चाहिए। For images you control at build time (featured images pulled via GraphQL), you can pass the remote URL into Astro's <Image> component and it'll optimise, resize, and serve them from your build output. Works brilliantly. Does not work for images embedded in post body HTML -- that requires a different pass.

Seahawk के पास पिछले साल एक ट्रैवल कंटेंट क्लायंट था -- करीब 8,000 पोस्ट्स, बेहद इमेज-हेवी, औसतन 12 इमेजेस प्रति आर्टिकल। उनका WordPress सर्वर सिर्फ इमेज requests से ही हैमर हो रहा था, भले ही headless सेटअप के साथ हो। S3 + CloudFront पर जाने से उनकी origin bandwidth 94% गिर गई। उनकी hosting बिल के लिए genuinely transformative था।

---

इंक्रिमेंटल बिल्ड्स और रीबिल्ड समस्या

स्टेटिक जेनरेशन को स्केल पर एक वास्तविक समस्या है: आपका संपादक 3 बजे एक पोस्ट सुधार प्रकाशित करता है और 5 मिनट के लिए पूर्ण रीबिल्ड की प्रतीक्षा करना पड़ता है। यह न्यूजरूम में स्वीकार्य नहीं है।

कुछ दृष्टिकोण जो मैंने उपयोग किए हैं:

Option 1: Netlify या Vercel on-demand ISR के साथ। Astro सर्वर-साइड रेंडरिंग को adapters के साथ सपोर्ट करता है -- आप Astro को hybrid mode में चला सकते हैं जहाँ ज्यादातर पेजेस static हैं लेकिन specific routes on-demand रेंडर होते हैं। एक news साइट के लिए, मैं अक्सर पिछले 30 दिनों की पोस्ट्स को statically pre-render करता हूँ (high traffic, speed चाहिए) और older archive पेजेस को server-render करने के लिए सेट करता हूँ। दोनों की best of। Astro supports server-side rendering with adapters -- you can run Astro in hybrid mode where most pages are static but specific routes are rendered on-demand. For a news site, I'll often statically pre-render the last 30 days of posts (high traffic, needs speed) and set older archive pages to server-render on demand. Best of both worlds.

Option 2: Webhook-triggered partial builds। WordPress पोस्ट सेव पर एक webhook fire करता है (WP Webhooks plugin से आसान)। वह webhook एक Netlify या Vercel deploy hook को hit करता है। बिल्ड चलता है, यह सिर्फ जो change हुआ है उसे fetch करता है। यह truly partial नहीं है -- Astro अभी भी सबकुछ rebuild करता है -- लेकिन अगर आप अपना बिल्ड fast रखें, तो 4 मिनट काम के लायक है। WordPress fires a webhook on post save (easy with the WP Webhooks plugin). That webhook hits a Netlify or Vercel deploy hook. The build runs, it fetches only what's changed. It's not truly partial -- Astro still rebuilds everything -- but if you keep your build fast, 4 minutes is workable.

Option 3: पूरी चीज के लिए बस SSR का इस्तेमाल करें। Astro को Node adapter के साथ एक VPS पर deploy करें (मैं इसके लिए Hetzner इस्तेमाल करता हूँ -- सस्ता, तेज, reliable)। हर पेज request पर render होता है, आप Nginx या Cloudflare level पर aggressively cache करते हैं, और आपके पास instant post updates होते हैं। यह वह है जो मैं 50,000+ posts वाले proper publishing operation के लिए करता। Deploy Astro with the Node adapter to a VPS (I use Hetzner for this -- cheap, fast, reliable). Every page renders on request, you cache aggressively at the Nginx or Cloudflare level, and you have instant post updates. This is what I'd do for a proper publishing operation over 50,000 posts.

ईमानदारी से कहूँ तो? ज़्यादातर sites को Option 1 या 3 की complexity की ज़रूरत नहीं है। 90% content sites के लिए 4-minute का rebuild जो webhook से trigger हो, काफ़ी है।

---

Performance: आपको असल में क्या मिलता है

शुरुआत वाली publisher project पर -- Astro migration के बाद यहाँ क्या हुआ:

  • LCP mobile पर 7.2s से 1.1s पर गिरा (London node से WebPageTest के साथ tested)1.1s on mobile (tested with WebPageTest from a London node)
  • Total Blocking Time ~800ms से 0ms पर गई (default से zero JS, याद है न)0ms (zero JS by default, remember)
  • उनकी Google Search Console Core Web Vitals report 3% "Good" URLs से 91% "Good" हो गई deployment के छः हफ़्तों में91% "Good" within six weeks of deployment
  • Hosting costs गिरे क्योंकि उनका WordPress server अब pages serve नहीं कर रहा था, सिर्फ़ API responses दे रहा था

इसमें कोई जादू नहीं है। यह बस यही होता है जब आप PHP rendering को critical path से निकाल देते हैं और हर reader को 400kb theme JavaScript bundle भेजना बंद कर देते हैं।

---

जो चीजें आपको फंसा देंगी

सच्ची बात -- actual projects पर जिन चीजों को मुझे debug करना पड़ा:

  • ड्राफ्ट पोस्ट प्रीव्यू। यह हेडलेस सेटअप में सचमुच खीझ देने वाली चीज है। WordPress का नेटिव प्रीव्यू फ्रंट-एंड रेंडरिंग पर निर्भर करता है। आपको Astro में एक कस्टम प्रीव्यू एंडपॉइंट बनाना होगा जो WordPress प्रीव्यू नॉन्स स्वीकार करे और WPGraphQL के जरिए ड्राफ्ट फेच करे। मुश्किल नहीं है, लेकिन इसे सही तरीके से करने में एक दिन लग जाता है। This is genuinely annoying in a headless setup. WordPress's native preview relies on front-end rendering. You need to build a custom preview endpoint in Astro that accepts a WordPress preview nonce and fetches the draft via WPGraphQL. Not hard, but it takes a day to do properly.
  • रीडायरेक्ट्स। अगर पुरानी साइट के पास .htaccess में सैकड़ों रीडायरेक्ट्स थे, तो वे अब WordPress सर्वर पर लाइव हैं। आपको या तो उन्हें Astro के कॉन्फिग में दोहराना होगा, या WordPress को सुलभ रखना होगा और विशिष्ट पाथ्स को प्रॉक्सी करना होगा। मैंने दोनों किए हैं। Astro में दोहराना लंबी अवधि में ज्यादा साफ है। If the old site had hundreds of redirects in .htaccess, those live on the WordPress server now. You need to either replicate them in Astro's config, or keep WordPress accessible and proxy specific paths. I've done both. Replicating in Astro is cleaner long-term.
  • सर्च। WordPress का बिल्ट-इन सर्च हेडलेस सेटअप में बेकार है। मैं Algolia के साथ WP Search with Algolia प्लगइन का उपयोग करता हूं। WP में अपनी पोस्ट्स को इंडेक्स करें, Astro Island कंपोनेंट से Algolia को क्वेरी करें। यह अच्छी तरह काम करता है। WordPress's built-in search is useless in a headless setup. I use Algolia with the WP Search with Algolia plugin. Index your posts in WP, query Algolia from an Astro Island component. Works well.
  • Menus और navigation। WordPress menus WPGraphQL के जरिए expose करने के लिए अजीब तरह से fiddly होते हैं। wpgraphql-acf route अक्सर ज्यादा clean साबित होता है -- बस अपने nav को एक ACF repeater के तौर पर model करें और बस। WordPress menus are weirdly fiddly to expose through WPGraphQL. The wpgraphql-acf route often ends up being cleaner -- just model your nav as an ACF repeater and call it done.

---

FAQ

क्या मुझे WPGraphQL की जरूरत है या मैं बस REST API का उपयोग कर सकता हूं?

आप बिल्कुल REST API का उपयोग कर सकते हैं -- यह WordPress कोर में बना हुआ है और किसी अतिरिक्त प्लग-इन की जरूरत नहीं है। मानक पोस्ट प्रकार और न्यूनतम कस्टम फील्ड वाली सरल साइटों के लिए यह ठीक है। GraphQL अपनी जगह बनाता है जब आपके पास कई कस्टम फील्ड वाले जटिल कंटेंट मॉडल हों। एक ही रिक्वेस्ट में सिर्फ वही फील्ड प्राप्त कर सकना जिनकी आपको जरूरत है, _embed पैरामीटर और नेस्टेड REST कॉल से जूझे बिना, हर रिक्वेस्ट पर समय बचाता है। यह आपके ऊपर है। मुझे बस एक निश्चित जटिलता के बाद GraphQL ज्यादा साफ लगता है।_embed parameters and nested REST calls, saves time on every query you write. Up to you. I just find GraphQL cleaner past a certain complexity threshold.

मैं सदस्यों के लिए ही उपलब्ध कंटेंट के लिए WordPress प्रमाणीकरण कैसे संभालूं?

JWT प्रमाणीकरण मानक दृष्टिकोण है। JWT Authentication for WP REST API प्लग-इन इंस्टॉल करें, लॉगिन पर टोकन जारी करें, उन्हें अपने GraphQL रिक्वेस्ट हेडर में पास करें। Astro की ओर से, आप इसे एक SSR रूट के साथ संभालेंगे (स्टैटिक नहीं) ताकि उपयोगकर्ता-विशिष्ट कंटेंट हर रिक्वेस्ट पर सर्वर-साइड से प्राप्त हो। इसे स्टैटिक रूप से करने की कोशिश न करें -- उस रास्ते से पागलपन आता है।JWT Authentication for WP REST API plugin, issue tokens on login, pass them in your GraphQL request headers. On the Astro side, you'd handle this with an SSR route (not static) so the user-specific content is fetched server-side per request. Don't try to do this statically -- that way lies madness.

क्या यह एक छोटे ब्लॉग के लिए बहुत ज्यादा है?

हां, संभवतः। अगर आपके पास 500 से कम पोस्ट और एक एडिटर है, तो हेडलेस सेटअप को बनाए रखने का ओवरहेड इसके लायक नहीं है। बस एक अच्छा WordPress थीम उपयोग करें, अपनी इमेज को ऑप्टिमाइज़ करें, और जीवन चलाते रहें। यह आर्किटेक्चर तब फायदेमंद होता है जब आपके पास वॉल्यूम, एडिटोरियल जटिलता, या ट्रैफिक लेवल हो जहां परफॉर्मेंस सच में राजस्व पर फर्क डालता है।

उत्पादन में होस्टिंग सेटअप कैसा दिखता है?

WordPress (केवल CMS) एक छोटे VPS या प्रबंधित WordPress होस्ट पर -- मैं Kinsta या Cloudways का उपयोग करता हूँ। Astro फ्रंटएंड Vercel, Netlify, या प्रोजेक्ट के आधार पर Nginx के साथ Hetzner VPS पर। सब कुछ के आगे Cloudflare। मध्यम आकार की कंटेंट साइट के लिए कुल मासिक लागत आमतौर पर £60-£120 होती है, जो अक्सर उससे कम होती है जो क्लाइंट एक ऑल-इन-वन WordPress होस्ट के लिए भुगतान कर रहे थे जो लोड के तहत संघर्ष कर रहा था।less than what clients were paying for an all-in-one WordPress host that was struggling under the load.

---

ईमानदारी से कहूँ तो: headless WordPress with Astro कंटेंट साइटों के लिए हाल के समय में बेहतरीन चीजों में से एक है। इसलिए नहीं कि यह नया है, बल्कि इसलिए कि टूलिंग आखिरकार इस विचार के अनुरूप हो गई है। WPGraphQL स्थिर है, Astro की बिल्ड सिस्टम तेज़ है, और परफॉर्मेंस लाभ वास्तविक और मापने योग्य हैं।

आर्किटेक्चर को जल्दी सही रखें -- विशेषकर आपकी इमेज रणनीति और आपने रीबिल्ड दृष्टिकोण को -- और आप बाद में आग बुझाने में कहीं कम समय बिताएँगे। बस यही है।

< BACK