لماذا الاستضافة الذاتية لـ Astro على خادم VPS
يتميّز Astro بخاصّية فريدة: يمكنه إنتاج موقع ساكن بنسبة 100% (output: 'static')، أو تطبيق بعرض من جانب الخادم عند الطلب (output: 'server' عبر @astrojs/node). تجعل هذه الازدواجية خادم VPS وثيق الصلة للغاية. في الوضع الساكن، تقدّم ملفّات HTML مباشرةً من Nginx، دون أيّ عملية Node: أداء أقصى وبصمة أدنى. وفي وضع SSR، تُشغّل خادم Node يعرض الصفحات ديناميكيًا، وهو مفيد للمحتوى المخصّص أو نقاط نهاية API المدمجة. على خادم VPS، تختار استراتيجيتك دون أن تكون محبوسًا في النموذج الذي تفرضه منصّة نشر الواجهة الأمامية. كما تتحكّم في التخزين المؤقّت لـ HTTP وترويسات الأمان وضغط Brotli، حيث تدير استضافات الواجهة الأمامية ذلك كصندوق أسود.
الفوائد الملموسة
- حرّية وضع الإخراج: ساكن خالص أو SSR بـ Node، بل وحتى هجين حسب المسار
- في الوضع الساكن، يقدّم Nginx الملفّات دون أيّ عملية Node: ذاكرة شبه معدومة ومعدّل نقل أقصى
- تحكّم كامل في التخزين المؤقّت لـ HTTP وترويسات الأمان (CSP وHSTS) وضغط Brotli
- لا حدّ لعرض النطاق الترددي ولا حصّة طلبات تفرضها منصّة للواجهة الأمامية
- نقاط نهاية API الخاصة بـ Astro مُستضافة على النطاق نفسه، دون دالّة serverless تابعة لطرف ثالث
- نشر قابل لإعادة الإنتاج عبر Docker: البناء نفسه محليًا وفي بيئة الإنتاج
المتطلّبات العتادية والبرمجية
يتّسع موقع Astro الساكن على أصغر خادم VPS يمكن تخيّله: يكفي معالج افتراضي واحد (1 vCPU) و1 جيجابايت من الذاكرة بسهولة، لأنّ Nginx لا يفعل سوى تقديم الملفّات. أمّا في وضع SSR، فجهّز 2 جيجابايت لعملية Node ولذرى العرض. ثبّت Node.js 20 LTS للبناء (أو ابنِ في CI)، وDocker إذا حوسبت في حاوية، وNginx كواجهة أمامية. وجّه mydomain.com وwww.mydomain.com نحو عنوان IP الخاص بخادم VPS. احسب 5 جيجابايت من القرص؛ عادةً ما يزن مجلّد dist/ لموقع ساكن بضعة ميجابايت.
النشر خطوة بخطوة
اختيار وضع الإخراج
في
astro.config.mjs، عيّنoutput: 'static'لموقع محتوى، أوoutput: 'server'معadapter: node({ mode: 'standalone' })إذا كنت بحاجة إلى SSR. يشترط هذا الاختيار بقيّة عملية النشر بأكملها.بناء التطبيق
شغّل
npm run build. في الوضع الساكن، تحصل على مجلّدdist/يحتوي على HTML وCSS وJS جاهزة للتقديم. وفي وضع SSR، تحصل إضافةً إلى ذلك علىdist/server/entry.mjsلتشغيله باستخدام Node.تقديم الملفّات الساكنة باستخدام Nginx (الوضع الساكن)
وجّه توجيه
rootفي مضيفك الافتراضي نحو/var/www/astro/distوفعّلtry_files $uri $uri/ /404.html;. أضفgzip on;وترويساتCache-Controlطويلة على الأصول المُصدَرة. لا حاجة إلى أيّ حاوية.الحوسبة في حاوية لخادم Node (وضع SSR)
من أجل SSR، أنشئ ملفّ Dockerfile مبنيًا على
node:20-alpineينسخdist/ويُشغّلnode ./dist/server/entry.mjs. اكشف المنفذ 4321 وابدأ بـdocker compose up -d. سيقوم Nginx بعد ذلك بـproxy_passنحو هذا المنفذ.إعداد الوكيل العكسي والضغط
سواء كنت في الوضع الساكن أو في SSR خلف Node، صرّح عن مضيف Nginx الافتراضي مع إعادة توجيه
wwwنحو النطاق الجذر (apex). فعّل Brotli إذا كانت الوحدة متاحة للحصول على أصول أخفّ حتى من gzip.تفعيل SSL
شغّل
certbot --nginx -d mydomain.com -d www.mydomain.com. افرض إعادة التوجيه نحو HTTPS وأضف ترويسةStrict-Transport-Security. تحقّق من صحّة النشر عبر اختبار Lighthouse من متصفّحك.
حتى بالنسبة لموقع SSR، استفد من العرض الهجين في Astro: علّم الصفحات الساكنة بـ export const prerender = true كي تُنشأ عند البناء وتُقدَّم مباشرةً من Nginx، مع حجز عملية Node للمسارات الديناميكية فعلًا فقط. وبذلك تقلّل حمل الخادم بشكل جذري. وضع تخزينًا مؤقّتًا proxy_cache من Nginx أمام صفحات SSR ذات وتيرة التغيير المنخفضة لامتصاص ذرى حركة المرور.
نشر Astro بنقرة واحدة من Marketplace
يوفّر Marketplace من ServOrbit قالب Astro Stack الذي يُهيّئ تلقائيًا Node.js LTS وPM2 وNginx على خادمك الافتراضي. في دقائق قليلة، ستكون بيئة الإنتاج جاهزة لاستقبال تطبيق Astro — في الوضع الساكن أو SSR — دون أي إعداد يدوي.
مقارنةً بالتثبيت الموصوف في هذا الدليل، يتولّى القالب الإعداد الأولي ويتيح لك البدء مباشرةً بخطوة «بناء تطبيقك ونقله».