Instal n8n Self-Hosted di VPS dengan Docker & HTTPS
Pasang n8n self-hosted di VPS pakai Docker & HTTPS otomatis. Praktis, aman, cocok untuk non-DevOps dan vibe coders.
•
Frendi Triarista

Gambaran Cepat
- Apa: n8n = automation builder (drag & drop), webhook, cron, integrasi API.
- Target: 15–30 menit, 1 VPS + 1 domain → HTTPS aktif + login basic.
- Arsitektur: Docker (n8n) ←reverse proxy→ Caddy (HTTPS otomatis)
Storage pakai SQLite (cukup buat solo/kecil, upgrade ke Postgres nanti kalau perlu).
Prasyarat
- VPS Ubuntu 22.04/24.04 (min 1 vCPU, 1–2 GB RAM).
- Domain/subdomain, mis. n8n.example.com sudah diarahkan ke IP VPS (A/AAAA).
- Akses SSH (sudo). Port 80/443 terbuka.
Langkah Instalasi (copy–paste)
Quick path: kita pakai Docker Compose. No manual TLS—Caddy urus semua.
1) Pasang Docker
curl -fsSL https://get.docker.com | sh
sudo usermod -aG docker $USER && newgrp docker
2) Siapkan folder proyek
sudo mkdir -p /opt/n8n && sudo chown -R $USER:$USER /opt/n8n
cd /opt/n8n
mkdir -p data/n8n data/caddy data/caddy-config
3) Buat file .env
cat > .env << 'EOF'
TZ=Asia/Jakarta
DOMAIN=n8n.example.com
# Basic Auth buat gerbang depan
N8N_BASIC_AUTH_USER=admin
N8N_BASIC_AUTH_PASSWORD=GantiDenganPasswordKuat
# Secret untuk enkripsi kredensial node
N8N_ENCRYPTION_KEY=GantiDenganSecretPanjangBanget
EOF
Tips: bikin secret cepat
openssl rand -base64 32 → tempel ke N8N_ENCRYPTION_KEY.
4) Buat filedocker-compose.yml
version: "3.8"
services:
n8n:
image: n8nio/n8n:latest
restart: unless-stopped
environment:
N8N_HOST: ${DOMAIN}
N8N_PORT: 5678
N8N_PROTOCOL: https
WEBHOOK_URL: https://${DOMAIN}
N8N_EDITOR_BASE_URL: https://${DOMAIN}
GENERIC_TIMEZONE: ${TZ}
# Security
N8N_BASIC_AUTH_ACTIVE: "true"
N8N_BASIC_AUTH_USER: ${N8N_BASIC_AUTH_USER}
N8N_BASIC_AUTH_PASSWORD: ${N8N_BASIC_AUTH_PASSWORD}
N8N_ENCRYPTION_KEY: ${N8N_ENCRYPTION_KEY}
N8N_SECURE_COOKIE: "true"
N8N_DIAGNOSTICS_ENABLED: "false"
volumes:
- ./data/n8n:/home/node/.n8n
# Tidak expose port; semua lewat caddy
caddy:
image: caddy:2
restart: unless-stopped
depends_on:
- n8n
ports:
- "80:80"
- "443:443"
volumes:
- ./Caddyfile:/etc/caddy/Caddyfile:ro
- ./data/caddy:/data
- ./data/caddy-config:/config
5) Buat Caddyfile (HTTPS otomatis)
{
email you@example.com
}
{$DOMAIN} {
encode gzip
reverse_proxy n8n:5678
}
6) Jalankan
docker compose pull
docker compose up -d
docker compose ps
Tunggu ~30 detik sampai sertifikat TLS siap.
Buka: https://n8n.example.com → login dengan Basic Auth (user/pass dari .env) → lanjut buat akun n8n pertama.
Cara Pakai (5 Menit)
- Klik + New → pilih Webhook (Trigger).
- Set path test → Listen for test event.
- Kirim request:
curl -X POST https://n8n.example.com/webhook/test -d '{"ok":true}' -H "Content-Type: application/json"
- Tambah node Function atau HTTP Request → Execute.
- Activate workflow. Selesai.
Maintenance Mudah
- Update n8n:
cd /opt/n8n
docker compose pull n8n && docker compose up -d n8n
- Backup cepat (SQLite + config):
tar czf /opt/n8n-backup-$(date +%F).tgz -C /opt/n8n/data n8n
File DB ada di data/n8n/database.sqlite (tersimpan otomatis dalam arsip di atas).
Troubleshooting
- Domain belum HTTPS: cek DNS sudah ke IP VPS & port 80/443 terbuka; lihat docker compose logs -f caddy.
- Loop login: pastikan N8N_HOST = domain kamu dan akses via https://... (bukan IP).
- Webhook 404: path di node Webhook harus sama persis dengan URL yang dipanggil.
Naik Kelas (untuk trafik lebih tinggi)
- Pindah ke Postgres (lebih tahan banting): tambah service postgres, ubah DB_TYPE=postgresdb + variabel DB terkait, lalu migrasi data.
- SSO/2FA: taruh SSO di depan (Authelia/Keycloak) atau aktifkan SSO n8n sesuai dokumentasi.
- Queue mode: tambahkan Redis untuk eksekusi paralel volume tinggi.
Prinsipnya: mulai ringan, scale bertahap. Kamu bangun automations dulu, bukan data center.
Checklist Akhir
Itu saja. Copy–paste, hidupkan, langsung ngoprek automations.