Install n8n di VPS dengan Docker: Panduan Otomasi Bisnis 2026
Menjalankan n8n di VPS itu mudah. Mempertahankannya tetap hidup, aman, dan tidak kehilangan data setelah tiga bulan, itulah yang jarang berhasil. Sebagian besar kegagalan bukan karena n8n-nya rusak, melainkan karena kesalahan kecil di awal: data tidak disimpan di volume, kunci enkripsi hilang, webhook tidak bisa diakses, atau port dibuka telanjang tanpa HTTPS.
Artikel ini mengajak Anda menginstal n8n dengan Docker Compose, sambil menandai setiap jebakan yang biasa menjebak pemula. Hasil akhirnya: n8n berjalan di domain Anda sendiri, memakai HTTPS, datanya persisten, dan siap dipakai untuk mengotomasi pesanan, notifikasi, rekap laporan, sampai bot WhatsApp atau Telegram tanpa menulis kode.
Mengapa n8n di VPS, bukan di laptop atau layanan cloud bawaan?
Otomasi bisnis harus berjalan 24 jam. Jika n8n ada di laptop, workflow berhenti saat laptop tidur. Layanan cloud resmi praktis, tetapi biaya biasanya mengikuti jumlah eksekusi, sehingga makin ramai bisnis Anda, makin mahal tagihannya. Dengan self-hosting di VPS, Anda mengontrol batas eksekusi, data, dan integrasi.
Bayangkan toko online dengan 300 pesanan per hari. Setiap pesanan memicu empat langkah: catat ke spreadsheet, kirim notifikasi ke pembeli, kabari tim gudang, dan perbarui stok. Itu sekitar 1.200 eksekusi per hari. Di VPS, angka ini sekadar beban ringan.
Prasyarat sebelum mulai
- Satu VPS Linux (Ubuntu 22.04 atau 24.04 direkomendasikan) dengan akses root atau pengguna sudo. Untuk lingkungan yang sudah siap pakai, lihat opsi vps docker kami; detail paket ada di vpshosting.id/harga.
- Satu domain atau subdomain, misalnya otomasi.contohbisnis.id, dengan akses ke pengaturan DNS.
- Klien SSH: Terminal bawaan di macOS/Linux, atau PowerShell dan PuTTY di Windows.
- RAM minimal 2 GB agar nyaman; n8n sendiri ringan, tetapi workflow dengan banyak data akan membutuhkan ruang napas.
- Alamat email aktif untuk pendaftaran sertifikat HTTPS.
Langkah-langkah instalasi
Arahkan domain ke VPS
Masuk ke pengelola DNS domain Anda dan buat A record untuk subdomain (misalnya otomasi) yang menunjuk ke alamat IP publik VPS. Lakukan ini paling awal karena propagasi DNS kadang memakan waktu beberapa menit hingga satu jam.
Cek hasilnya dengan perintah berikut dari komputer Anda:
nslookup otomasi.contohbisnis.idJika IP yang muncul sudah sesuai, lanjut.
Masuk ke VPS lewat SSH dan perbarui sistem
Hubungkan ke server, lalu perbarui paket:
ssh root@IP_VPS_ANDA apt update && apt upgrade -yDisarankan membuat pengguna non-root untuk operasional harian agar risiko salah ketik berkurang:
adduser deploy usermod -aG sudo deployPasang Docker dan Docker Compose
Gunakan skrip resmi Docker agar mendapat versi stabil terbaru:
curl -fsSL https://get.docker.com | sh usermod -aG docker deploy docker --version docker compose versionKeluar lalu masuk lagi sebagai pengguna deploy supaya hak akses grup Docker aktif. Jika Anda memakai template VPS yang sudah menyertakan Docker, langkah ini bisa dilewati.
Siapkan firewall
Buka hanya port yang diperlukan: SSH, HTTP, dan HTTPS. Port 5678 milik n8n tidak perlu dibuka ke publik karena akan diakses lewat reverse proxy.
sudo ufw allow OpenSSH sudo ufw allow 80/tcp sudo ufw allow 443/tcp sudo ufw enableIni kesalahan klasik pertama: membuka 5678 langsung ke internet tanpa enkripsi, sehingga kredensial login terkirim polos.
Buat folder proyek dan berkas environment
Pisahkan konfigurasi dari kompose agar rapi dan mudah dicadangkan.
mkdir -p ~/n8n && cd ~/n8n nano .envIsi berkas
.env:DOMAIN=contohbisnis.id SUBDOMAIN=otomasi GENERIC_TIMEZONE=Asia/Jakarta [email protected] N8N_ENCRYPTION_KEY=ISI_DENGAN_STRING_ACAK_PANJANGBuat kunci acak dengan
openssl rand -hex 32. Simpan kunci ini di password manager. Kunci inilah yang mengenkripsi kredensial integrasi Anda (API key, token, password). Jika hilang saat Anda memindahkan server, semua kredensial di workflow tidak bisa dibaca lagi.Tulis docker-compose.yml dengan Traefik dan n8n
Traefik berfungsi sebagai reverse proxy sekaligus mengurus sertifikat HTTPS Let's Encrypt secara otomatis. Buat berkas
docker-compose.yml:services: traefik: image: traefik:v3.1 restart: always command: - "--providers.docker=true" - "--providers.docker.exposedbydefault=false" - "--entrypoints.web.address=:80" - "--entrypoints.websecure.address=:443" - "--entrypoints.web.http.redirections.entrypoint.to=websecure" - "--certificatesresolvers.le.acme.tlschallenge=true" - "--certificatesresolvers.le.acme.email=${SSL_EMAIL}" - "--certificatesresolvers.le.acme.storage=/letsencrypt/acme.json" ports: - "80:80" - "443:443" volumes: - traefik_data:/letsencrypt - /var/run/docker.sock:/var/run/docker.sock:ro n8n: image: docker.n8n.io/n8nio/n8n:latest restart: always environment: - N8N_HOST=${SUBDOMAIN}.${DOMAIN} - N8N_PROTOCOL=https - N8N_PORT=5678 - WEBHOOK_URL=https://${SUBDOMAIN}.${DOMAIN}/ - GENERIC_TIMEZONE=${GENERIC_TIMEZONE} - TZ=${GENERIC_TIMEZONE} - N8N_ENCRYPTION_KEY=${N8N_ENCRYPTION_KEY} - N8N_PROXY_HOPS=1 labels: - traefik.enable=true - traefik.http.routers.n8n.rule=Host(`${SUBDOMAIN}.${DOMAIN}`) - traefik.http.routers.n8n.entrypoints=websecure - traefik.http.routers.n8n.tls.certresolver=le - traefik.http.services.n8n.loadbalancer.server.port=5678 volumes: - n8n_data:/home/node/.n8n volumes: traefik_data: n8n_data:Perhatikan dua hal. Pertama, volume
n8n_datamenyimpan workflow dan kredensial; tanpanya, menghapus kontainer berarti menghapus segalanya. Kedua,WEBHOOK_URLwajib benar, kalau tidak, URL webhook yang tampil di editor akan berisi alamat lokal yang tidak bisa dipanggil layanan luar.Jalankan dan verifikasi
docker compose up -d docker compose ps docker compose logs -f n8nTunggu hingga log menampilkan bahwa n8n siap menerima koneksi. Buka https://otomasi.contohbisnis.id di browser, lalu buat akun pemilik (owner) dengan password kuat. Gembok HTTPS harus muncul; jika belum, tunggu satu-dua menit karena sertifikat sedang diterbitkan.
Bangun workflow pertama tanpa coding
Coba skenario sederhana yang langsung terasa manfaatnya: formulir pemesanan masuk, lalu data tersimpan, lalu pemberitahuan terkirim.
- Tambahkan node Webhook sebagai pemicu dan salin URL produksinya.
- Sambungkan node Google Sheets untuk menambah baris pesanan.
- Tambahkan node Telegram untuk mengirim ringkasan pesanan ke grup tim.
- Aktifkan workflow dengan tombol Active, lalu uji dari formulir sungguhan.
Seluruh proses ini dikerjakan lewat antarmuka drag-and-drop. Tidak ada satu baris kode pun yang perlu Anda tulis.
Atur backup otomatis
Cadangkan volume data secara berkala. Contoh skrip sederhana:
#!/bin/bash # Cadangkan volume n8n ke berkas tar bertanggal DATE=$(date +%F) docker run --rm \ -v n8n_n8n_data:/data \ -v $HOME/backup:/backup \ alpine tar czf /backup/n8n-$DATE.tar.gz -C /data . # Hapus cadangan lebih dari 14 hari find $HOME/backup -name 'n8n-*.tar.gz' -mtime +14 -deleteJadwalkan lewat
crontab -e, misalnya setiap pukul 02.00. Nama volume sebenarnya bergantung pada nama folder proyek; cek dengandocker volume ls. Salin hasil cadangan ke lokasi lain, karena backup yang tersimpan di server yang sama tidak menyelamatkan Anda ketika server bermasalah.
Poin Penting: Tiga hal yang menentukan apakah n8n Anda awet atau tidak: volume data yang persisten,
N8N_ENCRYPTION_KEYyang disimpan terpisah, dan backup yang disalin ke luar server.
Kesalahan umum dan cara menghindarinya
| Kesalahan | Dampak | Pencegahan |
|---|---|---|
| Tidak memakai volume | Workflow hilang saat kontainer dibuat ulang | Selalu petakan /home/node/.n8n ke volume |
| Kunci enkripsi tidak disimpan | Kredensial tidak terbaca setelah migrasi | Tetapkan sendiri dan simpan di password manager |
| Port 5678 terbuka tanpa HTTPS | Login rentan disadap | Gunakan reverse proxy dan tutup port langsung |
| WEBHOOK_URL salah | Webhook tidak bisa dipanggil layanan luar | Isi dengan domain publik berskema https |
| Selalu memakai tag latest tanpa uji | Pembaruan otomatis bisa mengubah perilaku | Kunci ke versi tertentu pada bisnis kritis |
Memperbarui n8n dengan aman
Sebelum memperbarui, jalankan backup. Setelah itu:
cd ~/n8n
docker compose pull
docker compose up -d
docker image prune -fBaca catatan rilis lebih dulu bila Anda memakai node yang kritis. Pembaruan mayor sesekali mengubah perilaku node tertentu, dan lebih baik Anda mengetahuinya sebelum pelanggan merasakannya.
Mengatasi Masalah Umum
Sertifikat HTTPS tidak terbit
Penyebab paling sering: DNS belum menunjuk ke IP VPS, atau port 80 dan 443 tertutup. Periksa dengan nslookup dan sudo ufw status, lalu lihat log Traefik lewat docker compose logs traefik. Jangan mengulang percobaan puluhan kali dalam waktu singkat karena penerbit sertifikat membatasi jumlah percobaan gagal.
Muncul error 502 atau 404 dari Traefik
Biasanya label router salah ketik atau n8n belum selesai menyala. Pastikan aturan Host(...) sama persis dengan domain Anda dan port layanan bernilai 5678. Jalankan docker compose ps untuk memastikan kontainer n8n berstatus running.
Webhook menampilkan URL localhost
Variabel WEBHOOK_URL belum diisi atau tidak sesuai. Perbaiki di berkas compose, lalu jalankan docker compose up -d lagi agar kontainer dibuat ulang dengan konfigurasi baru.
Waktu jadwal meleset beberapa jam
Zona waktu belum diatur. Pastikan GENERIC_TIMEZONE dan TZ bernilai Asia/Jakarta, lalu periksa juga pengaturan zona waktu pada workflow itu sendiri.
Kredensial error setelah pindah server
Kunci enkripsi di server baru berbeda dengan yang lama. Pasang kembali N8N_ENCRYPTION_KEY yang asli sebelum memulihkan data. Inilah alasan kunci itu wajib disimpan terpisah.
Server melambat atau kontainer mati sendiri
Cek memori dengan free -h dan docker stats. Workflow yang memproses ribuan item sekaligus bisa menghabiskan RAM. Pecah data menjadi batch kecil dengan node Split In Batches, atau naikkan kapasitas VPS dari panel my.vpshosting.id ketika beban memang sudah bertumbuh.
Langkah selanjutnya
Setelah n8n stabil, pikirkan pengamanan lapis berikutnya: aktifkan login SSH berbasis kunci, nonaktifkan login root, dan pasang fail2ban. Setelah itu, mulailah dari satu otomasi yang paling memakan waktu tim Anda minggu ini, misalnya rekap penjualan harian atau balasan otomatis untuk pertanyaan yang berulang. Satu workflow yang berjalan mulus lebih berharga daripada sepuluh workflow yang setengah jadi.
Jika Anda ingin lingkungan yang sudah siap untuk kontainer, server di Jakarta membantu menjaga latensi webhook tetap rendah bagi pengguna Indonesia. Bandingkan pilihan yang sesuai kebutuhan di vpshosting.id/harga, atau kelola layanan Anda langsung dari my.vpshosting.id.



