−25%

su Windows con pagamento annuale, fino al 31/10. Vai ai piani

EQVPS
Inizia

Come distribuire uno stack Docker Compose su un VPS

Distribuisci uno stack multi-container su un VPS con Docker Compose: scrivi docker-compose.yml, tieni i segreti in .env, avvialo con riavvio-dopo-reboot e pubblica solo le porte che intendi davvero. Esempio copia-incolla con un'app web, database e reverse proxy.

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.

Come liberare spazio su disco su un VPS senza romperlo →

FAQ

Come distribuisco uno stack Docker Compose su un VPS?

Installa Docker con il plugin Compose, scrivi un docker-compose.yml che descrive ogni servizio, tieni i segreti in un .env ignorato da git, poi docker compose up -d. Metti restart: unless-stopped su ogni servizio e abilita Docker al boot così lo stack sopravvive ai reboot. L'esempio sotto esegue un'app web, Postgres e un reverse proxy Caddy.

Dove vanno i segreti — nel file compose?

No. Mettili in un file .env (chmod 600, ignorato da git) e referenziali come ${VAR} in compose, oppure usa i Docker secrets. Non committare mai password o chiavi API in docker-compose.yml — un file trapelato con credenziali attive è l'errore classico.

Lo stack tornerà dopo un reboot?

Solo se glielo dici. Metti restart: unless-stopped (o always) su ogni servizio e abilita Docker al boot (systemctl enable docker). Allora docker compose up -d sopravvive ai reboot e riavvia i container caduti.

Quali porte vengono esposte?

Solo ciò che pubblichi con ports:. Vincola i servizi interni (database, cache) alla rete compose o a 127.0.0.1 e pubblica solo il punto d'ingresso pubblico — di solito un reverse proxy su 80/443. Docker pubblica tramite iptables, quindi una riga ports: accidentale è raggiungibile da internet anche dietro UFW.

Chiedete un documento o una carta?

No. Un'email per registrarti, pagamento in USDC o USDT — niente documenti, niente carta. Root in circa un minuto.

Commenti

Ancora nessun commento. Sii il primo.

Lascia un commento

I commenti sono moderati prima di comparire.