Docker Compose описва многоконтейнерен стек в един файл и го пуска с една команда. Това е ръководството за разгръщане; първо инсталирай Docker, ако още не си. За стек, специфичен за AI агенти (агент + векторна БД + 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 включен при зареждане = стекът се връща сам след рестартиране.
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, плащане в крипто.
Коментари
Още няма коментари. Бъди първият.