Docker Compose อธิบายสแตกหลายคอนเทนเนอร์ในไฟล์เดียวและรันด้วยคำสั่งเดียว นี่คือคู่มือ deploy; ก่อนอื่น ติดตั้ง 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: {} }
secret อยู่ใน .env ไม่ใช่ในไฟล์ compose เด็ดขาด:
# /opt/stack/.env (chmod 600, git-ignored)
DB_PASSWORD=a-long-random-string
Caddyfile ขั้นต่ำทำ proxy โดเมนของคุณไปยังแอปและดึง 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 ที่คุณคิดว่าปิดแล้ว เผยแพร่ เฉพาะ จุดเข้าสาธารณะ (proxy บน 80/443); เก็บฐานข้อมูลและแคชไว้บนเครือข่าย compose หรือผูกกับ 127.0.0.1 อะไรก็ตามที่ให้บริการทราฟฟิกเว็บต้องมี แพ็กเกจ IP เฉพาะ; จับคู่กับ ไฟร์วอลล์ UFW
สำหรับสแตกทั้งชุดหลัง IP เดียว ดู self-host หลายบริการ root ในราวหนึ่งนาที NVMe ไม่ต้อง KYC จ่ายด้วยคริปโต
ความคิดเห็น
ยังไม่มีความคิดเห็น เป็นคนแรกสิ