← Kembali ke blog

Panduan Praktis Deploy self-hosted n8n dengan Docker di VPS

Panduan menjalankan n8n self-hosted di VPS dengan Docker, data persisten, reverse proxy, HTTPS, backup, dan monitoring.

Panduan Praktis Deploy self-hosted n8n dengan Docker di VPS

Ringkasan

Menjalankan n8n secara self-hosted di VPS memberi kontrol lebih besar atas data, jaringan, dan siklus deployment. Namun, instalasi yang hanya membuat container berjalan belum cukup untuk production. Anda juga perlu memastikan data persisten, URL webhook benar, akses terlindungi, backup tersedia, dan proses update dapat dipulihkan.

Artikel ini membahas pola deployment n8n menggunakan Docker Compose dan reverse proxy. Contoh domain, password, dan secret di bawah ini adalah placeholder yang wajib diganti.

Kapan self-hosted n8n sesuai?

Self-hosted n8n sesuai ketika bisnis membutuhkan:

  • kontrol atas lokasi penyimpanan workflow dan credential
  • integrasi internal melalui jaringan privat
  • webhook dengan domain sendiri
  • kebijakan backup dan retention yang dapat ditentukan sendiri
  • fleksibilitas mengatur resource dan proses deployment

Gunakan resource berdasarkan beban nyata. Jumlah workflow, frekuensi webhook, concurrency, dan ukuran data lebih menentukan daripada sekadar jumlah workflow.

Arsitektur yang direkomendasikan

Pola dasar yang mudah dioperasikan:

Internet
   |
HTTPS reverse proxy
   |
 n8n container
   |
Persistent volume

Untuk beban kecil, SQLite dapat digunakan dengan backup yang disiplin. Untuk concurrency lebih tinggi atau kebutuhan availability yang lebih ketat, pertimbangkan PostgreSQL dan Redis sesuai dokumentasi versi n8n yang digunakan.

Prasyarat

  • VPS Linux dengan resource yang sesuai beban
  • domain atau subdomain yang mengarah ke VPS
  • port 80 dan 443 tersedia untuk reverse proxy
  • Docker Engine dan Docker Compose Plugin
  • akses SSH dengan sudo
  • backup storage yang terpisah dari VPS

Menyiapkan directory dan environment

sudo mkdir -p /opt/n8n/data
sudo chown -R "$USER":"$USER" /opt/n8n
cd /opt/n8n
umask 077

Buat file .env dan isi dengan nilai unik:

TZ=Asia/Jakarta
N8N_HOST=automation.example.com
N8N_ENCRYPTION_KEY=ganti-dengan-secret-acak-yang-panjang

Jangan commit .env ke repository. Gunakan secret manager atau backup terenkripsi untuk menyimpan salinannya.

Contoh Docker Compose

services:
  n8n:
    image: n8nio/n8n:latest
    restart: unless-stopped
    environment:
      N8N_HOST: ${N8N_HOST}
      N8N_PORT: 5678
      N8N_PROTOCOL: https
      WEBHOOK_URL: https://${N8N_HOST}/
      N8N_EDITOR_BASE_URL: https://${N8N_HOST}/
      N8N_ENCRYPTION_KEY: ${N8N_ENCRYPTION_KEY}
      GENERIC_TIMEZONE: ${TZ}
    volumes:
      - ./data:/home/node/.n8n

Jangan expose port n8n langsung ke internet jika reverse proxy menjadi pintu masuk utama. Pastikan permission directory data hanya dapat diakses oleh user yang membutuhkan.

Jalankan dengan:

docker compose config
docker compose pull
docker compose up -d
docker compose ps

docker compose config membantu mendeteksi kesalahan interpolasi environment sebelum container dijalankan.

Reverse proxy dan webhook

Reverse proxy harus meneruskan host dan protocol asli. Contoh Nginx minimal:

server {
    server_name automation.example.com;

    location / {
        proxy_pass http://127.0.0.1:5678;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;
    }
}

Sesuaikan konfigurasi dengan provider dan versi n8n. Setelah itu validasi konfigurasi, aktifkan TLS, dan uji endpoint webhook dari luar jaringan.

Jika webhook masih menghasilkan URL localhost, periksa N8N_HOST, N8N_PROTOCOL, WEBHOOK_URL, dan header proxy. Jangan memperbaiki masalah ini dengan membuka port internal secara langsung.

Backup, update, dan monitoring

Backup minimal mencakup:

  • volume data n8n
  • file Compose
  • file environment
  • credential backup yang disimpan secara aman

Sebelum update:

docker compose config
docker compose pull
docker compose up -d

docker compose logs --since=10m n8n

Pantau CPU, RAM, disk, restart count, error log, dan waktu eksekusi workflow. Tetapkan batas disk karena database SQLite dan log dapat tumbuh tanpa disadari.

Hardening

  • gunakan HTTPS dan autentikasi n8n
  • batasi akses SSH dengan key dan firewall
  • jangan simpan secret di node atau log secara sembarangan
  • gunakan image versi yang telah diuji, bukan update tanpa rencana
  • uji restore backup secara berkala
  • pisahkan environment development dan production

Penutup

Self-hosted n8n memberi kontrol, tetapi kontrol tersebut disertai tanggung jawab operasional. Deployment yang siap production harus dapat dibackup, dimonitor, diperbarui, dan dipulihkan. Mulailah dari arsitektur sederhana, ukur beban nyata, lalu naikkan database atau worker hanya ketika kebutuhan memang muncul.