Panduan

Tumpukan Docker Compose produksi di VPS

Menengah25 menit bacaDiperbarui 27 Juni 2026
Jawaban singkat

Tumpukan produksi yang layak adalah Caddy untuk TLS otomatis, aplikasi Anda, PostgreSQL dan Redis, didefinisikan dalam satu file Compose dengan volume bernama dan pemeriksaan kesehatan. Pada 8 GB RAM dengan NVMe ini menangani lalu lintas yang substansial, dan snapshot sebelum setiap deploy membuat rollback menjadi operasi dua menit.

01 Pasang Docker dari repositori resmi

Distribution packages lag significantly. The convenience script is fine on a fresh instance.

curl -fsSL https://get.docker.com | sh
systemctl enable --now docker

02 Tulis file Compose

Caddy obtains and renews certificates automatically, which removes the single most common source of production breakage.

services:
  caddy:
    image: caddy:2-alpine
    restart: unless-stopped
    ports: ["80:80", "443:443", "443:443/udp"]
    volumes:
      - ./Caddyfile:/etc/caddy/Caddyfile:ro
      - caddy_data:/data
  app:
    build: .
    restart: unless-stopped
    depends_on: { db: { condition: service_healthy } }
    environment:
      DATABASE_URL: postgres://app:${DB_PASS}@db:5432/app
  db:
    image: postgres:17-alpine
    restart: unless-stopped
    environment:
      POSTGRES_USER: app
      POSTGRES_PASSWORD: ${DB_PASS}
    volumes: [pgdata:/var/lib/postgresql/data]
    healthcheck:
      test: ["CMD-SHELL", "pg_isready -U app"]
      interval: 10s
volumes: { caddy_data: {}, pgdata: {} }

03 Konfigurasi Caddy

Three lines is a complete TLS-terminating reverse proxy with automatic certificate renewal.

app.example.com {
  encode zstd gzip
  reverse_proxy app:8000
}

04 Cadangkan database, bukan containernya

A file copy of a running Postgres data directory produces a corrupt backup that appears to succeed. Dump it properly.

docker compose exec -T db pg_dump -U app app | zstd > /backups/app-$(date +%F).sql.zst

05 Snapshot sebelum setiap deploy

Free, instant, and it converts a failed deployment from an incident into a rollback.

Pertanyaan yang sering diajukan

Berapa banyak RAM yang dibutuhkan ini?

Jumlahkan batas memori container dan tambahkan sekitar 1 GB untuk host. Tumpukan ini nyaman dalam 8 GB.

Haruskah saya menggunakan Docker Swarm atau Kubernetes sebagai gantinya?

Tidak untuk satu server. Compose adalah alat yang tepat sampai Anda benar-benar memiliki lebih dari satu node.