Docker Compose מתאר ערימה מרובת-קונטיינרים בקובץ אחד ומריץ אותה בפקודה אחת. זה ה-how-to לפריסה; קודם התקינו את Docker אם עוד לא. לערימה ספציפית-לסוכני-AI (סוכן + vector DB + Redis), ראו docker-compose לסוכני AI.
1. ערימה: אפליקציה + מסד נתונים + reverse proxy
# /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 מופעל ב-boot = הערימה חוזרת אחרי reboot מעצמה.
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 שחשבתם שסגורה. פרסמו רק את נקודת הכניסה הציבורית (ה-proxy על 80/443); שמרו מסדי נתונים ו-caches על רשת ה-compose או קשורים ל-127.0.0.1. כל דבר שמגיש תעבורת ווב צריך תוכנית עם IP ייעודי; שלבו עם חומת אש UFW.
לערימה שלמה מאחורי IP אחד, ראו אחסון עצמי של מספר שירותים. root בערך תוך דקה, NVMe, ללא KYC, שלמו בקריפטו.
תגובות
אין עדיין תגובות. היו הראשונים.