Come usare Docker per deploy veloci su VPS (guida pratica e completa)
Estimated reading: 2 minutes
10 views
1. Preparazione VPS (Ubuntu)
Aggiorna il sistema:
apt update && sudo apt upgrade -y
Installa pacchetti base:
apt install ca-certificates curl gnupg -y
2. Installazione Docker (metodo ufficiale, consigliato)
Evita docker.io (spesso non aggiornato). Usa il repository ufficiale Docker.
Aggiungi chiave GPG:
install -m 0755 -d /etc/apt/keyrings
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg
Aggiungi repository:
echo \
"deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu \
$(. /etc/os-release && echo $VERSION_CODENAME) stable" | \
tee /etc/apt/sources.list.d/docker.list > /dev/null
Installa Docker:
apt update
apt install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin -y
Verifica:
docker --version
docker compose version
3. Permessi (evitare sudo)
sudo usermod -aG docker $USER
4. Struttura progetto (standard reale)
/app
├── Dockerfile
├── docker-compose.yml
├── .env
└── codice
5. Esempio reale: deploy Node.js su Ubuntu VPS
Dockerfile (ottimizzato)
FROM node:18-alpine
WORKDIR /app
COPY package*.json ./
RUN npm ci --only=production
COPY . .
EXPOSE 3000
CMD ["node", "server.js"]
Dockerfile (ottimizzato)
version: "3.9"
services:
app:
build: .
container_name: app_node
ports:
- "3000:3000"
restart: unless-stopped
env_file:
- .env
6. Deploy (1 comando)
docker compose up -d --build
7. Aggiornamento rapido (deploy continuo)
git pull
docker compose up -d --build
Tempo medio: 10–60 secondi
8. Debug e controllo
Container attivi:
docker ps
Log:
docker logs -f app_node
Entrare nel container:
docker exec -it app_node sh
9. Persistenza dati (fondamentale su Ubuntu VPS)
Esempio database:
services:
db:
image: postgres:15
volumes:
- pg_data:/var/lib/postgresql/data
volumes:
pg_data:
Senza volumi → perdi tutto al restart.
10. Deploy multi-servizio (pattern reale)
version: "3.9"
services:
app:
build: .
ports:
- "3000:3000"
depends_on:
- db
db:
image: postgres:15
environment:
POSTGRES_PASSWORD: example
volumes:
- pg_data:/var/lib/postgresql/data
volumes:
pg_data:
11. Reverse proxy (produzione su Ubuntu)
Per usare dominio + HTTPS:
Opzioni solide:
- Nginx (manuale)
- Traefik (automatico con Docker)
Esempio rapido (concetto):
- container app → porta interna
- proxy → espone 80/443
- certificati SSL automatici
12. Ottimizzazioni specifiche Ubuntu
✔ Usa ufw per firewall:
ufw allow OpenSSH
ufw allow 80
ufw allow 443
ufw enable
✔ Controlla risorse:
htop
✔ Pulizia immagini:
docker system prune -a