نشر مشروع Astro عبر Dokploy وNixpacks مع تفعيل التخزين المؤقت
1. إعداد Dokploy
Dokploy منصة نشر مفتوحة المصدر قابلة للاستضافة الذاتية، صُممت كبديل مجاني لـ Heroku وVercel وNetlify، وتعتمد على Docker وTraefik.
1.1 إنشاء مشروع وربطه بـ GitHub
1.2 ضبط متغيرات البيئة
NIXPACKS_NODE_VERSION=22
NIXPACKS_PNPM_STORE_PATH=/root/.local/share/pnpm/store/v3
NIXPACKS_INSTALL_CACHE_DIRS=/app/node_modules
NIXPACKS_BUILD_CACHE_DIRS=/app/node_modules/.cache,/app/astro_cache
1.3 تعطيل تنظيف الكاش
- من لوحة المشروع → Clean Cache: أوقفها.
- من خدمة الويب → Daily Docker Cleanup: أوقفها.
2. محرك البناء Nixpacks
Nixpacks أداة مفتوحة المصدر من Railway لتحويل الشفرة إلى صور Docker قياسية. يستخدمه Dokploy افتراضيًا، ويمكن ضبطه عبر ملف nixpacks.toml أو nixpacks.json في جذر المشروع.
ترتيب أولوية الإعدادات (من الأدنى للأعلى)
- منطق الموفر الافتراضي.
- ملف
nixpacks.toml. - متغيرات البيئة.
- وسائط سطر الأوامر.
متغيرات بيئة شائعة
| المتغير | الوصف |
|---|---|
NIXPACKS_INSTALL_CMD | أمر التثبيت المخصص |
NIXPACKS_BUILD_CMD | أمر البناء المخصص |
NIXPACKS_START_CMD | أمر التشغيل |
NIXPACKS_PKGS | حزم Nix إضافية |
NIXPACKS_APT_PKGS | حزم Apt إضافية |
NIXPACKS_INSTALL_CACHE_DIRS | مسارات كاش مرحلة التثبيت |
NIXPACKS_BUILD_CACHE_DIRS | مسارات كاش مرحلة البناء |
NIXPACKS_NO_CACHE | تعطيل التخزين المؤقت (لا ينصح) |
NIXPACKS_CONFIG_FILE | تحديد ملف إعداد |
NIXPACKS_DEBIAN | استخدام صورة Debian |
3. ضبط مشروع Astro
Astro إطار مخصص لمواقع المحتوى مثل المدونات وصفحات التسويق والمتاجر الساكنة. عند كثرة الصور والملفات الساكنة قد تطول مدة البناء، لذا يفيد التخزين المؤقت بشكل كبير.
3.1 تحديد مجلد الكاش
حدد مجلدًا في إعداد Astro ليستوعب مخرجات الكاش كي يعاد استخدامها لاحقًا.
// astro.config.mjs
export default defineConfig({
cacheDir: "./astro_cache",
});
3.2 ملف إعداد Nixpacks
أنشئ nixpacks.toml في جذر المشروع:
[phases.setup]
nixPkgs = ["nodejs_22", "pnpm"]
[phases.install]
cmds = ["pnpm install --frozen-lockfile"]
cacheDirectories = ["/root/.local/share/pnpm/store/v3"]
[phases.build]
cmds = ["pnpm run build"]
cacheDirectories = [
"node_modules/.cache",
"astro_cache"
]
[start]
cmd = "echo 'تم البناء، قدّم مجلد dist عبر NGINX'"
3.3 تحسين سياق Docker
أضف .dockerignore في الجذر:
node_modules
astro_cache
dist
*.log
.DS_Store
.vscode
.env*
4. النشر والتحقق
بعد أن يكمل Dokploy عملية النشر تحقق من السجلات بحثًا عن:
- أوامر بناء تستخدم التخزين المؤقت:
RUN --mount=type=cache,id=xxx-node_modules/cache,target=/app/node_modules/.cache \
--mount=type=cache,id=xxx-astro_cache,target=/app/astro_cache \
pnpm run build
- رسائل تشير إلى إعادة استخدام الكاش أثناء بناء Astro:
▶ /_astro/202409272055577_Z2smeTW.avif (reused cache entry)
إذا رأيت هذه الرسائل فقد فُعّل التخزين المؤقت وقلت مدة البناء. في لوحة Dokploy ستلاحظ أن البناء انخفض من 31 دقيقة إلى نحو 3 دقائق.
5. ملاحظات
- اجعل
cacheDirفي Astro مطابقًا للمسارات في Nixpacks. - عرّف مسارات الكاش بدقة في كل طور ليصيب التخزين المؤقت.
- يدعم
nixpacks.tomlاستخدام القيم المدمجة من متغيرات البيئة. - مجلد
node_modules/.astroلا يُخزَّن افتراضيًا، لذا حدده يدويًا إذا لزم.
تاريخ النشر: 14 يوليو 2025 · تاريخ التعديل: 20 نوفمبر 2025