Datacenter Jakarta, Indonesia Disk NVMe · KVM Bayar QRIS, tanpa kartu kredit Mulai Rp20.000/bulan
Otomasi

Self-Host n8n di VPS dengan Docker

Panduan memasang n8n self-host di VPS Indonesia: Docker Compose dengan PostgreSQL, reverse proxy Caddy untuk HTTPS, webhook publik, enkripsi kredensial, dan backup.

4 Oktober 2026 · 8 menit baca · Tim VPS Indonesia

n8n self-host memberi eksekusi workflow tanpa batas dan kredensial yang tersimpan di servermu sendiri. Mini 2 GB cukup untuk belasan workflow; Lite 3 GB jika memakai browser headless; Standar 6 GB untuk tim dan mode queue.

Prasyarat

  • Docker & Compose sudah terpasang (panduan Docker).
  • Subdomain, misalnya n8n.domainmu.com, record A → IP VPS.
  • Port 80/443 terbuka di firewall.

1. Struktur & environment

mkdir -p ~/apps/n8n && cd ~/apps/n8n
openssl rand -hex 24   # simpan sebagai N8N_ENCRYPTION_KEY

Buat .env:

N8N_HOST=n8n.domainmu.com
WEBHOOK_URL=https://n8n.domainmu.com/
GENERIC_TIMEZONE=Asia/Jakarta
N8N_ENCRYPTION_KEY=GANTI_DENGAN_HASIL_OPENSSL
POSTGRES_USER=n8n
POSTGRES_PASSWORD=GANTI_PASSWORD_KUAT
POSTGRES_DB=n8n

2. compose.yml

services:
  postgres:
    image: postgres:16-alpine
    restart: unless-stopped
    environment:
      POSTGRES_USER: ${POSTGRES_USER}
      POSTGRES_PASSWORD: ${POSTGRES_PASSWORD}
      POSTGRES_DB: ${POSTGRES_DB}
    volumes:
      - ./pgdata:/var/lib/postgresql/data
    healthcheck:
      test: ["CMD-SHELL", "pg_isready -U ${POSTGRES_USER} -d ${POSTGRES_DB}"]
      interval: 10s
      retries: 10

  n8n:
    image: docker.n8n.io/n8nio/n8n:latest
    restart: unless-stopped
    depends_on:
      postgres:
        condition: service_healthy
    environment:
      DB_TYPE: postgresdb
      DB_POSTGRESDB_HOST: postgres
      DB_POSTGRESDB_DATABASE: ${POSTGRES_DB}
      DB_POSTGRESDB_USER: ${POSTGRES_USER}
      DB_POSTGRESDB_PASSWORD: ${POSTGRES_PASSWORD}
      N8N_HOST: ${N8N_HOST}
      N8N_PROTOCOL: https
      N8N_PORT: 5678
      WEBHOOK_URL: ${WEBHOOK_URL}
      GENERIC_TIMEZONE: ${GENERIC_TIMEZONE}
      N8N_ENCRYPTION_KEY: ${N8N_ENCRYPTION_KEY}
      N8N_RUNNERS_ENABLED: "true"
    ports:
      - "127.0.0.1:5678:5678"
    volumes:
      - ./n8n_data:/home/node/.n8n

  caddy:
    image: caddy:2
    restart: unless-stopped
    ports:
      - "80:80"
      - "443:443"
    volumes:
      - ./Caddyfile:/etc/caddy/Caddyfile
      - ./caddy_data:/data

Caddyfile:

n8n.domainmu.com {
    reverse_proxy n8n:5678
}
docker compose up -d
docker compose logs -f n8n

Buka https://n8n.domainmu.com, buat akun pemilik. Sertifikat SSL diterbitkan Caddy otomatis.

3. Webhook & integrasi lokal

Karena VPS punya IP publik dan HTTPS, webhook dari WhatsApp API (Evolution/WAHA), payment gateway, atau Google Forms langsung sampai. Letakkan layanan WhatsApp API di Compose yang sama dan hubungkan via nama service (http://evolution:8080) — lihat VPS untuk bot WhatsApp.

4. Mode queue untuk beban besar (opsional)

Untuk ratusan eksekusi per jam, aktifkan EXECUTIONS_MODE=queue dengan Redis dan container worker terpisah. Butuh paket Standar ke atas.

5. Backup

Yang wajib disimpan: folder n8n_data (berisi kredensial terenkripsi) dan dump PostgreSQL:

docker compose exec postgres pg_dump -U n8n n8n | gzip > backup-$(date +%F).sql.gz

Simpan N8N_ENCRYPTION_KEY di tempat aman — tanpa kunci ini kredensial tidak bisa didekripsi saat restore. Jadwalkan backup ke penyimpanan terpisah dengan restic.

Pembaruan

docker compose pull && docker compose up -d

Baca catatan rilis n8n sebelum lompat versi mayor.

Praktikkan

Paket yang cocok untuk panduan ini

Mini

VPS 30 ribu, RAM 2 GB — siap WordPress.

Rp30.000/bulan

  • 1 vCPU Intel Xeon
  • 2 GB RAM
  • 25 GB NVMe
  • Jakarta · IP publik

Lite

VPS 50 ribu — 2 vCPU, 3 GB, serba bisa.

Rp50.000/bulan

  • 2 vCPU Intel Xeon
  • 3 GB RAM
  • 40 GB NVMe
  • Jakarta · IP publik

Mulai dari Rp20.000, aktif dalam hitungan menit

Pilih paket sesuai kebutuhan, bayar via QRIS, dan server Jakarta kamu siap dipakai. Upgrade kapan saja tanpa instal ulang.