Cara Install n8n di VPS: Tutorial Docker Lengkap 2026

Cara install n8n di VPS yang paling stabil sampai hari ini adalah lewat Docker Compose, dipasangkan dengan reverse proxy untuk SSL dan PostgreSQL sebagai database. Prosesnya butuh sekitar 30 menit kalau Anda mengikuti urutan yang benar, dan hasilnya adalah instance n8n milik sendiri: tanpa batas jumlah eksekusi workflow, data tetap di server Anda, dan biaya bulanannya tetap walau workflow Anda jalan ribuan kali per hari.
Panduan ini kami tulis untuk kondisi nyata di Indonesia: VPS entry level dengan RAM terbatas, koneksi ke layanan seperti WhatsApp dan Google Sheets, serta kebutuhan agar instance tidak mati sendiri saat workflow mulai ramai. Semua perintah di bawah sudah kami rapikan supaya bisa disalin apa adanya.

Kenapa Install n8n Sendiri di VPS?
n8n adalah platform workflow automation open source yang bisa dijalankan di server sendiri. Ini yang membedakannya dari Zapier dan Make.com: model bisnis mereka menagih per jumlah eksekusi atau per task, sementara n8n self-hosted menagih Anda satu hal saja, yaitu sewa VPS. Berapa pun workflow yang Anda jalankan, harga VPS tidak berubah.
Alasan kedua adalah kedaulatan data. Kalau workflow Anda memproses nomor telepon pelanggan, isi percakapan WhatsApp, atau data transaksi, semua itu lewat server pihak ketiga pada layanan cloud. Dengan self-hosting, data hanya melewati VPS Anda sendiri. Untuk bisnis yang terikat aturan perlindungan data pribadi, ini bukan sekadar preferensi, tapi kebutuhan.
Alasan ketiga yang jarang dibahas: kebebasan memasang node komunitas. n8n punya ekosistem node buatan komunitas yang hanya bisa diinstal di instance self-hosted. Banyak integrasi lokal Indonesia, terutama untuk gateway WhatsApp dan payment, hidup di ruang ini.
Spesifikasi VPS Minimal untuk n8n
Pertanyaan pertama yang selalu muncul: VPS seperti apa yang cukup? Jawabannya bergantung pada dua hal, yaitu jumlah workflow aktif dan seberapa berat setiap eksekusi. Workflow yang hanya memindahkan baris Google Sheets sangat ringan. Workflow yang memproses PDF, memanggil model AI, atau melakukan scraping jauh lebih rakus memori.
| Skala pemakaian | vCPU | RAM | Storage |
|---|---|---|---|
| Belajar dan uji coba | 1 core | 1 GB (pakai swap) | 20 GB |
| Produksi ringan, di bawah 20 workflow | 2 core | 2 GB | 30 GB NVMe |
| Produksi menengah, ada node AI | 4 core | 4 GB | 60 GB NVMe |
| Queue mode dengan beberapa worker | 8 core | 8 GB | 120 GB NVMe |
Patokan praktis dari pengalaman kami: RAM 1 GB bisa jalan tapi rawan kena OOM killer begitu ada workflow yang menahan file besar di memori. Kalau ini instance yang dipakai bisnis, mulai dari 2 GB. Kalau Anda berencana memakai node AI Agent atau memproses dokumen, langsung ambil 4 GB supaya tidak perlu migrasi lagi dua bulan kemudian.
Soal storage, n8n sendiri kecil. Yang membengkak adalah tabel riwayat eksekusi. Instance yang menjalankan ribuan eksekusi per hari bisa menumpuk beberapa GB data riwayat dalam sebulan kalau tidak diatur masa simpannya. Kami bahas cara membatasinya di bagian akhir.
Kalau Anda belum punya VPS dan ingin membandingkan pilihan yang ada, panduan VPS murah Indonesia dan cara setup VPS Ubuntu bisa jadi titik mulai. Untuk yang ingin lewat jalan pintas, paket n8n Hosting HostingEkspres sudah datang dengan n8n terpasang sehingga Anda bisa melompati seluruh tutorial ini.
Persiapan: Domain, DNS, dan Akses SSH
Sebelum menyentuh terminal, siapkan tiga hal ini. Melewatkannya adalah penyebab paling sering kenapa langkah SSL nanti gagal.
Pertama, subdomain. Siapkan subdomain khusus untuk n8n, misalnya n8n.domainanda.com. Jangan pasang n8n di domain utama yang sudah dipakai website, karena reverse proxy akan bentrok.
Kedua, A record. Arahkan subdomain tadi ke IP publik VPS Anda lewat panel DNS. Tunggu propagasi selesai sebelum lanjut. Cara mengeceknya ada di panduan cara setup DNS records.
Ketiga, akses SSH. Anda butuh user dengan hak sudo. Login dengan root langsung sebenarnya bisa, tapi kebiasaan yang lebih aman adalah membuat user terpisah. Langkah lengkapnya ada di panduan setup VPS.
Langkah 1: Update Server dan Install Docker
Masuk ke VPS lewat SSH, lalu perbarui paket sistem terlebih dahulu. Ini bukan formalitas: menginstal Docker di atas daftar paket yang basi adalah sumber error dependensi yang membingungkan.
# Perbarui daftar paket dan upgrade sistem
sudo apt update && sudo apt upgrade -y
# Install prasyarat
sudo apt install -y ca-certificates curl gnupg lsb-release
Selanjutnya tambahkan repository resmi Docker dan pasang Docker Engine beserta plugin Compose.
# Tambahkan kunci GPG resmi Docker
sudo install -m 0755 -d /etc/apt/keyrings
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg
sudo chmod a+r /etc/apt/keyrings/docker.gpg
# Daftarkan repository Docker
echo "deb [arch=amd64 signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu jammy stable" | sudo tee /etc/apt/sources.list.d/docker.list
# Install Docker Engine dan plugin Compose
sudo apt update
sudo apt install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
Ganti kata jammy dengan codename Ubuntu Anda kalau berbeda. Cek dengan perintah lsb_release -cs. Setelah instalasi selesai, verifikasi dan tambahkan user Anda ke grup docker supaya tidak perlu mengetik sudo setiap kali.
# Verifikasi versi
docker --version
docker compose version
# Jalankan docker tanpa sudo
sudo usermod -aG docker $USER
newgrp docker
Kalau Anda benar-benar baru di Docker, konsep dasarnya kami jelaskan terpisah di cara setup Docker di VPS dan tutorial Docker Compose.
Langkah 2: Siapkan Struktur Folder dan Volume
Buat satu folder khusus untuk seluruh stack n8n. Menaruh semua di satu tempat membuat backup dan migrasi jauh lebih mudah nanti.
# Buat folder kerja
mkdir -p ~/n8n-stack
cd ~/n8n-stack
# Buat folder untuk data persisten
mkdir -p n8n-data postgres-data caddy-data
Satu hal yang sering terlewat: container n8n berjalan sebagai user dengan UID 1000. Kalau folder data dimiliki root, n8n akan gagal menulis dan container berhenti dengan error permission. Atur kepemilikannya sekarang supaya tidak bingung nanti.
sudo chown -R 1000:1000 ~/n8n-stack/n8n-data
Langkah 3: Tulis File Konfigurasi Lingkungan
Jangan menaruh password langsung di dalam file compose. Pisahkan ke file .env supaya bisa di-backup terpisah dan tidak ikut ter-commit kalau folder ini masuk repositori git.
nano ~/n8n-stack/.env
Isi dengan nilai berikut, sesuaikan domain dan password dengan milik Anda sendiri. Buat password panjang dan acak, jangan pakai contoh di bawah.
DOMAIN_NAME=n8n.domainanda.com
GENERIC_TIMEZONE=Asia/Jakarta
TZ=Asia/Jakarta
POSTGRES_USER=n8nuser
POSTGRES_PASSWORD=ganti_dengan_password_acak_panjang
POSTGRES_DB=n8ndb
N8N_ENCRYPTION_KEY=ganti_dengan_string_acak_32_karakter
Langkah 4: Tulis docker-compose.yml untuk n8n
Ini inti dari instalasi. File di bawah menjalankan tiga container sekaligus: n8n sebagai aplikasi, PostgreSQL sebagai database, dan Caddy sebagai reverse proxy yang sekalian mengurus SSL secara otomatis.
nano ~/n8n-stack/docker-compose.yml
services:
postgres:
image: postgres:16-alpine
restart: unless-stopped
environment:
- POSTGRES_USER
- POSTGRES_PASSWORD
- POSTGRES_DB
volumes:
- ./postgres-data:/var/lib/postgresql/data
healthcheck:
test: ["CMD-SHELL", "pg_isready -U $POSTGRES_USER -d $POSTGRES_DB"]
interval: 10s
timeout: 5s
retries: 5
n8n:
image: docker.n8n.io/n8nio/n8n:latest
restart: unless-stopped
depends_on:
postgres:
condition: service_healthy
environment:
- DB_TYPE=postgresdb
- DB_POSTGRESDB_HOST=postgres
- DB_POSTGRESDB_PORT=5432
- DB_POSTGRESDB_DATABASE=$POSTGRES_DB
- DB_POSTGRESDB_USER=$POSTGRES_USER
- DB_POSTGRESDB_PASSWORD=$POSTGRES_PASSWORD
- N8N_HOST=$DOMAIN_NAME
- N8N_PORT=5678
- N8N_PROTOCOL=https
- WEBHOOK_URL=https://$DOMAIN_NAME/
- N8N_ENCRYPTION_KEY=$N8N_ENCRYPTION_KEY
- GENERIC_TIMEZONE=$GENERIC_TIMEZONE
- TZ=$TZ
- N8N_RUNNERS_ENABLED=true
- EXECUTIONS_DATA_PRUNE=true
- EXECUTIONS_DATA_MAX_AGE=336
volumes:
- ./n8n-data:/home/node/.n8n
expose:
- 5678
caddy:
image: caddy:2-alpine
restart: unless-stopped
ports:
- "80:80"
- "443:443"
volumes:
- ./Caddyfile:/etc/caddy/Caddyfile:ro
- ./caddy-data:/data
depends_on:
- n8n
Beberapa baris di atas layak dijelaskan karena sering jadi sumber masalah:
- WEBHOOK_URL wajib diisi domain publik lengkap dengan https. Kalau tidak, semua URL webhook yang dibuat n8n akan memakai alamat localhost dan layanan luar tidak bisa memanggilnya.
- N8N_PROTOCOL=https memberi tahu n8n bahwa ia berada di balik proxy yang sudah menangani TLS.
- EXECUTIONS_DATA_PRUNE dan EXECUTIONS_DATA_MAX_AGE membersihkan riwayat eksekusi otomatis. Nilai 336 berarti 14 hari dalam satuan jam. Tanpa ini, database Anda tumbuh tanpa batas.
- depends_on dengan condition service_healthy memastikan n8n tidak start sebelum PostgreSQL siap menerima koneksi. Ini menghilangkan error koneksi database saat server baru reboot.
Langkah 5: Konfigurasi Caddy untuk SSL Otomatis
Caddy dipilih karena satu alasan sederhana: ia menerbitkan dan memperpanjang sertifikat SSL Let's Encrypt sendiri tanpa konfigurasi tambahan. Seluruh isi file konfigurasinya cuma empat baris.
nano ~/n8n-stack/Caddyfile
n8n.domainanda.com {
reverse_proxy n8n:5678
encode gzip
}
Ganti domain di baris pertama dengan subdomain Anda. Perhatikan bahwa alamat tujuan proxy adalah n8n:5678, memakai nama service dari file compose, bukan localhost. Ini karena antar container berkomunikasi lewat jaringan internal Docker.
Kalau Anda lebih terbiasa dengan Nginx, pendekatannya bisa dibaca di panduan konfigurasi Nginx. Tapi untuk kasus ini Caddy menghemat banyak langkah karena penanganan sertifikatnya otomatis. Latar belakang soal SSL ada di SSL gratis untuk website.
Langkah 6: Jalankan n8n dan Cek Statusnya
Semua file sudah siap. Nyalakan stack-nya.
cd ~/n8n-stack
docker compose up -d
Docker akan mengunduh tiga image lalu menjalankannya. Pada VPS entry level proses ini biasanya makan waktu satu sampai tiga menit. Setelah selesai, periksa apakah ketiganya benar-benar hidup.
# Cek status container
docker compose ps
# Ikuti log n8n secara langsung
docker compose logs -f n8n
Yang Anda cari di log adalah baris yang menyatakan editor sudah bisa diakses. Kalau muncul, buka https://n8n.domainanda.com di browser. Anda akan disambut halaman pembuatan akun owner. Buat akun itu segera, karena selama belum dibuat, instance Anda terbuka untuk siapa saja yang tahu alamatnya.
Langkah 7: Amankan Instance Anda
Instance n8n yang terbuka di internet adalah target menarik, karena di dalamnya tersimpan credential ke seluruh layanan yang Anda hubungkan. Tiga lapis pengamanan berikut ini sebaiknya dipasang di hari yang sama dengan instalasi.
Batasi port yang terbuka
Hanya port 22, 80, dan 443 yang perlu bisa diakses dari luar. Port 5678 milik n8n tidak boleh terbuka langsung, karena Caddy sudah menjadi pintu masuknya.
sudo ufw allow OpenSSH
sudo ufw allow 80/tcp
sudo ufw allow 443/tcp
sudo ufw enable
sudo ufw status verbose
Perhatikan bahwa di file compose kami memakai expose untuk n8n, bukan ports. Bedanya penting: expose hanya membuka port ke jaringan internal Docker, sementara ports membukanya ke seluruh internet dan bisa menembus aturan UFW. Ini kesalahan konfigurasi yang sering terjadi. Bahasan lebih dalam ada di panduan firewall website.
Matikan pendaftaran user tambahan
Setelah akun owner dibuat, tidak ada alasan membiarkan orang lain mendaftar. n8n secara bawaan sudah membatasi ini, tapi pastikan Anda tidak sengaja membagikan link undangan.
Rutinkan update
n8n merilis versi baru dengan tempo cepat, dan sebagian di antaranya berisi perbaikan keamanan. Proses updatenya tiga perintah.
cd ~/n8n-stack
docker compose pull
docker compose up -d
Selalu backup dulu sebelum update. Langkahnya kami rinci di cara backup dan restore workflow n8n.
Kenapa PostgreSQL, Bukan SQLite Bawaan
Kalau Anda menjalankan n8n tanpa mengatur database, ia memakai SQLite. Untuk mencoba-coba ini tidak masalah. Untuk produksi, ada tiga alasan konkret kenapa kami selalu mengganti ke PostgreSQL sejak awal.
Pertama, kunci tulis. SQLite mengunci seluruh file saat menulis. Begitu beberapa workflow berjalan bersamaan, mereka saling menunggu dan eksekusi jadi lambat atau gagal dengan error database terkunci.
Kedua, ukuran file. Riwayat eksekusi menumpuk di file SQLite tunggal yang makin lama makin berat dibuka. Ada titik di mana membuka daftar eksekusi di antarmuka jadi lambat sekali.
Ketiga, jalan menuju queue mode. Kalau nanti Anda perlu menjalankan beberapa worker sekaligus untuk menangani beban lebih besar, PostgreSQL adalah syaratnya. Migrasi database di tengah jalan jauh lebih merepotkan daripada memasangnya benar sejak hari pertama. Detail arsitekturnya kami bahas di scaling n8n dengan Docker Compose.
Verifikasi Instalasi Anda Benar
Sebelum menyatakan selesai, jalankan lima pemeriksaan ini. Melewatkannya berarti Anda baru akan tahu ada yang salah saat workflow penting gagal jalan di tengah malam.
- Akses HTTPS. Buka domain Anda dan pastikan gembok di address bar aktif tanpa peringatan.
- Uji webhook. Buat workflow sederhana dengan trigger Webhook, aktifkan, lalu panggil URL produksinya dari luar. Kalau berhasil, artinya WEBHOOK_URL sudah benar.
- Uji ketahanan reboot. Jalankan sudo reboot, tunggu dua menit, lalu buka lagi domainnya. Berkat restart: unless-stopped, semua container harus hidup sendiri.
- Cek koneksi database. Jalankan docker compose logs n8n dan pastikan tidak ada error koneksi PostgreSQL.
- Cek zona waktu. Buat workflow dengan trigger Schedule, atur ke beberapa menit dari sekarang, lalu pastikan ia jalan pada waktu WIB yang benar.
Kesalahan Umum yang Perlu Dihindari
| Kesalahan | Akibatnya | Cara benar |
|---|---|---|
| Tidak menyimpan encryption key | Semua credential di backup tidak bisa dibuka | Salin ke pengelola password sebelum start pertama |
| Memakai ports untuk container n8n | Port 5678 terbuka ke internet menembus UFW | Pakai expose, biarkan hanya Caddy yang punya ports |
| WEBHOOK_URL kosong atau salah | Webhook dari layanan luar tidak pernah masuk | Isi dengan URL https publik lengkap |
| Folder data dimiliki root | Container gagal start dengan error permission | Jalankan chown ke UID 1000 |
| Tidak mengatur pruning eksekusi | Database membengkak dan disk penuh | Aktifkan EXECUTIONS_DATA_PRUNE sejak awal |
| Zona waktu dibiarkan UTC | Workflow terjadwal jalan tujuh jam meleset | Set GENERIC_TIMEZONE ke Asia/Jakarta |
Estimasi Biaya Menjalankan n8n Sendiri
Karena n8n self-hosted tidak menagih per eksekusi, seluruh biaya Anda adalah biaya server plus domain. Sebagai patokan, paket n8n Hosting HostingEkspres saat artikel ini ditulis dimulai dari Rp99.000 per bulan untuk 2 vCPU dan 2 GB RAM, Rp179.000 untuk 4 vCPU dan 4 GB RAM, serta Rp279.000 untuk 8 vCPU dan 8 GB RAM. Ketiganya sudah dengan n8n terpasang, SSL, dan backup harian, jadi Anda tidak perlu menjalankan langkah 1 sampai 7 di atas sama sekali.
Kalau Anda memilih memasang sendiri di VPS kosong, perhitungannya tetap sama karena beban kerjanya identik. Yang Anda tukar adalah waktu setup dan tanggung jawab maintenance dengan kontrol penuh atas konfigurasi. Perbandingan biaya menyeluruh melawan layanan cloud kami rinci di n8n self-hosted vs cloud.
Langkah Selanjutnya Setelah n8n Hidup
Instance yang menyala baru setengah pekerjaan. Ini urutan yang biasanya kami sarankan setelahnya:
- Pasang backup terjadwal supaya workflow Anda tidak hilang. Lihat panduan backup n8n.
- Bangun workflow pertama yang benar-benar berguna. Kumpulan idenya ada di 50 ide workflow n8n untuk UMKM.
- Kalau targetnya otomasi percakapan pelanggan, mulai dari template n8n WhatsApp.
- Untuk workflow yang melibatkan AI, ikuti panduan integrasi n8n dengan OpenAI dan Claude.
- Saat eksekusi mulai menumpuk, naikkan ke queue mode lewat scaling n8n dengan Docker Compose.
Pertanyaan Umum (FAQ)
Berapa RAM minimal untuk menjalankan n8n di VPS?
Secara teknis n8n bisa jalan di 1 GB RAM, tapi rawan berhenti sendiri saat ada workflow yang memproses file besar. Untuk pemakaian produksi kami menyarankan minimal 2 GB, dan 4 GB kalau Anda berencana memakai node AI atau memproses dokumen.
Apakah bisa install n8n tanpa Docker?
Bisa, lewat npm dengan menjalankan perintah npm install n8n secara global. Tapi cara ini membuat Anda mengurus sendiri versi Node.js, proses manager, dan reverse proxy. Docker Compose menyatukan semuanya dalam satu file dan membuat update maupun rollback jauh lebih sederhana.
Kenapa webhook n8n saya tidak bisa dipanggil dari luar?
Sembilan dari sepuluh kasus penyebabnya adalah WEBHOOK_URL yang tidak diisi atau masih menunjuk ke localhost. Isi dengan URL https publik lengkap, lalu restart container dengan docker compose up -d. Penyebab lain yang mungkin adalah port 443 yang terblokir firewall.
Apakah n8n self-hosted gratis sepenuhnya?
Software n8n edisi community gratis dipakai, termasuk untuk kebutuhan bisnis internal Anda sendiri. Yang tetap Anda bayar adalah sewa VPS dan domain. Fitur enterprise seperti SSO dan log audit berada di lisensi berbayar terpisah.
Bagaimana cara update n8n ke versi terbaru?
Masuk ke folder stack Anda, jalankan docker compose pull untuk menarik image terbaru, lalu docker compose up -d untuk menyalakan ulang dengan versi baru. Selalu ambil backup folder data dan dump database sebelum melakukannya.
Apakah data workflow saya hilang kalau container dihapus?
Tidak, selama Anda memakai volume seperti pada konfigurasi di panduan ini. Data workflow tersimpan di PostgreSQL dan folder n8n-data di host, bukan di dalam container. Menghapus container lalu menjalankannya lagi tidak menghilangkan apa pun.
Kesimpulan
Install n8n di VPS bukan pekerjaan yang rumit kalau urutannya benar: siapkan DNS, pasang Docker, tulis satu file compose yang menyatukan n8n dengan PostgreSQL dan Caddy, lalu tutup port yang tidak perlu. Empat hal yang paling sering bikin celaka adalah encryption key yang tidak disimpan, WEBHOOK_URL yang kosong, port n8n yang telanjur terbuka, dan riwayat eksekusi yang tidak pernah dibersihkan. Selesaikan keempatnya di hari pertama dan instance Anda akan berjalan tenang untuk waktu lama.
Kalau Anda lebih ingin langsung memakai n8n tanpa mengurus terminal sama sekali, paket n8n Hosting HostingEkspres datang dengan n8n yang sudah terpasang, SSL aktif, dan backup harian berjalan. Tim kami siap membantu memilihkan kapasitas yang pas dengan beban workflow Anda.
Artikel Terkait

n8n Self-Hosted vs Cloud: Perbandingan Biaya dan Fitur 2026
Perbandingan lengkap n8n self-hosted dan n8n Cloud: struktur biaya, batas eksekusi, kontrol data, fitur enterprise, dan titik impas kapan sebaiknya pindah ke server sendiri.
Baca Selengkapnya→
Scaling n8n dengan Docker Compose: Queue Mode dan Worker
Cara menaikkan kapasitas n8n self-hosted dengan queue mode, Redis, dan beberapa worker lewat Docker Compose. Termasuk kapan perlu scaling dan cara mengukurnya.
Baca Selengkapnya→
Cara Backup dan Restore Workflow n8n Tanpa Kehilangan Data
Panduan lengkap backup n8n self-hosted: dump PostgreSQL, folder data, encryption key, dan ekspor workflow ke Git. Termasuk skrip otomatis dan prosedur restore yang teruji.
Baca Selengkapnya→Butuh Hosting untuk Website Anda?
Dapatkan hosting cepat, aman, dan terpercaya dengan harga terjangkau. Gratis domain, SSL, dan support 24/7.
Jangan Ketinggalan Promo!
Subscribe newsletter kami dan dapatkan diskon hingga 50% untuk pembelian pertama kamu.
Gratis, tanpa spam. Dengan subscribe, kamu setuju menerima email tips dari Hosting Ekspres. Bisa berhenti kapan saja.