Docker Compose descrive uno stack multi-container in un solo file e lo esegue con un comando. Questa è la guida al deploy; prima installa Docker se non l'hai fatto. Per uno stack specifico per agenti IA (agente + DB vettoriale + Redis), vedi docker-compose per agenti IA.
1. Uno stack: app + database + 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: {} }
I segreti vivono in .env, mai nel file compose:
# /opt/stack/.env (chmod 600, git-ignored)
DB_PASSWORD=a-long-random-string
Un Caddyfile minimo fa da proxy del tuo dominio all'app e ottiene HTTPS da solo:
app.yourdomain.com {
reverse_proxy app:8080
}
2. Avvialo
cd /opt/stack
docker compose up -d
docker compose ps
docker compose logs -f app
restart: unless-stopped su ogni servizio + Docker abilitato al boot = lo stack torna da solo dopo un reboot.
3. Comandi di ogni giorno
docker compose pull && docker compose up -d # update images
docker compose down # stop the stack
docker compose restart app # restart one service
La parte che la gente sbaglia: porte esposte
Docker pubblica le porte tramite iptables, quindi un container con ports: ["5432:5432"] è raggiungibile da internet anche dietro un firewall UFW che credevi chiuso. Pubblica solo il punto d'ingresso pubblico (il proxy su 80/443); tieni database e cache sulla rete compose o vincolati a 127.0.0.1. Tutto ciò che serve traffico web richiede un piano a IP dedicato; abbinalo a un firewall UFW.
Per un intero stack dietro un IP, vedi self-host di più servizi. Root in circa un minuto, NVMe, niente KYC, pagamento in cripto.
Commenti
Ancora nessun commento. Sii il primo.