Το Docker Compose περιγράφει μια στοίβα πολλών container σε ένα αρχείο και την τρέχει με μία εντολή. Αυτός είναι ο οδηγός deploy· πρώτα εγκατέστησε το Docker αν δεν το έχεις. Για μια στοίβα ειδική για πράκτορες AI (πράκτορας + βάση διανυσμάτων + Redis), δες docker-compose για πράκτορες AI.
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: {} }
Τα secrets ζουν στο .env, ποτέ στο αρχείο compose:
# /opt/stack/.env (chmod 600, git-ignored)
DB_PASSWORD=a-long-random-string
Ένα ελάχιστο Caddyfile κάνει proxy το domain σου στην εφαρμογή και τραβάει 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 ενεργοποιημένο στην εκκίνηση = η στοίβα επανέρχεται μόνη της μετά από reboot.
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, οπότε ένα container με ports: ["5432:5432"] είναι προσβάσιμο από το διαδίκτυο ακόμη και πίσω από ένα τείχος UFW που νόμιζες κλειστό. Δημοσίευσε μόνο το δημόσιο σημείο εισόδου (τον proxy στο 80/443)· κράτα βάσεις δεδομένων και caches στο δίκτυο compose ή δεμένα στο 127.0.0.1. Οτιδήποτε σερβίρει web κίνηση χρειάζεται πλάνο με αποκλειστική IP· συνδύασέ το με ένα τείχος UFW.
Για μια ολόκληρη στοίβα πίσω από μία IP, δες self-host πολλαπλών υπηρεσιών. Root σε περίπου ένα λεπτό, NVMe, χωρίς KYC, πληρωμή σε crypto.
Σχόλια
Δεν υπάρχουν ακόμη σχόλια. Γίνετε ο πρώτος.