EQVPS

Πώς να κάνετε deploy μια στοίβα Docker Compose σε ένα VPS

Κάνε deploy μια στοίβα πολλών container σε ένα VPS με Docker Compose: γράψε docker-compose.yml, κράτα τα secrets στο .env, σήκωσέ την με επανεκκίνηση-μετά-από-reboot και δημοσίευσε μόνο τις θύρες που εννοείς. Παράδειγμα copy-paste με μια web εφαρμογή, βάση δεδομένων και reverse proxy.

Το 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.

Συχνές ερωτήσεις

Πώς κάνω deploy μια στοίβα Docker Compose σε ένα VPS;

Εγκατέστησε το Docker με το plugin Compose, γράψε ένα docker-compose.yml που περιγράφει κάθε υπηρεσία, κράτα τα secrets σε ένα git-ignored .env, μετά docker compose up -d. Βάλε restart: unless-stopped σε κάθε υπηρεσία και ενεργοποίησε το Docker στην εκκίνηση ώστε η στοίβα να επιβιώνει από reboots. Το παρακάτω παράδειγμα τρέχει μια web εφαρμογή, Postgres και έναν Caddy reverse proxy.

Πού πάνε τα secrets — στο αρχείο compose;

Όχι. Βάλ' τα σε ένα αρχείο .env (chmod 600, git-ignored) και αναφέρσου σε αυτά ως ${VAR} στο compose, ή χρησιμοποίησε Docker secrets. Ποτέ μην κάνεις commit κωδικούς ή κλειδιά API στο docker-compose.yml — ένα αρχείο που διαρρέει με ζωντανά διαπιστευτήρια είναι το κλασικό λάθος.

Θα επανέλθει η στοίβα μετά από reboot;

Μόνο αν της το πεις. Βάλε restart: unless-stopped (ή always) σε κάθε υπηρεσία και ενεργοποίησε το Docker στην εκκίνηση (systemctl enable docker). Τότε το docker compose up -d επιβιώνει από reboots και επανεκκινεί container που κατέρρευσαν.

Ποιες θύρες εκτίθενται;

Μόνο ό,τι δημοσιεύεις με ports:. Δέσε τις εσωτερικές υπηρεσίες (βάσεις δεδομένων, caches) στο δίκτυο compose ή στο 127.0.0.1 και δημοσίευσε μόνο το δημόσιο σημείο εισόδου — συνήθως έναν reverse proxy στο 80/443. Το Docker δημοσιεύει μέσω iptables, οπότε μια κατά λάθος γραμμή ports: είναι προσβάσιμη από το διαδίκτυο ακόμη και πίσω από UFW.

Ζητάτε ταυτότητα ή κάρτα;

Όχι. Ένα email για εγγραφή, πληρωμή σε USDC ή USDT — χωρίς έγγραφα, χωρίς κάρτα. Root σε περίπου ένα λεπτό.

Σχόλια

Δεν υπάρχουν ακόμη σχόλια. Γίνετε ο πρώτος.

Αφήστε ένα σχόλιο

Τα σχόλια ελέγχονται πριν εμφανιστούν.