Cara Install n8n di VPS Murah (& Drama yang Tidak Diceritakan Tutorial Lain)

Table of Contents

Container n8n yang saya install dengan susah payah ternyata mati sendiri cuma gara-gara VPS-nya gak dibuka dua hari. Dan dalam tutorialnya tidak menerangkan hal ini.

Setelah nulis soal perbedaan AI Agent dan chatbot, saya sadar semua yang saya tulis masih sebatas teori. Saya belum pernah beneran pegang salah satu tools-nya.

Jadi, saya nekat mencoba install n8n sendiri di VPS murah yang saya dapatkan dari Shopee. Benar-benar mulai dari nol.

Maklum, terakhir kali saya menyentuh Linux itu sudah puluhan tahun lalu, dan waktu itu pun belajarnya belum sampai tuntas.

Prosesnya ternyata jalan, tetapi tidak semulus yang kelihatan di tutorial-tutorial itu. Ada koneksi yang putus, repository yang gagal dibuat, sampai VPS yang ternyata punya keterbatasan jaringan yang baru saya sadari setelah semuanya terpasang.

Ilustrasi karakter menghadapi server/VPS dengan kabel kusut, menggambarkan proses instalasi teknis yang berliku

Kenapa n8n, Kenapa Harus di VPS?

n8n adalah platform automasi visual. Kita bisa menyusun workflow dengan menghubungkan berbagai node, tanpa harus menulis kode untuk setiap langkah.

Salah satu penggunaannya adalah membuat workflow yang berhubungan dengan AI agent: mengambil data dari satu tempat, mengolahnya, lalu mengirimkan hasilnya ke tempat lain secara otomatis.

Saya memilih menjalankannya di VPS, bukan di laptop, karena ada dua alasan sederhana.

Pertama, environment-nya lebih bersih. Saya tidak perlu mencampur instalasi dan berbagai service tambahan dengan sistem laptop yang sudah penuh dengan aplikasi lain.

Kedua, VPS bisa diakses kapan saja tanpa laptop harus menyala terus. Ini penting kalau nantinya workflow n8n ingin dijalankan secara otomatis selama 24 jam.

Modal yang Dibutuhkan

Untuk percobaan ini, saya menggunakan VPS dengan spesifikasi 1 core CPU dan RAM 2 GB, menggunakan Ubuntu 22.04 LTS. VPS-nya saya sewa secara mingguan seharga Rp 15.000.

Untuk menjalankan n8n sendiri, spesifikasi seperti ini sudah cukup untuk percobaan awal saya.

Tapi ada satu hal yang baru saya sadari belakangan: VPS murah belum tentu memberikan akses jaringan yang sama.

Dan ternyata, justru bagian inilah yang membuat proses instalasi saya jauh lebih panjang dari rencana.

Proses Install: Lebih Panjang dari Ekspektasi

Rencana awalnya sebenarnya sederhana:

  1. Update sistem.
  2. Install Docker.
  3. Jalankan n8n.

Selesai.

Setidaknya, begitu yang saya bayangkan setelah melihat beberapa tutorial.

Realitanya, sedikit berbeda.

Proses apt update && apt upgrade yang seharusnya selesai dalam hitungan menit malah berhenti di 11% cukup lama. Di tengah proses itu, koneksi PuTTY saya juga sempat terputus.

Untungnya, tidak ada paket yang rusak.

Dari kejadian ini saya kemudian belajar satu kebiasaan yang seharusnya saya pakai sejak awal: screen.

screen memungkinkan proses yang sedang berjalan di terminal tetap hidup meskipun koneksi SSH kita terputus. Sederhananya, kita membuat semacam sesi terminal yang bisa disambungkan kembali.

Install-nya cukup:

sudo apt install -y screen

screen -S nama_sesi

Kalau koneksi putus, kita tinggal connect lagi ke VPS dan menjalankan:

screen -r nama_sesi

untuk kembali ke sesi yang tadi.

Kelihatannya sederhana. Tapi buat saya yang sudah puluhan tahun tidak menyentuh Linux, hal-hal seperti ini ternyata baru ketahuan setelah mengalami sendiri.

Install Docker

Install Docker sebenarnya cukup standar. Pertama, mengambil GPG key resmi, menambahkan repository Docker, lalu menginstalnya melalui apt.

Tapi lagi-lagi ada drama kecil.

Setelah proses instalasi kelihatan selesai, saya mencoba:

docker --version

Bukannya menampilkan versi Docker, terminal malah menjawab command not found.

Ternyata ada satu langkah dalam setup repository yang gagal ketika koneksi SSH saya sempat terputus sebelumnya.

Solusinya bukan sesuatu yang rumit. Saya hanya perlu mengulang proses pembuatan repository dari awal dan mengecek setiap langkahnya.

Salah satu yang saya cek adalah:

cat /etc/apt/sources.list.d/docker.list

Sampai akhirnya saya bisa memastikan file repository-nya memang sudah dibuat dan isinya benar.

Setelah itu Docker berjalan normal.

Dan akhirnya, n8n bisa dijalankan dengan satu command:

sudo docker run -d --name n8n -p 5678:5678 -v n8n_data:/home/node/.n8n docker.n8n.io/n8nio/n8n

Secara teknis, di titik ini n8n sudah jalan.

Tapi ternyata saya belum bisa membukanya dari browser.

Output terminal menunjukkan Docker versi 29.8.0 berhasil terpasang


Masalah yang Tidak Ada di Tutorial: VPS Tipe NAT

Ini bagian yang paling bikin saya bingung.

Setelah container berjalan dan docker ps menunjukkan status Up, saya mencoba membuka:

http://ip-vps:5678

di browser.

Hasilnya:

situs tidak dapat dijangkau.

Saya kemudian mengecek firewall Ubuntu. Statusnya inactive, jadi kemungkinan besar bukan itu masalahnya.

Setelah ditelusuri lebih jauh, ternyata VPS yang saya sewa adalah VPS tipe NAT.

Artinya, saya tidak mendapatkan akses port publik secara bebas seperti yang saya bayangkan. Provider hanya memberikan satu IP dan port tertentu untuk akses dari luar. Port tersebut ternyata digunakan untuk SSH.

Jadi, meskipun n8n berjalan di port 5678 di dalam VPS, saya tidak bisa begitu saja membuka port :5678 dari internet.

Ini bukan masalah yang bisa dibereskan dengan mengutak-atik konfigurasi Ubuntu atau Docker.

Masalahnya ada pada jenis VPS dan konfigurasi jaringan yang diberikan provider.

Dan kalau kita tidak tahu soal ini sejak awal, lumayan banyak waktu yang bisa terbuang untuk mencari-cari kesalahan di tempat yang sebenarnya bukan masalahnya.

Solusinya: SSH Tunnel

Karena port 5678 tidak bisa dibuka ke publik, saya akhirnya menggunakan SSH tunnel.

Konsepnya sederhana: daripada membuka port n8n ke internet, saya meneruskan koneksi dari laptop ke port n8n yang berjalan di VPS melalui koneksi SSH yang sudah ada.

Di PuTTY, saya masuk ke:

Connection → SSH → Tunnels

Kemudian mengisi:

  • Source port: 5678
  • Destination: localhost:43709

Setelah klik Add, saya connect ke VPS seperti biasa.

Setelah tunnel aktif, saya bisa membuka:

http://localhost:5678

di browser laptop.

Dan akhirnya n8n muncul.

Tapi solusi ini punya satu konsekuensi penting: n8n hanya bisa saya akses melalui tunnel selama PuTTY dan koneksi SSH-nya masih aktif.

Untuk sekadar mencoba-coba, ini sudah cukup.

Tapi kalau tujuan akhirnya adalah membuat workflow yang berjalan otomatis 24 jam tanpa saya pantengin terus, tentu ini belum ideal.

n8n yang berhasil dibuka di browser


Dua Hari Kemudian, Container Mati Sendiri

Setelah berhasil masuk ke n8n, saya merasa misi sudah selesai.

Saya kemudian meninggalkan VPS tersebut selama dua hari.

Ketika kembali dan mencoba mengaksesnya lagi, browser malah mendapatkan connection reset.

Kecurigaan pertama saya tentu saja: jangan-jangan VPS-nya di-reset oleh provider.

Ternyata VPS-nya masih hidup.

Masalahnya ada di container n8n.

Ketika saya mengecek Docker, container tersebut sudah berhenti.

Salah satu kemungkinan adalah Docker service atau VPS sempat restart, misalnya karena maintenance atau reboot. Container Docker yang dibuat dengan docker run seperti ini tidak otomatis dijalankan kembali setelah restart jika belum diberikan restart policy.

Ini bagian yang menurut saya cukup penting, terutama kalau n8n memang akan dipakai untuk menjalankan workflow secara otomatis.

Solusinya sederhana:

sudo docker update --restart unless-stopped n8n

Dengan restart policy tersebut, Docker akan mencoba menjalankan kembali container ketika Docker atau VPS mengalami restart. Container tetap tidak akan dijalankan kembali jika kita sendiri memang sengaja menghentikannya.

Jadi, satu baris command yang seharusnya saya pasang sejak awal malah baru saya temukan setelah mengalami masalah.

Yang Saya Pelajari

Kalau kalian mau mencoba hal yang sama, ada dua hal yang menurut saya layak dicek sebelum menyewa VPS.

Pertama, cari tahu jenis VPS yang ditawarkan.

Apakah mendapatkan IP publik dengan akses port yang bebas, atau VPS-nya menggunakan NAT dengan port tertentu saja yang bisa diakses dari internet?

Kalau informasi ini tidak jelas di halaman produk ataudeskripsi, tanyakan langsung ke penjual.

Kedua, kalau menjalankan container yang memang harus hidup terus, pikirkan juga soal restart policy sejak awal.

Untuk container n8n saya, misalnya:

--restart unless-stopped

Dengan begitu, kita tidak pperlu khawatir container tiba-tiba berhenti.

Dan ternyata, setelah semua drama instalasi VPS ini selesai, n8n sendiri justru tidak sesulit yang saya bayangkan.

Interface-nya visual, workflow-nya tinggal disusun dengan node, dan untuk banyak hal kita tidak perlu menulis kode sama sekali.

Yang menjadi ujian sebenarnya justru bukan n8n-nya.

Melainkan mencoba memasang dan menjalankan semuanya di VPS ketika pengalaman terakhir saya dengan Linux sudah puluhan tahun lalu.

Dan mungkin justru itu bagian yang paling menarik dari eksperimen ini: saya jadi tahu bahwa memahami AI dan automation secara teori saja ternyata belum cukup.

Sesekali memang harus turun tangan, mengetik command sendiri, melihat error, bingung, mencari tahu, lalu mencoba lagi.

Karena ada banyak hal yang baru benar-benar kita pahami setelah mengalaminya sendiri.