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, оплата в крипте.
Комментарии
Пока нет комментариев. Будьте первым.