لماذا الاستضافة الذاتية لـ SvelteKit على خادم VPS
يتكيّف SvelteKit مع أهداف عديدة عبر محوّلاته (Vercel وNetlify وCloudflare…)، لكنّ المحوّل الرسمي @sveltejs/adapter-node يُنتج خادم Node مستقلًّا، وهو مثالي لخادم VPS. فبدلًا من تقسيم تطبيقك إلى دوال serverless خاضعة للإقلاع البارد ولحدود زمن التنفيذ، تحصل على عملية دائمة تُبقي اتصالاتها بقاعدة البيانات مفتوحة وتستجيب دون زمن كمون عند البدء. تعمل إجراءات النماذج ودوال load من جانب الخادم ونقاط نهاية +server.ts في بيئة تشغيل واحدة تتحكّم فيها. على خادم VPS، تتجنّب أيضًا الفوترة لكلّ استدعاء، الشائعة على منصّات الواجهة الأمامية، والتي تصبح غير قابلة للتوقّع بمجرّد ارتفاع حركة المرور.
الفوائد الملموسة
- خادم Node دائم عبر adapter-node: لا إقلاع بارد على مسارات الخادم
- اتصالات قاعدة البيانات تُبقى مفتوحة في مجمّع، دون إعادة اتصال عند كلّ طلب
- لا فوترة لكلّ استدعاء: تكلفة مستقرّة حتى مع حركة مرور مرتفعة وغير منتظمة
- إجراءات النماذج ونقاط نهاية
+server.tsتُنفَّذ دون حدّ زمني مفروض - WebSockets وSSE ممكنة، حيث يمنعها أو يعقّدها نموذج serverless
- متغيّرات البيئة والأسرار تُدار مباشرةً، دون لوحة تحكّم لمنصّة تابعة لطرف ثالث
المتطلّبات العتادية والبرمجية
يستهلك تطبيق SvelteKit في وضع Node باعتدال: يناسب خادم VPS بمعالج افتراضي واحد (1 vCPU) و2 جيجابايت من الذاكرة موقعًا متوسّط حركة المرور، ارتقِ إلى 2 vCPU / 4 جيجابايت إذا وضعت قاعدة بيانات PostgreSQL في الموقع نفسه ولديك دوال load ثقيلة من جانب الخادم. ثبّت Node.js 20 LTS، وإمّا Docker أو PM2 لإدارة العملية كخدمة خفيّة (daemon). سيعمل Nginx كوكيل عكسي. وجّه نطاقك نحو عنوان IP الخاص بخادم VPS. يبقى البناء (build/ المُولَّد بواسطة adapter-node) خفيفًا، وتكفي 5 إلى 10 جيجابايت من القرص مع node_modules.
النشر خطوة بخطوة
تثبيت محوّل Node وإعداده
أضف
@sveltejs/adapter-nodeوصرّح عنه فيsvelte.config.js(adapter: adapter()). فهو الذي يحوّل تطبيقك إلى خادم Node مستقلّ بدلًا من حزمة serverless.بناء التطبيق
شغّل
npm run build. يُولّد SvelteKit مجلّدbuild/يحتوي علىindex.js، وهو نقطة دخول الخادم. تختبره محليًا باستخدامnode build؛ وهو يستمع افتراضيًا على المنفذ 3000.الحوسبة في حاوية أو تحويل العملية إلى خدمة خفيّة
مع Docker: ملفّ Dockerfile بصورة
node:20-alpineينسخbuild/وpackage.json، ويثبّت تبعيات الإنتاج (npm ci --omit=dev) ويُشغّلnode build. دون Docker: استخدم PM2 معpm2 start build/index.js --name svelte-appلإعادة التشغيل التلقائي.حقن إعداد وقت التشغيل
مرّر
PORTوORIGIN(لا غنى عنه كي يتحقّق SvelteKit من إجراءات النماذج) وأسرارك عبر البيئة:ORIGIN=https://mydomain.com. دونORIGINصحيح، ستفشل إجراءات النماذج في بيئة الإنتاج بخطأ CSRF.إعداد Nginx كواجهة أمامية
أنشئ مضيفًا افتراضيًا مع
proxy_pass http://127.0.0.1:3000;والترويستينproxy_set_header HostوX-Forwarded-Proto $scheme. فعّلproxy_http_version 1.1وترويساتUpgradeإذا كنت تستخدم WebSockets.التأمين باستخدام Let's Encrypt
شغّل
certbot --nginx -d mydomain.com. بمجرّد تثبيت الشهادة، تحقّق من أنّORIGINيطابق عنوان URL النهائي بـ HTTPS، وإلّا ستُرفض عمليات إرسال النماذج.
خزّن مخرجات المسارات الساكنة مؤقّتًا بترويسة Cache-Control في دوال load الخاصة بك، وفعّل الضغط المسبق: يقدّم adapter-node تلقائيًا ملفّات .gz و.br إن وُجدت. ابنِ مع الضغط المسبق بتعيين precompress: true في خيارات المحوّل. أمّا من جهة إدارة العمليات، ففضّل وضع العنقود (cluster) الخاص بـ PM2 (pm2 start build/index.js -i max) لاستغلال جميع أنوية خادم VPS تحت حمل معالج مرتفع.
نشر SvelteKit بنقرة واحدة من Marketplace
يوفّر Marketplace من ServOrbit قالب SvelteKit Stack الذي يُهيّئ تلقائيًا Node.js LTS وPM2 وNginx على خادم VPS يعمل بـUbuntu 24.04 في دقائق. اختر VPS، وحدّد القالب، واحصل على بيئة إنتاج جاهزة لمشروع SvelteKit الخاص بك — دون الحاجة إلى أوامر النظام. يُثبّت التزويد سلسلة الأدوات الكاملة؛ كل ما تبقّى هو نقل build وإعداد Nginx لنطاقك.