n8n Cloud mulai €20/bulan dengan batas eksekusi. Self-host di VPS n8n Rp29.900/bulan: tanpa batas workflow, tanpa batas eksekusi, data di server sendiri. Panduan ini memakai Docker Compose + PostgreSQL + Caddy (SSL otomatis).
1. Siapkan VPS
- Order VPS Starter (1 vCPU/2 GB) untuk puluhan workflow ringan, atau Pro (2 vCPU/4 GB) bila ada workflow AI/scraping.
- Pilih template Ubuntu 24.04 + Docker.
- Buat record DNS
A n8n.domainmu.com → IP-VPS. Pastikan port 80 dan 443 terbuka (ufw dan port forwarding panel). - Selesaikan pengamanan dasar.
2. Buat docker-compose.yml
mkdir -p /opt/n8n && cd /opt/n8n
Isi docker-compose.yml:
services:
postgres:
image: postgres:16-alpine
restart: unless-stopped
environment:
POSTGRES_USER: n8n
POSTGRES_PASSWORD: ${DB_PASSWORD}
POSTGRES_DB: n8n
volumes:
- pg_data:/var/lib/postgresql/data
n8n:
image: docker.n8n.io/n8nio/n8n:latest
restart: unless-stopped
depends_on: [postgres]
environment:
N8N_HOST: ${DOMAIN}
N8N_PROTOCOL: https
N8N_PORT: 5678
WEBHOOK_URL: https://${DOMAIN}/
GENERIC_TIMEZONE: Asia/Jakarta
TZ: Asia/Jakarta
N8N_ENCRYPTION_KEY: ${N8N_ENCRYPTION_KEY}
DB_TYPE: postgresdb
DB_POSTGRESDB_HOST: postgres
DB_POSTGRESDB_DATABASE: n8n
DB_POSTGRESDB_USER: n8n
DB_POSTGRESDB_PASSWORD: ${DB_PASSWORD}
N8N_RUNNERS_ENABLED: "true"
volumes:
- n8n_data:/home/node/.n8n
caddy:
image: caddy:2-alpine
restart: unless-stopped
ports: ["80:80", "443:443"]
volumes:
- ./Caddyfile:/etc/caddy/Caddyfile
- caddy_data:/data
volumes:
pg_data:
n8n_data:
caddy_data:
Isi Caddyfile:
{$DOMAIN} {
reverse_proxy n8n:5678
}
3. Isi file .env
cat > .env <<EOF
DOMAIN=n8n.domainmu.com
DB_PASSWORD=$(openssl rand -hex 16)
N8N_ENCRYPTION_KEY=$(openssl rand -hex 24)
EOF
chmod 600 .env
N8N_ENCRYPTION_KEY mengunci semua kredensial di n8n — simpan salinannya; tanpa kunci ini backup kredensial tidak bisa dibuka.
4. Jalankan
docker compose up -d
docker compose logs -f n8n
Caddy otomatis meminta sertifikat Let’s Encrypt. Buka https://n8n.domainmu.com, buat akun owner, dan n8n siap dipakai. Webhook URL akan berbentuk https://n8n.domainmu.com/webhook/... — bisa langsung dipakai untuk WhatsApp Cloud API, Telegram, atau form website.
5. Backup & update
Backup mingguan (jadwalkan di cron):
cd /opt/n8n
docker compose exec -T postgres pg_dump -U n8n n8n | gzip > /root/n8n-$(date +%F).sql.gz
docker run --rm -v n8n_n8n_data:/data -v /root:/backup alpine tar czf /backup/n8n-data-$(date +%F).tgz /data
Simpan hasilnya ke luar VPS (object storage) dan buat snapshot di panel sebelum update. Update:
docker compose pull && docker compose up -d
Tips kinerja
- Aktifkan task runners (sudah di compose) agar node Code tidak memberatkan proses utama.
- Workflow berat (AI, scraping)? Naik ke 2 vCPU/4 GB — resize dari panel tanpa instal ulang.
- Gunakan Cloudflare Tunnel bila ingin menyembunyikan IP tanpa membuka port 80/443.
- Pantau RAM dengan
docker stats; n8n idle ±300 MB, PostgreSQL ±50 MB.
Ingin menghubungkan n8n dengan agent AI? Lihat VPS untuk AI agent.