Docker Compose описує багатоконтейнерний стек в одному файлі й запускає його однією командою. Це інструкція з розгортання; спершу встановіть Docker, якщо ще не зробили. Для стека під ШІ-агента (агент + векторна БД + Redis) дивіться docker-compose для ШІ-агентів.
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, оплата в крипті.
Коментарі
Поки немає коментарів. Будьте першим.