iDiMi
تغيير اللغة
تبديل النمط

نشر مشروع Astro عبر Dokploy وNixpacks مع تفعيل التخزين المؤقت

iDiMi-استخدام Dokploy وNixpacks لنشر Astro بسرعة

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 في جذر المشروع.

ترتيب أولوية الإعدادات (من الأدنى للأعلى)

  1. منطق الموفر الافتراضي.
  2. ملف nixpacks.toml.
  3. متغيرات البيئة.
  4. وسائط سطر الأوامر.

متغيرات بيئة شائعة

المتغيرالوصف
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 عملية النشر تحقق من السجلات بحثًا عن:

  1. أوامر بناء تستخدم التخزين المؤقت:
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
  1. رسائل تشير إلى إعادة استخدام الكاش أثناء بناء Astro:
 /_astro/202409272055577_Z2smeTW.avif (reused cache entry)

إذا رأيت هذه الرسائل فقد فُعّل التخزين المؤقت وقلت مدة البناء. في لوحة Dokploy ستلاحظ أن البناء انخفض من 31 دقيقة إلى نحو 3 دقائق.

5. ملاحظات

  • اجعل cacheDir في Astro مطابقًا للمسارات في Nixpacks.
  • عرّف مسارات الكاش بدقة في كل طور ليصيب التخزين المؤقت.
  • يدعم nixpacks.toml استخدام القيم المدمجة من متغيرات البيئة.
  • مجلد node_modules/.astro لا يُخزَّن افتراضيًا، لذا حدده يدويًا إذا لزم.

تاريخ النشر: 14 يوليو 2025 · تاريخ التعديل: 20 نوفمبر 2025

مقالات ذات صلة