Instal n8n Self-Hosted di VPS dengan Docker & HTTPS
frendi triarista

Instal n8n Self-Hosted di VPS dengan Docker & HTTPS

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)

    1) Pasang Docker

    bash
    curl -fsSL https://get.docker.com | sh sudo usermod -aG docker $USER && newgrp docker

    2) Siapkan folder proyek

    bash
    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

    bash
    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

    openssl rand -base64 32 → tempel ke N8N_ENCRYPTION_KEY.

    4) docker-compose.yml

    yaml
    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) Caddyfile (HTTPS otomatis)

    plain text
    { email you@example.com } {$DOMAIN} { encode gzip reverse_proxy n8n:5678 }

    6) Jalankan

    bash
    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:
  • bash
    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:
  • bash
    cd /opt/n8n docker compose pull n8n && docker compose up -d n8n
  • Backup cepat (SQLite + config):
  • bash
    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.
  • Checklist Akhir

    Itu saja. Copy–paste, hidupkan, langsung ngoprek automations.

    workflowautomationhttpsvpsdockerself-hostedn8ntutorial