EQVPS

كيفية نشر حزمة Docker Compose على VPS

انشر حزمة متعددة الحاويات على VPS باستخدام Docker Compose: اكتب docker-compose.yml، احفظ الأسرار في .env، شغّلها مع إعادة التشغيل بعد الإقلاع، وانشر فقط المنافذ التي تقصدها. مثال جاهز للنسخ واللصق بتطبيق ويب وقاعدة بيانات ووكيل عكسي.

يصف Docker Compose حزمة متعددة الحاويات في ملف واحد ويشغّلها بأمر واحد. هذا دليل النشر؛ أولاً ثبّت Docker إن لم تكن قد فعلت. لحزمة خاصة بوكلاء الذكاء الاصطناعي (وكيل + قاعدة بيانات متجهات + Redis) راجع docker-compose لوكلاء الذكاء الاصطناعي.

1. حزمة: تطبيق + قاعدة بيانات + وكيل عكسي

# /opt/stack/docker-compose.yml
services:
  app:
    image: your/app:latest
    restart: unless-stopped
    env_file: [.env]
    depends_on: [db]
    # no ports: — reached only through the proxy below

  db:
    image: postgres:16-alpine
    restart: unless-stopped
    environment:
      POSTGRES_PASSWORD: ${DB_PASSWORD}
    volumes: ["pg:/var/lib/postgresql/data"]   # internal only

  caddy:                                        # HTTPS automatically
    image: caddy:2
    restart: unless-stopped
    ports: ["80:80", "443:443"]                 # the only public entrypoint
    volumes:
      - ./Caddyfile:/etc/caddy/Caddyfile
      - caddy_data:/data

volumes: { pg: {}, caddy_data: {} }

تعيش الأسرار في .env، لا في ملف compose أبداً:

# /opt/stack/.env  (chmod 600, git-ignored)
DB_PASSWORD=a-long-random-string

Caddyfile بسيط يوكّل نطاقك إلى التطبيق ويجلب HTTPS من تلقاء نفسه:

app.yourdomain.com {
  reverse_proxy app:8080
}

2. شغّلها

cd /opt/stack
docker compose up -d
docker compose ps
docker compose logs -f app

restart: unless-stopped على كل خدمة + تفعيل Docker عند الإقلاع = تعود الحزمة من تلقاء نفسها بعد إعادة التشغيل.

3. أوامر يومية

docker compose pull && docker compose up -d   # update images
docker compose down                            # stop the stack
docker compose restart app                     # restart one service

الجزء الذي يخطئ فيه الناس: المنافذ المكشوفة

ينشر Docker المنافذ عبر iptables، لذا فحاوية بها ports: ["5432:5432"] يمكن الوصول إليها من الإنترنت حتى خلف جدار حماية UFW ظننته مغلقاً. انشر فقط نقطة الدخول العامة (الوكيل على 80/443)؛ أبقِ قواعد البيانات والكاش على شبكة compose أو مربوطة بـ 127.0.0.1. كل ما يخدم حركة ويب يحتاج خطة IP مخصّص؛ اقرِنه بـ جدار حماية UFW.

لحزمة كاملة خلف IP واحد، راجع استضافة عدة خدمات ذاتياً. root في نحو دقيقة، NVMe، بلا KYC، والدفع بالعملات المشفّرة.

الأسئلة الشائعة

كيف أنشر حزمة Docker Compose على VPS؟

ثبّت Docker مع إضافة Compose، اكتب docker-compose.yml يصف كل خدمة، احفظ الأسرار في ملف .env متجاهَل من git، ثم docker compose up -d. اضبط restart: unless-stopped على كل خدمة وفعّل Docker عند الإقلاع لتنجو الحزمة من إعادات التشغيل. يشغّل المثال أدناه تطبيق ويب وPostgres ووكيل Caddy العكسي.

أين توضع الأسرار — في ملف compose؟

لا. ضعها في ملف .env (chmod 600، متجاهَل من git) وأشِر إليها كـ ${VAR} في compose، أو استخدم أسرار Docker. لا تُودِع أبداً كلمات مرور أو مفاتيح API في docker-compose.yml — ملف مسرَّب فيه بيانات اعتماد حية هو الخطأ الكلاسيكي.

هل تعود الحزمة بعد إعادة التشغيل؟

فقط إن طلبت ذلك. اضبط restart: unless-stopped (أو always) على كل خدمة وفعّل Docker عند الإقلاع (systemctl enable docker). عندها ينجو docker compose up -d من إعادات التشغيل ويعيد تشغيل الحاويات المتعطلة.

أي منافذ تُكشف؟

فقط ما تنشره بـ ports:. اربط الخدمات الداخلية (قواعد البيانات، الكاش) بشبكة compose أو بـ 127.0.0.1 وانشر نقطة الدخول العامة فقط — عادةً وكيل عكسي على 80/443. ينشر Docker عبر iptables، لذا سطر ports: غير مقصود يمكن الوصول إليه من الإنترنت حتى خلف UFW.

هل تطلبون هوية أو بطاقة؟

لا. بريد إلكتروني للتسجيل، والدفع بـ USDC أو USDT — بلا مستندات، بلا بطاقة. root في نحو دقيقة.

التعليقات

لا تعليقات بعد. كن الأول.

اترك تعليقًا

تُراجَع التعليقات قبل ظهورها.