Verdict Cepat: Menjalankan n8n self-hosted di VPS Linux dengan Docker Compose adalah cara paling hemat dan fleksibel untuk mengotomatisasi workflow bisnis atau scraping tanpa biaya langganan bulanan ratusan dolar. Setup butuh VPS minimal 1 GB RAM, Docker, domain aktif, dan reverse proxy Nginx atau Caddy untuk SSL otomatis.
Automasi workflow menjadi kebutuhan mendasar bagi freelancer, developer, dan pemilik bisnis online yang ingin menghemat waktu kerja harian. Banyak platform no-code komersial mematok biaya tinggi berdasarkan jumlah eksekusi workflow atau task bulanan. Saat volume pekerjaan bertambah, biaya operasional membengkak drastis. n8n hadir sebagai solusi automasi workflow berbasis node visual yang menyediakan lisensi fair-code, memungkinkan implementasi mandiri (self-hosted) di atas server pribadi tanpa batasan kuota task.
Saya menjalankan instance n8n mandiri di server VPS pribadi sejak lama untuk menangani integrasi webhook, notifikasi Telegram bot, hingga pipeline backup database berkala. Dalam artikel ini, saya membagikan panduan teknis langkah demi langkah mengenai cara deploy n8n self-hosted di VPS Linux secara aman, stabil, dan siap produksi.
Keputusan menggunakan n8n mandiri dibandingkan layanan automasi SaaS (seperti Zapier, Make, atau n8n Cloud) didasari oleh tiga pertimbangan utama: efisiensi biaya, privasi data, dan kebebasan integrasi.
Layanan cloud proprietary umumnya mengenakan biaya berjenjang per task. Misalnya, workflow pengecekan RSS atau webhook yang berjalan tiap lima menit dapat menghabiskan ribuan task dalam hitungan hari. Dengan self-hosted n8n di server VPS seharga 5 sampai 10 dolar per bulan, eksekusi workflow dapat berjalan ratusan ribu kali tanpa biaya tambahan.
Dari segi keamanan, data sensitif seperti API key, token database, kredensial pembayaran, dan data pelanggan tetap tersimpan di server pribadi, tanpa pernah melewati server pihak ketiga. Selain itu, versi self-hosted mendukung integrasi node khusus (custom nodes), eksekusi script Python atau JavaScript langsung di container, dan koneksi langsung ke database lokal di jaringan internal VPS.
Kebebasan melakukan kustomisasi kode ini memberikan keunggulan kompetitif bagi pengembang. Workflow dapat memanggil library native Linux, mengeksekusi binary command line seperti ffmpeg atau pandoc, serta memproses file berukuran gigabyte langsung di filesystem lokal tanpa terbentur batasan payload HTTP.
Untuk menjalankan n8n dengan lancar tanpa kendala memori habis (Out of Memory/OOM), berikut adalah spesifikasi server yang disarankan:
n8n.domainanda.com) yang sudah diarahkan DNS A record ke IP public VPS.Penyedia VPS murah seperti Hetzner, DigitalOcean, Linode, atau Vultr menyediakan server dengan spesifikasi tersebut pada rentang harga 4 sampai 6 dolar per bulan.
Berikut adalah ringkasan perbandingan parameter operasional antara n8n mandiri dan alternatif berbasis cloud:
| Fitur / Parameter | n8n Self-Hosted | Zapier / Make | n8n Cloud |
|---|---|---|---|
| Biaya Dasar | Hanya biaya sewa VPS ($4 sampai $10/bln) | Mulai $20 sampai $100+/bln | Mulai €20/bln |
| Batas Eksekusi Task | Tanpa batas (unlimited) | Dibatasi kuota bulanan | Dibatasi kuota bulanan |
| Lokasi & Privasi Data | Server pribadi Anda | Server vendor pihak ketiga | Server vendor n8n |
| Eksekusi Script Kustom | Penuh (Python, JS, CLI tool) | Sangat terbatas | Terbatas pada sandboxed JS/Python |
| Pemeliharaan (Maintenance) | Dikelola sendiri | Dikelola penuh oleh vendor | Dikelola penuh oleh vendor |
Masuk ke VPS melalui terminal SSH menggunakan akun root atau user dengan hak akses sudo:
ssh root@IP_VPS_ANDA
Lakukan update paket sistem operasi ke versi terbaru:
sudo apt update && sudo apt upgrade -y
Pasang paket dasar yang diperlukan seperti curl, git, ufw, dan software-properties-common:
sudo apt install -y curl git ufw htop
Konfigurasi firewall UFW untuk mengamankan port server. Buka port 22 (SSH), 80 (HTTP), dan 443 (HTTPS):
sudo ufw default deny incoming
sudo ufw default allow outgoing
sudo ufw allow 22/tcp
sudo ufw allow 80/tcp
sudo ufw allow 443/tcp
sudo ufw enable
Pastikan port SSH tetap terbuka agar koneksi tidak terputus saat firewall diaktifkan.
Cara paling stabil dan mudah untuk menjalankan n8n adalah menggunakan Docker container resmi. Pasang Docker Engine menggunakan repositori resmi Docker:
curl -fsSL https://get.docker.com -o get-docker.sh
sudo sh get-docker.sh
sudo systemctl enable --now docker
Verifikasi bahwa Docker dan Docker Compose plugin telah terpasang dengan baik:
docker --version
docker compose version
Buat direktori khusus untuk menyimpan konfigurasi dan volume data persistent n8n:
mkdir -p ~/n8n-docker
cd ~/n8n-docker
Di dalam folder ~/n8n-docker, buat file bernama docker-compose.yml. Arsitektur ini menyertakan container n8n beserta Caddy web server sebagai reverse proxy otomatis yang menangani sertifikat SSL Let’s Encrypt secara otomatis.
version: '3.8'
services:
caddy:
image: caddy:latest
restart: unless-stopped
ports:
- "80:80"
- "443:443"
volumes:
- ./caddy_data:/data
- ./caddy_config:/config
- ./Caddyfile:/etc/caddy/Caddyfile
depends_on:
- n8n
n8n:
image: docker.n8n.io/n8nio/n8n:latest
restart: unless-stopped
environment:
- N8N_HOST=n8n.domainanda.com
- N8N_PORT=5678
- N8N_PROTOCOL=https
- NODE_ENV=production
- WEBHOOK_URL=https://n8n.domainanda.com/
- GENERIC_TIMEZONE=Asia/Jakarta
- TZ=Asia/Jakarta
- EXECUTIONS_DATA_PRUNE=true
- EXECUTIONS_DATA_MAX_AGE=168
volumes:
- ./n8n_data:/home/node/.n8n
Selanjutnya, buat file konfigurasi Caddyfile di direktori yang sama:
n8n.domainanda.com {
reverse_proxy n8n:5678
}
Ganti n8n.domainanda.com dengan nama subdomain yang dimiliki. Caddy akan secara otomatis menerbitkan dan memperbarui sertifikat SSL tanpa perlu konfigurasi Certbot manual.
Jalankan container di latar belakang menggunakan perintah berikut:
docker compose up -d
Periksa status container untuk memastikan semua service berjalan normal:
docker compose ps
docker compose logs -f n8n
Buka browser dan akses URL subdomain (misalnya: https://n8n.domainanda.com). Halaman setup pertama kali akan meminta pembuatan akun admin n8n (Owner Account). Masukkan email dan password yang kuat, lalu simpan kredensial tersebut dengan aman.
Ada beberapa konfigurasi penting yang wajib diterapkan untuk menjaga instance n8n tetap cepat dan terhindar dari kebocoran memori:
Setiap eksekusi workflow secara default menyimpan log dan payload data di database SQLite bawaan. Jika dibiarkan, ukuran database akan membesar hingga puluhan gigabyte dan memperlambat VPS. Parameter berikut pada environment n8n membersihkan data eksekusi lama secara otomatis:
EXECUTIONS_DATA_PRUNE=true: Mengaktifkan pembersihan log otomatis.EXECUTIONS_DATA_MAX_AGE=168: Menghapus log eksekusi yang lebih tua dari 168 jam (7 hari).Jika VPS hanya memiliki 1 GB RAM, buat 2 GB Swap file untuk mencegah container n8n crash saat terjadi lonjakan traffic webhook:
sudo fallocate -l 2G /swapfile
sudo chmod 600 /swapfile
sudo mkswap /swapfile
sudo swapon /swapfile
echo '/swapfile none swap sw 0 0' | sudo tee -a /etc/fstab
Semua workflow, kredensial terenkripsi, dan setting disimpan dalam folder ./n8n_data. Lakukan backup berkala folder tersebut ke cloud storage atau server lain menggunakan cron job:
tar -czf ~/backup-n8n-$(date +%F).tar.gz ~/n8n-docker/n8n_data
Untuk penggunaan berskala produksi dengan ribuan workflow harian, database SQLite bawaan n8n memiliki keterbatasan konkurensi (database locking). Saya menyarankan peningkatan ke PostgreSQL jika tim menjalankan proses batch paralel intensif.
Tambahkan service PostgreSQL pada file docker-compose.yml:
postgres:
image: postgres:16-alpine
restart: unless-stopped
environment:
- POSTGRES_USER=n8n
- POSTGRES_PASSWORD=password_rahasia_db
- POSTGRES_DB=n8n_db
volumes:
- ./postgres_data:/var/lib/postgresql/data
Lalu arahkan environment n8n ke database tersebut:
- DB_TYPE=postgresdb
- DB_POSTGRESDB_HOST=postgres
- DB_POSTGRESDB_PORT=5422
- DB_POSTGRESDB_DATABASE=n8n_db
- DB_POSTGRESDB_USER=n8n
- DB_POSTGRESDB_PASSWORD=password_rahasia_db
Langkah ini memastikan stabilitas data terjaga saat memproses transaksi data simultan dengan throughput tinggi.
Berdasarkan pengalaman mengelola instance automasi Linux, berikut adalah beberapa kendala yang kerap dialami pemula beserta solusinya:
WEBHOOK_URL tidak diatur ke domain HTTPS lengkap, webhook n8n akan menghasilkan URL internal (seperti localhost:5678) yang tidak bisa diakses oleh layanan eksternal seperti Stripe, GitHub, atau Telegram.n8n_data dibuat oleh root dan tidak memiliki izin tulis, n8n akan gagal start dengan error EACCES: permission denied. Jalankan sudo chown -R 1000:1000 ./n8n_data untuk memperbaikinya.Untuk melengkapi pipeline otomatisasi digital Anda, pelajari juga referensi arsitektur teknis lainnya di Grafisify:
Deploy n8n self-hosted di VPS murah memberikan kontrol penuh terhadap ekosistem automasi data tanpa terikat batasan biaya platform komersial. Kombinasi Docker Compose dan reverse proxy Caddy memungkinkan proses instalasi selesai dalam hitungan menit dengan dukungan SSL otomatis. Dengan menerapkan pruning data eksekusi dan alokasi swap memory yang tepat, VPS berbiaya rendah sekalipun mampu melayani ratusan workflow produktivitas secara stabil dan handal untuk jangka panjang.