n8n di VPS: platform otomatisasi sendiri tanpa pekerjaan manual yang berulang
Sebuah permintaan masuk dari situs web. n8n memvalidasi data, memeriksa duplikat, membuat deal, menyiapkan draf balasan dengan AI, lalu memberi tahu manajer melalui Telegram. Seseorang hanya perlu turun tangan ketika keputusan diperlukan—bukan untuk memindahkan data antar-tab browser.
Di bawah ini, kita akan melihat cara kerja n8n dan cara memasangnya di VPS dengan Docker Compose, PostgreSQL, HTTPS, serta eksekusi kode yang terisolasi.
n8n dalam tujuh langkah
Rencana peluncuran minimal:
- Buat VPS dan arahkan subdomain ke sana, misalnya
n8n.example.com. - Pasang Docker dan Docker Compose.
- Jalankan n8n dengan PostgreSQL, task runner eksternal, dan Caddy.
- Buka antarmuka melalui HTTPS dan buat akun pemilik.
- Hubungkan Telegram, CRM, email, atau API eksternal lainnya.
- Konfigurasikan penanganan kesalahan dan retensi data eksekusi.
- Otomatiskan cadangan database, data, dan kunci enkripsi.
Untuk instalasi produksi kecil, memulai dengan 2 vCPU dan RAM 4 GB merupakan pilihan yang wajar. RAM 2 GB sering cukup untuk pengujian, tetapi PostgreSQL, Docker, dan proses bersamaan dengan cepat menghabiskan ruang cadangan yang tersisa.
Apa itu n8n dan bagaimana cara kerjanya
n8n adalah platform otomatisasi workflow. Workflow dirangkai dari node: satu node memulai proses, node berikutnya mengambil dan mengubah data, lalu node terakhir melakukan tindakan.
Workflow sederhana terlihat seperti ini:
Webhook → data validation → CRM → Telegram → website response
Rangkaian dapat dipicu oleh webhook, jadwal, email, pesan, atau peristiwa dalam layanan eksternal. Kondisi, loop, filter, penundaan, dan penanganan kesalahan tersedia di antara node.
Salah satu kekuatan n8n adalah otomatisasi tidak terbatas pada integrasi siap pakai. Anda dapat memanggil layanan apa pun dengan API melalui HTTP Request, sedangkan logika khusus dapat ditulis dalam node Code menggunakan JavaScript atau Python. Hal ini menempatkan n8n di antara pembuat no-code sederhana dan kode sisi server khusus.
Mengapa n8n lebih dari sekadar meneruskan data
n8n berguna ketika sebuah proses mencakup beberapa sistem dan membutuhkan keputusan:
form → validation → duplicate search → AI assessment → manager approval → CRM
Seseorang hanya perlu ditempatkan di titik kontrol. Misalnya, AI menyiapkan balasan, tetapi pesan baru dikirim kepada pelanggan setelah disetujui karyawan.
Kasus penggunaan umum:
- penjualan dan dukungan: mengumpulkan permintaan, menetapkan prospek, dan membuat deal;
- konten dan AI: membuat draf, mengklasifikasikan pertanyaan, dan menerbitkan setelah persetujuan;
- DevOps: notifikasi gangguan, webhook Git, dan pemeriksaan API;
- operasi internal: menyinkronkan spreadsheet, email, kalender, dan sistem perusahaan.
Instalasi self-hosted memberi Anda kendali atas proses dan database, tetapi tidak membuat layanan eksternal menjadi lokal. Data yang dikirim ke Telegram, CRM, atau model AI cloud akan meninggalkan VPS.
n8n Cloud atau server sendiri
| Parameter | n8n Cloud | n8n di VPS |
|---|---|---|
| Peluncuran | Tidak perlu menyiapkan server | Membutuhkan domain, Docker, dan HTTPS |
| Pembaruan | Ditangani n8n | Ditangani pemilik |
| Database dan file | Di infrastruktur layanan | Di server yang dipilih |
| Penskalaan | Sesuai paket cloud | Dikonfigurasi secara mandiri |
| Tanggung jawab | Administrasi lebih sedikit | Cadangan, keamanan, dan pemantauan menjadi tanggung jawab pemilik |
| Terbaik untuk | Memulai cepat tanpa DevOps | Kendali, kustomisasi, dan proses yang selalu aktif |
Community Edition dapat di-host sendiri secara gratis dan digunakan untuk proses pribadi serta bisnis internal. Namun, n8n didistribusikan bukan di bawah lisensi open source tradisional, melainkan Sustainable Use License berbasis fair-code. Lisensi ini mengizinkan penggunaan internal dan modifikasi, tetapi tidak mengizinkan Anda begitu saja menerapkan n8n, menambahkan logo sendiri, lalu menjual aksesnya sebagai SaaS mandiri. Untuk produk seperti itu, ketentuan lisensi perlu ditinjau secara terpisah.
Persyaratan server n8n
Beban bergantung pada volume data, konkurensi, dan jenis operasi. File, daftar panjang, node Code, dan workflow AI membutuhkan lebih banyak memori daripada meneruskan payload JSON kecil antar-API.
| Skenario | Konfigurasi awal |
|---|---|
| Pengujian dan workflow teks pribadi | 1 vCPU, RAM 2 GB, NVMe 20 GB |
| Instalasi produksi kecil | 2 vCPU, RAM 4 GB, NVMe 25–40 GB |
| Proses bersamaan, AI, atau file | 4 vCPU, RAM 8 GB atau lebih |
| Beberapa proses worker dalam queue mode | Sesuaikan dengan volume eksekusi |
SQLite cocok untuk belajar dan penyiapan satu instans kecil. PostgreSQL lebih nyaman untuk produksi: cadangan lebih mudah, dan migrasi ke queue mode nantinya lebih sederhana.
Cara memasang n8n di VPS
Contoh ini menggunakan Ubuntu 24.04, PostgreSQL, Caddy, dan task runner eksternal. Ganti n8n.example.com serta zona waktu dengan nilai Anda sendiri.
1. Konfigurasikan DNS dan siapkan server
Buat catatan DNS A yang mengarah ke alamat IPv4 VPS, lalu hubungkan melalui SSH:
ssh root@SERVER_IP
apt update && apt upgrade -y
apt install -y ca-certificates curl ufw opensslPasang Docker Engine dan plugin Compose dari repositori resmi:
install -m 0755 -d /etc/apt/keyrings
curl -fsSL https://download.docker.com/linux/ubuntu/gpg \
-o /etc/apt/keyrings/docker.asc
chmod a+r /etc/apt/keyrings/docker.asc
cat > /etc/apt/sources.list.d/docker.sources <<EOF
Types: deb
URIs: https://download.docker.com/linux/ubuntu
Suites: $(. /etc/os-release && echo "${UBUNTU_CODENAME:-$VERSION_CODENAME}")
Components: stable
Architectures: $(dpkg --print-architecture)
Signed-By: /etc/apt/keyrings/docker.asc
EOF
apt update
apt install -y docker-ce docker-ce-cli containerd.io \
docker-buildx-plugin docker-compose-plugin
docker compose versionIzinkan hanya SSH, HTTP, dan HTTPS:
ufw allow OpenSSH
ufw allow 80/tcp
ufw allow 443/tcp
ufw enableJangan menutup sesi SSH saat ini sampai Anda memastikan koneksi baru dapat digunakan.
2. Buat variabel lingkungan
Siapkan direktori:
mkdir -p /opt/n8n
cd /opt/n8nBuat .env. Perintah berikut langsung menghasilkan secret acak terpisah untuk PostgreSQL, enkripsi n8n, dan task runner:
cat > .env <<EOF
N8N_VERSION=stable
N8N_HOST=n8n.example.com
GENERIC_TIMEZONE=Europe/Berlin
POSTGRES_DB=n8n
POSTGRES_USER=n8n
POSTGRES_PASSWORD=$(openssl rand -hex 32)
N8N_ENCRYPTION_KEY=$(openssl rand -hex 32)
RUNNERS_AUTH_TOKEN=$(openssl rand -hex 32)
EOF
chmod 600 .envTag stable praktis untuk peluncuran pertama. Setelah instalasi diverifikasi, sebaiknya kunci versi n8n tertentu agar pembaruan image berikutnya tidak terjadi secara tidak terduga.
Anda tidak boleh kehilangan N8N_ENCRYPTION_KEY. n8n menggunakan kunci ini untuk mengenkripsi kata sandi, token, dan kredensial lainnya yang disimpan. Jika Anda hanya memulihkan PostgreSQL tanpa kunci tersebut, catatan tetap berada di database, tetapi n8n tidak akan dapat membacanya.
3. Buat file Docker Compose
Buat compose.yaml:
services:
postgres:
image: postgres:18-alpine
restart: unless-stopped
environment:
POSTGRES_DB: ${POSTGRES_DB}
POSTGRES_USER: ${POSTGRES_USER}
POSTGRES_PASSWORD: ${POSTGRES_PASSWORD}
PGDATA: /var/lib/postgresql/data
volumes:
- postgres_data:/var/lib/postgresql/data
healthcheck:
test: ["CMD-SHELL", "pg_isready -U $${POSTGRES_USER} -d $${POSTGRES_DB}"]
interval: 5s
timeout: 5s
retries: 10
n8n:
image: docker.n8n.io/n8nio/n8n:${N8N_VERSION}
restart: unless-stopped
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: ${N8N_HOST}
N8N_PORT: "5678"
N8N_PROTOCOL: https
N8N_EDITOR_BASE_URL: https://${N8N_HOST}
N8N_WEBHOOK_URL: https://${N8N_HOST}/
N8N_PROXY_HOPS: "1"
GENERIC_TIMEZONE: ${GENERIC_TIMEZONE}
TZ: ${GENERIC_TIMEZONE}
N8N_ENCRYPTION_KEY: ${N8N_ENCRYPTION_KEY}
N8N_ENFORCE_SETTINGS_FILE_PERMISSIONS: "true"
N8N_BLOCK_ENV_ACCESS_IN_NODE: "true"
N8N_RUNNERS_MODE: external
N8N_RUNNERS_AUTH_TOKEN: ${RUNNERS_AUTH_TOKEN}
N8N_RUNNERS_BROKER_LISTEN_ADDRESS: 0.0.0.0
EXECUTIONS_DATA_PRUNE: "true"
EXECUTIONS_DATA_MAX_AGE: "168"
EXECUTIONS_DATA_PRUNE_MAX_COUNT: "10000"
volumes:
- n8n_data:/home/node/.n8n
expose:
- "5678"
depends_on:
postgres:
condition: service_healthy
n8n-runner:
image: n8nio/runners:${N8N_VERSION}
restart: unless-stopped
environment:
N8N_RUNNERS_AUTH_TOKEN: ${RUNNERS_AUTH_TOKEN}
N8N_RUNNERS_TASK_BROKER_URI: http://n8n:5679
depends_on:
- n8n
caddy:
image: caddy:2-alpine
restart: unless-stopped
environment:
N8N_HOST: ${N8N_HOST}
ports:
- "80:80"
- "443:443"
volumes:
- ./Caddyfile:/etc/caddy/Caddyfile:ro
- caddy_data:/data
- caddy_config:/config
depends_on:
- n8n
volumes:
postgres_data:
name: n8n_postgres_data
n8n_data:
name: n8n_data
caddy_data:
name: n8n_caddy_data
caddy_config:
name: n8n_caddy_configTask runner eksternal menjalankan kode secara terpisah dari proses utama n8n. Ini lebih aman daripada mode internal dan mengurangi kemungkinan kesalahan pada node Code memengaruhi editor serta pemrosesan webhook.
4. Aktifkan HTTPS
Buat Caddyfile:
{$N8N_HOST} {
reverse_proxy n8n:5678
}Caddy akan memperoleh sertifikat TLS secara otomatis jika DNS sudah mengarah ke VPS dan port 80 serta 443 dapat dijangkau. Port internal 5678 tidak terbuka ke internet: hanya port 80 dan 443 yang tersedia dari luar, sementara Caddy mengakses n8n melalui jaringan Docker.
Variabel N8N_WEBHOOK_URL dan N8N_PROXY_HOPS diperlukan agar editor menghasilkan alamat webhook publik yang benar dan memercayai header dari satu reverse proxy.
5. Jalankan n8n
Validasi konfigurasi akhir dan jalankan container:
docker compose config
docker compose up -d
docker compose ps
docker compose logs --tail=100 n8n caddyBuka:
https://n8n.example.comBuat akun pemilik. Jangan membagikan kata sandinya kepada rekan kerja: untuk kerja tim, gunakan akun terpisah dan berikan hanya akses yang diperlukan setiap orang.
Workflow pertama yang berguna
Pengujian yang baik adalah memproses permintaan dari situs web:
- Tambahkan node
Webhookdengan metodePOST. - Gunakan
Edit Fieldsuntuk menyisakan nama, alamat email, dan sumber. - Gunakan node
Ifuntuk menolak permintaan tanpa data wajib. - Buat deal di CRM atau kirim permintaan melalui
HTTP Request. - Tambahkan notifikasi Telegram.
- Akhiri rangkaian dengan node
Respond to Webhook. - Setelah pengujian, aktifkan workflow dan ganti webhook pengujian dengan URL produksi.
Contoh ini langsung memeriksa domain, HTTPS, permintaan masuk, kredensial, dan integrasi eksternal. Berikutnya, tambahkan Error Workflow terpisah yang akan memberi tahu Anda ketika rangkaian utama gagal.
Mengamankan n8n setelah instalasi
Instans n8n yang telah dipasang belum otomatis menjadi instans yang andal. Setelah peluncuran, pastikan bahwa:
- editor hanya dapat diakses melalui HTTPS;
.envmemiliki izin600dan tidak di-commit ke Git;- kunci API eksternal memiliki izin minimum yang diperlukan;
- setiap webhook memverifikasi signature atau secret sumber;
- riwayat eksekusi dihapus secara otomatis;
- kesalahan dalam workflow penting dikirim kepada administrator.
Community node dipasang sebagai paket dan mungkin mendapatkan akses ke data workflow serta server. Jangan menambahkan node yang tidak dikenal tanpa meninjaunya. Jika tidak membutuhkannya, nonaktifkan dengan N8N_COMMUNITY_PACKAGES_ENABLED=false.
Jalankan audit bawaan:
docker compose exec n8n n8n auditAudit membantu mengidentifikasi webhook yang tidak terlindungi, node berisiko, dan masalah kredensial, tetapi tidak menggantikan peninjauan manual.
Riwayat eksekusi dan data pribadi
n8n menyimpan data input dan output untuk debugging. Bersamaan dengan itu, pesan email, nomor telepon, dokumen, dan respons API dapat tetap berada di database.
Dalam konfigurasi di atas, eksekusi dihapus setelah tujuh hari dan jumlahnya dibatasi hingga 10.000. Untuk proses sensitif, pilih periode retensi sesuai kebijakan penyimpanan data Anda dan hapus kolom yang tidak diperlukan sebelum workflow selesai.
Cadangan dan pembaruan
Pemulihan memerlukan dump PostgreSQL, volume n8n_data, file konfigurasi, dan .env yang berisi N8N_ENCRYPTION_KEY. Sebelum menyalin, hentikan processor sambil membiarkan PostgreSQL tetap berjalan. Ini menyebabkan gangguan singkat pada eksekusi workflow:
cd /opt/n8n
mkdir -p backup
docker compose stop n8n n8n-runner
docker compose exec -T postgres sh -c \
'pg_dump -U "$POSTGRES_USER" "$POSTGRES_DB"' \
| gzip > "backup/n8n-db-$(date +%F).sql.gz"
docker run --rm \
-v n8n_data:/source:ro \
-v "$PWD/backup":/backup \
alpine sh -c \
'tar -czf /backup/n8n-data-$(date +%F).tar.gz -C /source .'
tar -czf "backup/n8n-config-$(date +%F).tar.gz" \
.env compose.yaml Caddyfile
docker compose start n8n n8n-runnerArsip yang berisi .env memuat secret: enkripsi arsip tersebut dan simpan di luar VPS. Verifikasi cadangan secara berkala dengan melakukan pemulihan uji.
Sebelum memperbarui, buat cadangan dan tinjau catatan rilis:
cd /opt/n8n
docker compose pull
docker compose up -d
docker compose psTask runner dan container utama harus menggunakan tag versi yang sama.
Kapan penskalaan diperlukan
Jangan memulai dengan Redis dan beberapa worker sebelum ada beban nyata. Satu instans dengan PostgreSQL lebih mudah dipelihara dan biasanya cukup untuk proses internal kecil.
Queue mode diperlukan ketika tugas panjang menunda webhook, banyak workflow dimulai bersamaan, atau pemrosesan file secara rutin menghabiskan seluruh memori yang tersedia. Dalam penyiapan tersebut, instans utama menerima event, Redis membagikan pekerjaan, dan worker mengeksekusinya secara paralel. Semua komponen harus terhubung ke database PostgreSQL yang sama dan menggunakan N8N_ENCRYPTION_KEY yang sama.
VPS mana yang dipilih untuk n8n
Untuk n8n, PostgreSQL, Caddy, dan task runner secara bersamaan, memulai dengan 2 vCPU, RAM 4 GB, dan drive NVMe adalah pilihan yang wajar. Di tropic.host, paket Light sesuai dengan konfigurasi ini: 2 vCPU, RAM 4 GB, dan NVMe 25 GB. Kapasitas tersebut cukup untuk workflow produksi pertama tanpa pemrosesan file berat.
Untuk dokumen, dataset besar, dan banyak workflow AI yang berjalan bersamaan, RAM 8 GB lebih baik. Jaringan yang stabil juga penting: webhook, callback OAuth, dan pekerjaan terjadwal harus selalu tersedia.
Kesimpulan
n8n mengubah operasi berulang menjadi alur visual yang jelas: node siap pakai mempercepat peluncuran, HTTP Request menghubungkan hampir semua API, dan node Code memungkinkan Anda menambahkan logika sendiri.
Versi self-hosted memberi kendali atas server dan database, tetapi memerlukan HTTPS, kunci yang dibatasi, pembersihan riwayat, dan cadangan yang telah diverifikasi. Simpan N8N_ENCRYPTION_KEY bersama PostgreSQL: tanpa kunci tersebut, kredensial yang dipulihkan tidak dapat didekripsi.
FAQ
Apakah n8n dapat digunakan secara gratis?
Ya. Community Edition dapat di-host di server sendiri secara gratis untuk proses pribadi dan internal. Menjual kembali n8n yang di-host sebagai SaaS mandiri dibatasi oleh lisensi fair-code.
Apakah n8n dapat dipasang tanpa domain?
Untuk pengujian lokal, ya. Untuk webhook publik dan OAuth, sebaiknya gunakan domain dan HTTPS.
Berapa banyak RAM yang dibutuhkan n8n?
Workflow pribadi sederhana sering berjalan dengan RAM 2 GB. Untuk n8n dengan PostgreSQL, Caddy, dan task runner, RAM 4 GB lebih masuk akal; file dan eksekusi bersamaan mungkin memerlukan 8 GB atau lebih.
Apakah semua data tetap berada di dalam VPS?
Hanya data yang tidak dikirim oleh workflow ke tempat lain. Database dan riwayat eksekusi disimpan di VPS, tetapi node Telegram, CRM, atau model AI eksternal mengirim data yang dipilih ke layanan terkait.
Apa saja yang harus dimasukkan dalam cadangan n8n?
Dump PostgreSQL, volume n8n_data, compose.yaml, Caddyfile, dan .env yang berisi N8N_ENCRYPTION_KEY. Simpan cadangan di luar VPS dalam bentuk terenkripsi dan verifikasi dengan memulihkannya.
