Cara Menjalankan n8n di VPS Murah Rp10.000/Bulan (Panduan 2026)
Berapa yang Anda bayar setiap bulan untuk alat otomasi seperti Zapier atau Make, dan berapa banyak workflow yang terpaksa Anda pangkas karena kuota eksekusi? Kalau jawabannya membuat Anda menghela napas, kabar baiknya begini: n8n, platform otomasi open-source yang kini menjadi favorit banyak tim teknis, bisa Anda jalankan sendiri di VPS seharga Rp10.000 per bulan. Tanpa batas jumlah workflow, tanpa batas eksekusi, dan data tetap berada di server Anda sendiri di Jakarta.
Namun menjalankan n8n di server berspesifikasi kecil berbeda dengan menjalankannya di laptop. Ada beberapa hal yang wajib Anda atur sejak awal agar n8n stabil, aman, dan tidak kehabisan memori di tengah malam. Panduan ini membahas semuanya langkah demi langkah, dengan konfigurasi yang mengikuti praktik terbaik industri tahun 2026.
Kenapa n8n Cocok untuk VPS Murah?
n8n berbasis Node.js dan secara bawaan memakai SQLite sebagai database. Artinya, untuk penggunaan perorangan atau tim kecil, Anda tidak perlu server database terpisah. Selama Anda membatasi penyimpanan riwayat eksekusi dan menambahkan swap, n8n bisa berjalan nyaman di VPS kelas entry.
Beberapa skenario yang realistis untuk VPS murah:
- Meneruskan pesan formulir website ke WhatsApp, Telegram, atau email.
- Sinkronisasi pesanan dari marketplace ke Google Sheets setiap 15 menit.
- Ringkasan otomatis berbasis AI (misalnya memanggil API model bahasa) untuk email masuk atau laporan harian.
- Monitoring uptime website dan notifikasi ketika ada gangguan.
Yang perlu Anda hindari di server kecil adalah workflow yang memproses ribuan baris data dalam satu eksekusi atau menyimpan file besar di memori. Untuk kasus seperti itu, Anda bisa naik paket kemudian tanpa mengubah konfigurasi yang akan kita buat.
Satu catatan lisensi: n8n Community Edition dirilis dengan Sustainable Use License. Anda bebas memakainya untuk kebutuhan internal bisnis, tetapi tidak untuk dijual kembali sebagai layanan otomasi kepada pihak lain.
Prasyarat Sebelum Mulai
- VPS Linux dengan Ubuntu 24.04 LTS atau Debian 12. Anda bisa memakai paket entry VPS KVM NVMe ContaPoD yang aktif otomatis setelah pembayaran QRIS.
- Akses SSH sebagai root atau user dengan hak sudo.
- Domain atau subdomain, misalnya n8n.domainanda.com, dengan record A yang mengarah ke IP publik VPS. Ini wajib jika Anda ingin webhook bekerja dengan HTTPS.
- Pemahaman dasar terminal: menjalankan perintah, mengedit file dengan nano, dan membaca log.
- Sekitar 30 menit waktu luang.
Memilih Konfigurasi yang Tepat untuk Server Kecil
Sebelum masuk ke langkah teknis, pahami dulu pilihan arsitektur yang tersedia. Banyak tutorial di internet langsung menyarankan PostgreSQL dan mode queue dengan Redis, padahal untuk VPS kecil itu justru membebani.
| Aspek | SQLite (bawaan) | PostgreSQL | Mode Queue + Redis |
|---|---|---|---|
| Konsumsi RAM tambahan | Hampir nol | Sekitar 50 sampai 150 MB | Ratusan MB (worker + Redis) |
| Kompleksitas setup | Sangat rendah | Sedang | Tinggi |
| Cocok untuk | Perorangan dan tim kecil, puluhan workflow | Tim menengah, eksekusi paralel tinggi | Skala besar, ribuan eksekusi per jam |
| Backup | Salin satu folder | pg_dump | pg_dump + konfigurasi worker |
| Rekomendasi untuk VPS Rp10.000 | Ya | Hanya jika RAM memadai | Tidak |
Panduan ini memakai SQLite dengan Docker Compose dan Caddy sebagai reverse proxy. Caddy dipilih karena mengurus sertifikat HTTPS Let's Encrypt secara otomatis tanpa konfigurasi tambahan, dan konsumsi memorinya kecil.
Langkah-Langkah Menjalankan n8n di VPS
- Perbarui sistem dan aktifkan firewall
Login ke VPS lewat SSH, lalu perbarui paket dan buka hanya port yang benar-benar dibutuhkan: SSH (22), HTTP (80), dan HTTPS (443). Port 5678 milik n8n sengaja tidak dibuka ke publik karena akses akan melewati Caddy.
# Perbarui daftar paket dan sistem sudo apt update && sudo apt upgrade -y # Aktifkan firewall, izinkan SSH terlebih dahulu agar tidak terkunci sudo ufw allow OpenSSH sudo ufw allow 80/tcp sudo ufw allow 443/tcp sudo ufw enableCatatan penting: Docker memodifikasi iptables secara langsung, sehingga port yang dipublikasikan container bisa melewati aturan UFW. Itulah alasan kita tidak memetakan port 5678 ke host sama sekali.
- Tambahkan swap untuk mencegah kehabisan memori
Ini langkah yang paling sering dilewatkan dan paling sering menjadi penyebab n8n tiba-tiba mati. Swap berfungsi sebagai cadangan memori di disk. Karena VPS ContaPoD memakai NVMe, swap jauh lebih responsif dibanding disk HDD atau SSD SATA lama.
# Buat file swap 2 GB sudo fallocate -l 2G /swapfile sudo chmod 600 /swapfile sudo mkswap /swapfile sudo swapon /swapfile # Jadikan permanen setelah reboot echo '/swapfile none swap sw 0 0' | sudo tee -a /etc/fstab # Kurangi kecenderungan kernel memakai swap terlalu dini echo 'vm.swappiness=10' | sudo tee /etc/sysctl.d/99-swap.conf sudo sysctl --systemNilai swappiness 10 membuat kernel tetap memprioritaskan RAM, dan baru memakai swap ketika memori benar-benar menipis.
- Instal Docker dan Docker Compose
Menjalankan n8n lewat Docker adalah metode yang direkomendasikan tim n8n sendiri. Pembaruan versi cukup dilakukan dengan menarik image baru, dan lingkungan Node.js tidak bercampur dengan sistem.
# Skrip instalasi resmi Docker (sudah termasuk plugin Compose) curl -fsSL https://get.docker.com | sudo sh # Verifikasi instalasi docker --version docker compose version - Siapkan struktur folder dan kunci enkripsi
n8n mengenkripsi semua kredensial (API key, token, password) yang Anda simpan. Kunci enkripsi ini harus Anda tentukan sendiri dan simpan di tempat aman. Jika kunci hilang, seluruh kredensial di backup Anda tidak bisa dibuka.
mkdir -p ~/n8n && cd ~/n8n # Buat kunci acak 32 byte, lalu simpan juga di password manager Anda openssl rand -hex 32 - Buat file konfigurasi environment
Pisahkan konfigurasi sensitif ke file .env agar file Compose tetap bersih dan bisa dibagikan tanpa membocorkan rahasia.
nano .envIsi dengan konfigurasi berikut, sesuaikan domain dan kunci enkripsi:
# Domain publik n8n N8N_HOST=n8n.domainanda.com N8N_PROTOCOL=https WEBHOOK_URL=https://n8n.domainanda.com/ # Kunci enkripsi kredensial (hasil openssl rand -hex 32) N8N_ENCRYPTION_KEY=ganti_dengan_kunci_anda # Zona waktu agar Schedule Trigger sesuai WIB GENERIC_TIMEZONE=Asia/Jakarta TZ=Asia/Jakarta # Hemat disk dan RAM: hapus riwayat eksekusi lebih dari 7 hari (168 jam) EXECUTIONS_DATA_PRUNE=true EXECUTIONS_DATA_MAX_AGE=168 EXECUTIONS_DATA_PRUNE_MAX_COUNT=5000 # Simpan detail eksekusi sukses hanya bila diperlukan EXECUTIONS_DATA_SAVE_ON_SUCCESS=none EXECUTIONS_DATA_SAVE_ON_ERROR=all # Batasi heap Node.js agar tidak menghabiskan seluruh RAM NODE_OPTIONS=--max-old-space-size=512 # Matikan telemetri dan perbaiki izin file konfigurasi N8N_DIAGNOSTICS_ENABLED=false N8N_ENFORCE_SETTINGS_FILE_PERMISSIONS=trueDua pengaturan yang paling berdampak di server kecil adalah EXECUTIONS_DATA_SAVE_ON_SUCCESS=none dan pruning. Tanpa keduanya, file database SQLite bisa membengkak hingga gigabyte dalam beberapa minggu, terutama jika Anda punya workflow yang berjalan tiap menit. Eksekusi yang gagal tetap tersimpan sehingga Anda masih bisa melakukan debugging.
- Tulis file Docker Compose
Buat file docker-compose.yml yang berisi dua layanan: Caddy di depan dan n8n di belakang. Keduanya berada di jaringan internal Docker yang sama.
services: caddy: image: caddy:2 restart: unless-stopped ports: - "80:80" - "443:443" volumes: - ./Caddyfile:/etc/caddy/Caddyfile:ro - caddy_data:/data - caddy_config:/config n8n: image: docker.n8n.io/n8nio/n8n:stable restart: unless-stopped env_file: .env # Tidak ada 'ports': n8n hanya bisa diakses lewat Caddy volumes: - n8n_data:/home/node/.n8n volumes: caddy_data: caddy_config: n8n_data:Tag stable lebih aman daripada latest untuk produksi, karena latest bisa berisi rilis terbaru yang belum banyak diuji. Untuk kontrol penuh, Anda bahkan bisa mengunci ke nomor versi tertentu dan memperbaruinya secara terjadwal.
- Konfigurasi Caddy untuk HTTPS otomatis
Buat file Caddyfile di folder yang sama:
n8n.domainanda.com { # Teruskan semua request ke container n8n reverse_proxy n8n:5678 # Kompresi respons agar editor lebih cepat dimuat encode gzip zstd }Caddy akan meminta sertifikat Let's Encrypt saat pertama kali dijalankan dan memperbaruinya otomatis. Pastikan record DNS domain sudah mengarah ke IP VPS sebelum langkah berikutnya, karena proses validasi sertifikat membutuhkan domain yang sudah aktif.
- Jalankan dan buat akun pemilik
docker compose up -d # Pantau log sampai muncul pesan editor siap docker compose logs -f n8nBuka https://n8n.domainanda.com di browser. Halaman pertama akan meminta Anda membuat akun owner. Lakukan ini segera, karena siapa pun yang membuka URL tersebut lebih dulu bisa mengklaim akun owner. Setelah masuk, aktifkan autentikasi dua faktor di menu pengaturan akun.
- Uji dengan workflow sederhana
Buat workflow baru berisi node Webhook (metode POST) dan node Respond to Webhook. Aktifkan workflow, lalu salin Production URL dan uji dari terminal:
curl -X POST https://n8n.domainanda.com/webhook/uji-coba \ -H "Content-Type: application/json" \ -d '{"pesan":"halo dari VPS"}'Jika respons diterima, berarti domain, HTTPS, dan webhook sudah bekerja dengan benar. Dari sini, Anda bisa mulai membangun workflow sungguhan.
- Atur backup otomatis
Praktik terbaik industri menyarankan aturan 3-2-1: tiga salinan, dua media, satu di luar server. Minimal, ekspor workflow dan kredensial setiap hari lalu salin ke penyimpanan lain.
#!/usr/bin/env bash # Simpan sebagai ~/n8n/backup.sh lalu: chmod +x backup.sh set -euo pipefail TANGGAL=$(date +%F) TUJUAN=~/n8n-backup/$TANGGAL mkdir -p "$TUJUAN" # Ekspor workflow dan kredensial (kredensial tetap terenkripsi) docker compose -f ~/n8n/docker-compose.yml exec -T n8n \ n8n export:workflow --all --separate --output=/home/node/.n8n/export/workflows docker compose -f ~/n8n/docker-compose.yml exec -T n8n \ n8n export:credentials --all --separate --output=/home/node/.n8n/export/credentials # Salin hasil ekspor dari volume ke folder backup host docker cp "$(docker compose -f ~/n8n/docker-compose.yml ps -q n8n)":/home/node/.n8n/export "$TUJUAN" # Hapus backup lokal yang lebih tua dari 14 hari find ~/n8n-backup -mindepth 1 -maxdepth 1 -type d -mtime +14 -exec rm -rf {} +Jadwalkan lewat crontab -e dengan baris 0 2 * * * /root/n8n/backup.sh agar berjalan setiap pukul 02.00 WIB. Kemudian sinkronkan folder backup ke penyimpanan eksternal menggunakan rclone atau sejenisnya.
- Perbarui n8n secara berkala
Tim n8n merilis pembaruan secara rutin, termasuk perbaikan keamanan. Sebelum update, jalankan backup terlebih dahulu.
cd ~/n8n ./backup.sh docker compose pull docker compose up -d # Bersihkan image lama untuk menghemat disk docker image prune -f
Tips Menjaga n8n Tetap Ringan di Server Kecil
Konfigurasi di atas sudah cukup untuk sebagian besar kebutuhan. Agar tetap stabil dalam jangka panjang, terapkan kebiasaan berikut saat merancang workflow:
- Gunakan pagination dan batching. Node Loop Over Items dengan ukuran batch 50 sampai 100 jauh lebih hemat memori daripada memproses 5.000 item sekaligus.
- Jangan menyimpan file biner di memori. Jika workflow mengolah PDF atau gambar berukuran besar, atur N8N_DEFAULT_BINARY_DATA_MODE=filesystem agar data biner ditulis ke disk NVMe, bukan ke RAM.
- Hindari polling terlalu sering. Trigger tiap menit pada puluhan workflow akan terus membangunkan proses. Gunakan webhook bila layanan sumber mendukungnya.
- Pantau pemakaian sumber daya. Perintah docker stats menunjukkan konsumsi CPU dan RAM per container secara langsung. Jika n8n konsisten di atas 80 persen memori, saatnya upgrade paket.
- Panggil AI lewat API, bukan model lokal. Menjalankan model bahasa lokal seperti lewat Ollama tidak realistis di VPS entry. Node AI di n8n yang memanggil API penyedia model tetap ringan karena pemrosesan berat terjadi di sisi penyedia.
Mengatasi Masalah Umum
Container n8n berulang kali restart atau mati tiba-tiba
Penyebab utama: kehabisan memori (OOM killer). Periksa dengan dmesg | grep -i oom atau docker inspect untuk melihat status OOMKilled.
Solusi: pastikan swap aktif (cek dengan free -h), turunkan nilai --max-old-space-size, dan pecah workflow besar menjadi beberapa batch. Periksa juga apakah ada workflow yang memuat data sangat besar dalam satu eksekusi.
URL webhook menampilkan localhost:5678
Penyebab utama: variabel WEBHOOK_URL tidak terbaca atau keliru.
Solusi: periksa file .env, pastikan WEBHOOK_URL diakhiri garis miring dan memakai https, lalu jalankan ulang dengan docker compose up -d agar container dibuat ulang. Perintah restart saja tidak memuat ulang file environment.
Muncul peringatan secure cookie saat membuka editor
Penyebab utama: Anda mengakses n8n lewat HTTP biasa, sementara n8n secara bawaan mewajibkan cookie aman.
Solusi: akses lewat domain HTTPS melalui Caddy. Jangan mematikan N8N_SECURE_COOKIE di server publik, karena sesi login bisa disadap.
Caddy gagal mendapatkan sertifikat HTTPS
Penyebab utama: DNS belum mengarah ke IP VPS, atau port 80 dan 443 tertutup.
Solusi: verifikasi dengan dig n8n.domainanda.com, pastikan hasilnya IP VPS Anda. Cek log dengan docker compose logs caddy. Jika memakai proxy CDN, nonaktifkan dulu mode proxy sampai sertifikat berhasil terbit.
Jadwal workflow meleset beberapa jam
Penyebab utama: zona waktu masih UTC.
Solusi: pastikan GENERIC_TIMEZONE=Asia/Jakarta di .env, lalu periksa juga pengaturan zona waktu per workflow di menu Settings. Pengaturan per workflow akan menimpa pengaturan global.
Kredensial tidak bisa dibuka setelah migrasi server
Penyebab utama: N8N_ENCRYPTION_KEY di server baru berbeda dengan server lama.
Solusi: gunakan kunci enkripsi yang sama persis. Inilah alasan kunci tersebut wajib disimpan di password manager sejak langkah keempat.
Disk penuh dalam beberapa minggu
Penyebab utama: riwayat eksekusi menumpuk atau image Docker lama tidak dibersihkan.
Solusi: aktifkan pruning seperti di file .env di atas, jalankan docker system df untuk melihat pemakaian, dan bersihkan dengan docker image prune -f. Setelah pruning, file SQLite tidak otomatis mengecil; atur DB_SQLITE_VACUUM_ON_STARTUP=true lalu restart sekali untuk merapikannya.
Penutup: Otomasi Tanpa Kuota, Biaya Setara Segelas Kopi
Dengan Docker, Caddy, swap, dan pruning eksekusi yang terkonfigurasi benar, n8n bisa berjalan stabil di VPS seharga Rp10.000 per bulan. Anda mendapatkan workflow tanpa batas, data yang tetap di server Indonesia, dan kendali penuh atas pembaruan serta backup.
Kuncinya bukan pada besarnya server, melainkan pada disiplin konfigurasi: batasi memori, buang riwayat eksekusi yang tidak perlu, amankan kunci enkripsi, dan backup secara rutin. Ketika kebutuhan Anda bertambah, cukup naikkan paket tanpa mengubah satu baris pun dari konfigurasi di atas.
Siap mencoba? Aktifkan VPS NVMe Jakarta di ContaPoD, bayar dengan QRIS, dan server Anda langsung aktif otomatis sehingga Anda bisa mulai dari langkah pertama panduan ini dalam hitungan menit.
