n8n Self-Host: Otomasi Server Sendiri Tanpa Coding
Kenapa Self-Host, Bukan Pakai Versi Cloud
n8n adalah alat otomasi berbasis node: Anda merangkai pemicu (trigger) dan aksi menjadi satu alur kerja visual, tanpa menulis program. Versi cloud-nya praktis, tapi ada tiga alasan saya memilih self-host:
- Eksekusi tanpa batas buatan. Di server sendiri, jumlah eksekusi workflow hanya dibatasi spesifikasi VPS, bukan kuota paket.
- Data tidak keluar sembarangan. Credential API dan data yang lewat workflow tersimpan di server sendiri.
- Biaya datar. Satu VPS kecil sudah cukup untuk puluhan workflow ringan, sementara langganan cloud naik seiring pemakaian.
Syaratnya cuma satu: VPS Ubuntu 24.04 dengan Docker terpasang dan RAM minimal 1 GB (2 GB lebih nyaman).
Instalasi: Docker Compose, Bukan Install Manual
Saya tidak menyarankan instalasi n8n lewat npm di server produksi. Alasannya sederhana: update jadi repot, dependensi bisa bentrok, dan prosesnya tidak terisolasi. Docker Compose menyelesaikan ketiganya: satu file konfigurasi, satu perintah jalan, update tinggal tarik image baru.
Pertama, siapkan direktori dan file docker-compose.yml:
mkdir -p ~/n8n cd ~/n8n
services:
n8n:
image: n8nio/n8n
restart: unless-stopped
ports:
- "127.0.0.1:5678:5678"
environment:
- N8N_HOST=localhost
- N8N_PORT=5678
- WEBHOOK_URL=https://otomasi.domainanda.com
- GENERIC_TIMEZONE=Asia/Jakarta
- TZ=Asia/Jakarta
volumes:
- n8n_data:/home/node/.n8n
volumes:
n8n_data:
Ada dua keputusan penting di file ini. Pertama, port di-bind ke 127.0.0.1, bukan ke semua interface — artinya n8n tidak bisa diakses langsung dari internet. Aksesnya nanti lewat reverse proxy Nginx dengan HTTPS, jauh lebih aman daripada membuka port 5678 ke publik. Kedua, WEBHOOK_URL wajib diisi dengan domain publik Anda: tanpa ini, URL webhook yang dihasilkan n8n akan menunjuk ke localhost dan tidak bisa dipanggil dari luar.
Jalankan:
docker compose up -d docker compose logs -f n8n
Tunggu sampai log menampilkan pesan bahwa editor siap, lalu buka domain Anda. Kunjungan pertama akan meminta pembuatan akun owner — ini pengganti sistem basic auth lama di n8n versi 1.x. Simpan kredensial itu baik-baik; tidak ada tombol "lupa password" yang bisa menolong Anda kalau volume datanya hilang.
Konsep Inti: Workflow, Node, dan Eksekusi
Satu workflow di n8n terdiri dari node-node yang dihubungkan garis alur. Tiga jenis node yang akan paling sering Anda pakai:
- Trigger. Pemicu workflow. Contoh: Schedule Trigger (jalan tiap jam), Webhook (menunggu dipanggil URL), atau Manual Trigger (tombol tes).
- Action. Kerja nyata: HTTP Request, kirim pesan Telegram, tulis ke Google Sheets, jalankan perintah, dan ratusan integrasi lain.
- Logic. Percabangan dan transformasi: IF untuk kondisi, Set untuk mengubah struktur data, Split Out untuk memecah array.
Data mengalir antar node dalam format JSON. Ini penting dipahami: setiap node menerima JSON, mengolahnya, lalu meneruskan JSON ke node berikutnya. Saat debugging, klik node mana pun dan lihat panel output-nya — di situlah Anda melihat data persis seperti yang diterima node tersebut. Kebiasaan memeriksa output per node menghemat waktu debugging lebih dari fitur apa pun.
Satu hal yang sering disalahpahami pemula: tombol Execute Workflow menjalankan workflow dalam mode tes, sedangkan workflow hanya berjalan otomatis setelah Anda menekan Active. Workflow yang belum aktif tidak akan merespons webhook maupun jadwal, betapapun benar konfigurasinya.
Contoh Nyata: Monitor Uptime + Notifikasi Telegram
Ini workflow pertama yang saya pasang di n8n sendiri, dan masih jalan sampai sekarang: memeriksa situs setiap 5 menit, dan mengirim notifikasi Telegram hanya saat statusnya berubah — bukan setiap 5 menit, supaya tidak jadi spam.
Persiapan Telegram. Buka BotFather di Telegram, buat bot baru, dan catat tokennya. Cari juga chat ID tujuan (bisa chat pribadi atau grup). Token ini disimpan sebagai Credential di dalam n8n, bukan ditulis di artikel, bukan ditempel di node sembarangan. Credential n8n terenkripsi di volume data — salah satu alasan self-host layak dipertimbangkan.
Rangkaian node-nya:
- Schedule Trigger — interval 5 menit.
- HTTP Request — GET ke https://situsanda.com, dengan opsi Response: Full dan waktu timeout 10 detik. Penting: secara bawaan, kalau situs tidak merespons atau mengembalikan status non-2xx, node ini error dan workflow BERHENTI di sini — node berikutnya tidak pernah dieksekusi. Karena itu, di Settings node ini aktifkan "Continue on Fail" (On Error → Continue, using error output), supaya workflow tetap lanjut membawa output error.
- IF — kondisi: tidak ada $json.error dan status code sama dengan 200. Cabang "true" berarti situs hidup, cabang "false" berarti ada masalah.
- Telegram (di cabang false) — kirim pesan ke chat ID tujuan: situs down, lengkap dengan waktu kejadian ({{ $now }} dalam format zona Asia/Jakarta, sesuai variabel lingkungan yang kita set di Compose).
Agar tidak spam, tambahkan satu node Code atau Set kecil sebelum Telegram yang memeriksa status terakhir — atau lebih sederhana: aktifkan opsi "Retry on Fail" di HTTP Request dengan jeda, sehingga gangguan sesaat (satu kali timeout) tidak langsung memicu notifikasi. Aturannya: notifikasi hanya keluar setelah dua kali gagal berturut-turut. Praktik kecil ini membedakan monitoring yang membantu dengan monitoring yang akhirnya di-mute.
Uji dengan menekan Execute Workflow, lalu matikan situs uji Anda sebentar (atau arahkan HTTP Request ke domain yang sengaja salah) dan pastikan pesan Telegram masuk. Kalau sudah benar, tekan Active.
Contoh Kedua: Sinkronisasi Data via Webhook
Pola kedua yang paling sering terpakai: webhook sebagai jembatan antar aplikasi. Misalnya formulir di situs mengirim data ke webhook n8n, lalu n8n menulisnya ke spreadsheet sekaligus mengirim ringkasan ke grup Telegram.
Rangkaiannya: Webhook (metode POST, path bebas seperti form-masuk) → Set (rapikan field: nama, email, pesan) → Google Sheets (Append Row, dengan credential OAuth yang dihubungkan sekali lewat UI) → Telegram (ringkasan singkat). Webhook URL-nya didapat dari node Webhook setelah workflow diaktifkan — ingat, URL mode Production berbeda dengan URL mode Test, dan hanya URL Production yang aktif saat workflow berstatus Active. Ini jebakan paling umum: mengetes dengan URL test, lalu heran kenapa data tidak masuk saat live.
Perawatan yang Sering Dilupakan
Tiga hal ini yang membedakan n8n yang jalan setahun dengan n8n yang rusak diam-diam:
- Backup volume. Seluruh workflow dan credential hidup di volume n8n_data. Cadangkan dengan
docker run --rm -v n8n_n8n_data:/data -v $(pwd):/backup ubuntu tar czf /backup/n8n_data.tar.gz /datasecara berkala, dan simpan arsipnya di luar server. Hentikan container dulu (docker compose stop n8n) sebelum tar, lalu nyalakan lagi — database SQLite n8n bisa berubah selama proses tar kalau container masih jalan. - Update terjadwal. Jalankan
docker compose pull && docker compose up -dsebulan sekali, lalu buka editor dan pastikan workflow aktif tetap berjalan. Jangan update tanpa memeriksa sesudahnya — rilis mayor sesekali mengubah perilaku node. - Jangan simpan secret di node. Token, API key, dan password selalu lewat Credential. Kalau suatu hari Anda mengekspor workflow untuk dibagikan, credential tidak ikut terbawa — dan itu fitur, bukan bug.
Checklist Penutup
- Docker dan Docker Compose terpasang di Ubuntu 24.04
- n8n jalan lewat Compose, port hanya di-bind ke localhost
- Domain + HTTPS lewat reverse proxy, WEBHOOK_URL sudah benar
- Akun owner dibuat dan credential Telegram tersimpan di n8n
- Workflow monitor aktif (bukan cuma dites) dan notifikasi sudah terbukti masuk
- Backup volume n8n_data terjadwal di luar server
Komentar
Posting Komentar