Semua kredensial tiba-tiba gagal didekripsi
Volume data dibuat ulang dan n8n menghasilkan kunci enkripsi baru. Tidak ada yang bisa memulihkan kredensial lama. Selalu setel N8N_ENCRYPTION_KEY secara eksplisit dan simpan salinannya di luar server.

Enam langkah dari VPS Nordic polos menuju n8n dengan TLS-terminated di domain Anda sendiri — Docker Compose, Caddy, PostgreSQL, webhook yang benar-benar menyala. Eksekusi dibatasi oleh CPU Anda, bukan oleh tingkatan paket, di kotak yang harganya $3.90 sebulan. Diuji di Debian 12 dengan n8n 2.x.
Sediakan
VPS + satu A record
Pasang
get.docker.com
Compose
n8n + Caddy + Postgres
Boot pertama
Akun pemilik + 2FA
Webhook
WEBHOOK_URL
Perkuat keamanan
Pangkas, bungkam, cadangkan
n8n adalah mesin otomasi workflow: sebuah canvas visual tempat Anda merangkai trigger — webhook, jadwal, baris baru dalam basis data, pesan dalam antrean — menjadi rangkaian node yang memanggil API, mentransformasi data, bercabang berdasarkan kondisi, menjalankan JavaScript atau Python apa pun, dan menyerahkan hasilnya ke apa pun yang berikutnya. Beberapa ratus node integrasi sudah tersedia langsung, ditambah node HTTP Request generik yang mencakup semua sisanya. Sejak lini 1.x, ia juga membawa node AI Agent dan LLM, itulah sebabnya sebagian besar orang yang menginstalnya pada 2026 sedang membangun agent, bukan pipa ETL klasik.
Bagian yang penting sebelum Anda mengetik satu perintah pun adalah lisensinya, karena n8n bukan open source dalam pengertian OSI dan perbedaannya bukan sekadar akademis. Inti n8n dirilis di bawah Sustainable Use License: hibah non-eksklusif, bebas royalti, berlaku di seluruh dunia untuk menggunakan, menyalin, memodifikasi, dan mendistribusikan perangkat lunak untuk keperluan bisnis internal serta penggunaan pribadi atau non-komersial. Yang ditahannya adalah hak untuk membebankan biaya kepada orang lain untuk n8n atau turunannya — klausul yang menyingkirkan kemungkinan membangun produk "managed n8n" berbayar di atasnya. Secara terpisah, file apa pun yang membawa .ee. dalam namanya atau .ee dalam path-nya dikecualikan sepenuhnya dari lisensi itu dan memerlukan n8n Enterprise License berbayar.
Dibaca secara terus terang: menjalankan n8n di VPS untuk mengotomasi perusahaan Anda sendiri, pekerjaan klien Anda sendiri yang diberikan sebagai layanan yang Anda kerjakan, atau kehidupan pribadi Anda sendiri, masuk dalam hibah gratis dan selalu begitu. Menjual n8n-sebagai-produk-hosting tidak. Hampir setiap perdebatan "apakah n8n benar-benar gratis?" di internet adalah dua orang yang bicara melewati satu sama lain melintasi garis itu.
Sisi biaya. n8n Cloud diberi harga per eksekusi: paket Starter seharga €20 sebulan ditagih tahunan untuk 2,500 eksekusi, Pro €50 sebulan untuk 10,000, Business €667 sebulan untuk 40,000. Pada self-hosted, jumlah eksekusi sama sekali bukan item tagihan — ia dibatasi oleh seberapa besar CPU dan memori yang dimiliki kotak itu. Sebuah workflow yang melakukan polling API setiap lima menit menghabiskan 8,640 eksekusi sebulan dengan sendirinya; di Cloud, satu workflow itu saja sudah memaksa ke tingkatan Pro, dan pada VPS $3.90 itu hanyalah kesalahan pembulatan dibanding CPU idle.
| Opsi | Bulanan | Eksekusi termasuk | Siapa yang menjalankannya |
|---|---|---|---|
| n8n Cloud · Starter | €20 | 2 500 | n8n GmbH |
| n8n Cloud · Pro | €50 | 10 000 | n8n GmbH |
| n8n Cloud · Business | €667 | 40 000 | n8n GmbH |
| Self-hosted · VPS Sentinel | $3.90 | Terikat CPU, bukan meteran | Anda |
Harga Cloud sebagaimana dipublikasikan di n8n.io pada Agustus 2026, ditagih tahunan; penagihan bulanan lebih mahal. Pertukarannya bukan hanya soal uang — self-hosting memindahkan pembaruan, cadangan, perpanjangan TLS, dan uptime ke sisi Anda.
Dokumentasi Docker Compose resmi n8n sendiri menetapkan minimum 2 vCPU dan 4 GB RAM. Itu bukan angka pemasaran: di bawahnya, front-end editor dan workflow yang bercabang cukup banyak akan saling berebut memori, dan payload JSON besar pertama akan menjatuhkan container dengan out-of-memory kill.
Sentinel · 2 vCPU, 4 GB, 120 GB NVMe, $3.90/bln. Pilihan bawaan yang tepat. Menjalankan n8n, PostgreSQL, dan Caddy bersamaan dengan ruang gerak untuk instance pribadi atau tim kecil yang melakukan beberapa ratus eksekusi per hari. Memori idle berada di sekitar 700 MB di ketiga container.
Garrison · 4 vCPU, 8 GB, 240 GB NVMe, $7.90/bln. Peningkatan saat Anda menambahkan queue mode dengan Redis dan satu atau dua container worker, saat workflow rutin menyimpan payload multi-megabyte di memori, atau saat Anda ingin margin yang nyaman untuk workflow AI-agent yang bercabang menjadi beberapa jalur paralel.
Ravelin · 8 vCPU, 16 GB, 480 GB NVMe, $16.90/bln. Instance tim dengan ribuan eksekusi per hari dan pekerjaan padat biner — pembuatan PDF, pemrosesan gambar, transkripsi audio. Core khusus penting di sini karena beban kerja tersebut terikat CPU, bukan terikat API.
Disk adalah bagian yang dilupakan orang. n8n menyimpan input dan output lengkap dari setiap node di setiap eksekusi. Workflow yang cerewet dan berjalan tiap menit menulis ratusan megabyte seminggu. Bawaannya memang melakukan prune — EXECUTIONS_DATA_PRUNE bernilai true, EXECUTIONS_DATA_MAX_AGE adalah 336 jam (empat belas hari), dan EXECUTIONS_DATA_PRUNE_MAX_COUNT adalah 10 000 — tetapi empat belas hari dari instance yang sibuk tetaplah banyak NVMe. Langkah 06 memperketat itu semua.
Di panel: Order → VPS → Sentinel, image Debian 12. Tidak ada alamat surel yang diperlukan untuk membuka akun, tidak ada dokumen identitas yang diminta kapan pun, dan tagihan diselesaikan dalam Monero, Bitcoin, Lightning, atau aset lain yang didukung. Pilih bastion berdasarkan latensi ke layanan yang Anda otomasi, bukan ke diri Anda sendiri — server otomasi jauh lebih sering bicara dengan API daripada dengan Anda.
Kemudian buat rekaman DNS sebelum Anda menyentuh server: satu A record untuk n8n.example.com yang mengarah ke IPv4 VPS, dan satu AAAA record jika Anda menggunakan IPv6. Ini harus dilakukan lebih dulu, karena Caddy meminta sertifikat ke Let's Encrypt saat stack mulai berjalan, dan permintaan sertifikat untuk nama yang tidak resolve akan gagal — lalu mundur, dan Anda menghabiskan dua puluh menit bertanya-tanya mengapa situsnya tidak bisa dijangkau.
Beri waktu semenit agar DNS-nya merambat (propagate), lalu konfirmasi dari mesin Anda sendiri sebelum melanjutkan:
dig +short n8n.example.com
# → the IPv4 of your VPS, and nothing else
Sebelum apa pun mendengarkan di port publik, jalankan checklist pengerasan jam pertama — SSH khusus kunci, firewall yang hanya mengizinkan 22, 80, dan 443, dan pembaruan keamanan tanpa pengawasan. Server otomasi adalah brankas kredensial; ia layak mendapat satu jam penuh.
SSH masuk dan instal Docker Engine beserta plugin Compose v2:
apt update && apt install -y ca-certificates curl
curl -fsSL https://get.docker.com | sh
docker compose version
Skrip praktis ini menginstal Engine, CLI, containerd, dan plugin Compose dari repository Docker sendiri. Baris terakhir seharusnya mencetak Docker Compose version v2 atau lebih tinggi; jika mencetak "docker: 'compose' is not a docker command" berarti Anda memiliki paket docker.io lama bawaan distribusi terpasang dan harus menghapusnya terlebih dahulu.
Ada installer n8n satu baris yang membungkus semua ini, dan itu berfungsi. Panduan ini malah menulis file Compose secara manual, karena semua yang nanti perlu Anda ubah — kunci enkripsi, basis data, URL webhook, kebijakan retensi, jumlah worker — hidup di dalam file itu, dan stack yang tidak bisa Anda baca adalah stack yang tidak bisa Anda perbaiki pukul 3 pagi.
Buat direktorinya dan hasilkan dua secret terlebih dahulu. Hasilkan sekarang, dengan urutan ini, dan tempelkan ke dalam .env begitu setiap kunci dihasilkan — kunci enkripsi khususnya harus sudah ada sebelum boot pertama n8n, bukan sesudahnya.
mkdir -p /opt/n8n && cd /opt/n8n
openssl rand -hex 32 # → N8N_ENCRYPTION_KEY
openssl rand -hex 24 # → POSTGRES_PASSWORD
/opt/n8n/.env
DOMAIN=n8n.example.com
LETSENCRYPT_EMAIL=you@example.com
GENERIC_TIMEZONE=Europe/Stockholm
N8N_ENCRYPTION_KEY=paste_the_32_byte_hex_here
POSTGRES_DB=n8n
POSTGRES_USER=n8n
POSTGRES_PASSWORD=paste_the_24_byte_hex_here
Kunci file ini segera — ia menyimpan kunci untuk setiap kredensial yang akan pernah disimpan instance ini:
chmod 600 /opt/n8n/.env
/opt/n8n/docker-compose.yml
services:
caddy:
image: caddy:2-alpine
restart: unless-stopped
ports:
- "80:80"
- "443:443"
environment:
- DOMAIN=${DOMAIN}
- LETSENCRYPT_EMAIL=${LETSENCRYPT_EMAIL}
volumes:
- ./Caddyfile:/etc/caddy/Caddyfile:ro
- caddy_data:/data
- caddy_config:/config
postgres:
image: postgres:16-alpine
restart: unless-stopped
environment:
- POSTGRES_DB=${POSTGRES_DB}
- POSTGRES_USER=${POSTGRES_USER}
- POSTGRES_PASSWORD=${POSTGRES_PASSWORD}
volumes:
- pg_data:/var/lib/postgresql/data
healthcheck:
test: ["CMD-SHELL", "pg_isready -U ${POSTGRES_USER} -d ${POSTGRES_DB}"]
interval: 10s
timeout: 5s
retries: 10
n8n:
image: docker.n8n.io/n8nio/n8n:latest
restart: unless-stopped
depends_on:
postgres:
condition: service_healthy
environment:
- N8N_HOST=${DOMAIN}
- N8N_PORT=5678
- N8N_PROTOCOL=https
- N8N_EDITOR_BASE_URL=https://${DOMAIN}
- WEBHOOK_URL=https://${DOMAIN}/
- N8N_PROXY_HOPS=1
- N8N_ENCRYPTION_KEY=${N8N_ENCRYPTION_KEY}
- GENERIC_TIMEZONE=${GENERIC_TIMEZONE}
- TZ=${GENERIC_TIMEZONE}
- DB_TYPE=postgresdb
- DB_POSTGRESDB_HOST=postgres
- DB_POSTGRESDB_DATABASE=${POSTGRES_DB}
- DB_POSTGRESDB_USER=${POSTGRES_USER}
- DB_POSTGRESDB_PASSWORD=${POSTGRES_PASSWORD}
- N8N_ENFORCE_SETTINGS_FILE_PERMISSIONS=true
- N8N_BLOCK_ENV_ACCESS_IN_NODE=true
- N8N_DIAGNOSTICS_ENABLED=false
- N8N_VERSION_NOTIFICATIONS_ENABLED=false
- N8N_PERSONALIZATION_ENABLED=false
volumes:
- n8n_data:/home/node/.n8n
volumes:
caddy_data:
caddy_config:
pg_data:
n8n_data:
/opt/n8n/Caddyfile
{$DOMAIN} {
encode zstd gzip
tls {$LETSENCRYPT_EMAIL}
reverse_proxy n8n:5678
}
Dua keputusan desain yang layak disebutkan. Pertama, n8n tidak mempublikasikan port. Hanya Caddy yang bind ke 80 dan 443; n8n mendengarkan di 5678 di dalam jaringan Compose tempat tidak ada apa pun di luar host yang bisa menjangkaunya. Cukup banyak instance n8n self-hosted yang berada di internet publik pada port 5678 tanpa TLS di depannya, dan mesin pencari untuk layanan yang terekspos mengindeksnya. Kedua, volume data n8n tetap ter-mount meskipun PostgreSQL kini menyimpan workflow-nya — direktori itu masih membawa pengaturan instance, file log, dan aset source-control.
Nyalakan:
cd /opt/n8n
docker compose up -d
docker compose logs -f caddy # watch the certificate being issued
Buka https://n8n.example.com. Layar pertama adalah setup akun pemilik — surel, kata sandi, nama. Tidak ada lagi variabel environment HTTP basic-auth yang perlu dikonfigurasi; manajemen pengguna sudah dibangun ke dalam n8n sejak lini 1.x, dan akun yang Anda buat di sini adalah pemilik instance. Gunakan kata sandi dari password manager Anda, lalu langsung buka Settings → Personal → Two-factor authentication dan aktifkan. Login ini adalah pintu depan menuju setiap API key yang akan pernah Anda tempel ke dalam node.
n8n mengenkripsi setiap kredensial yang tersimpan dengan N8N_ENCRYPTION_KEY. Jika Anda tidak menyetelnya, n8n menghasilkan satu saat boot pertama dan menulisnya di dalam volume data. Buat ulang volume itu — sebuah docker compose down -v, migrasi ke server baru, restore yang gagal — dan instance baru itu menghasilkan kunci yang berbeda, setiap kredensial dalam basis data menjadi tidak bisa didekripsi, dan sama sekali tidak ada jalan pemulihan. Anda memasukkan ulang setiap API key, token OAuth, dan kata sandi secara manual. Setel kuncinya secara eksplisit, seperti yang dilakukan panduan ini, dan simpan salinannya di luar server.
Tempat yang tepat untuk salinan itu adalah password manager yang juga Anda kendalikan — panduan Vaultwarden self-hosted membahas salah satunya, dan poin yang disengaja adalah ia tidak boleh berada di kotak yang sama dengan apa yang dibukanya.
Verifikasi bahwa basis datanya benar-benar PostgreSQL dan bukan fallback SQLite — jika variabel DB_ salah ketik, n8n diam-diam mulai berjalan di SQLite dan Anda baru mengetahuinya tiga bulan kemudian:
docker compose exec postgres psql -U n8n -d n8n -c '\dt' | head
# → a list of n8n tables (workflow_entity, credentials_entity, execution_entity…)
n8n yang boot, menampilkan editor, dan menjalankan tes manual belum tentu n8n yang benar-benar berfungsi. Bagian yang diam-diam rusak adalah webhook masuk, dan kerusakannya tampak seolah-olah layanan pihak ketigalah yang bersalah.
WEBHOOK_URL. Tanpanya, n8n membangun URL webhook dari N8N_HOST dan N8N_PORT dan memberi Anda sesuatu seperti http://localhost:5678/webhook/abc — yang kemudian Anda tempel ke Stripe atau GitHub, di mana itu tidak akan pernah bisa dijangkau. File Compose di atas menyetel WEBHOOK_URL ke root HTTPS publik, yang merupakan apa yang akan ditampilkan editor dan apa yang benar-benar bisa dipanggil dunia luar.
N8N_EDITOR_BASE_URL. URL publik yang digunakan n8n untuk tautan dalam surel yang dikirimnya — reset kata sandi, undangan pengguna. Salah di sini berarti tautan undangan yang mengarah ke localhost, yang menghasilkan tiket dukungan dari rekan kerja alih-alih integrasi yang rusak.
N8N_PROXY_HOPS. n8n membaca IP klien dari X-Forwarded-For, dan hanya mempercayai sebanyak hop yang dikatakan angka ini. Dengan satu reverse proxy di depan — Caddy dalam stack ini — nilainya adalah 1. Taruh Cloudflare di depan Caddy dan nilainya menjadi 2. Biarkan pada bawaan 0 dan setiap request tampak berasal dari proxy itu sendiri, yang diam-diam merusak rate limit dan logika berbasis IP apa pun dalam workflow Anda.
N8N_SECURE_COOKIE. Bawaannya true, artinya cookie sesi hanya dikirim lewat HTTPS. Itu pengaturan yang benar dan stack ini memenuhinya. Ini penting diketahui karena menjelaskan gejala klasik dari percobaan pertama lewat http biasa: formulir login menerima kata sandinya lalu mengembalikan Anda ke formulir login, selamanya. Solusinya adalah TLS, bukan mematikan flag ini.
Uji dengan benar. Buat workflow dengan node Webhook, aktifkan workflow-nya, salin Production URL, lalu panggil dari mesin yang bukan server:
curl -i https://n8n.example.com/webhook/<path>
# → HTTP/2 200, and a new execution visible in the editor
Perbedaan yang membuat semua orang tersandung setidaknya sekali: Test URL hanya mendengarkan selama Anda membuka editor dengan "Listen for test event" diaktifkan. Production URL hanya ada saat workflow di-toggle menjadi Active. Webhook yang berfungsi di editor tapi 404 di produksi hampir selalu berarti workflow yang tidak aktif.
Retensi. Bawaannya menyimpan empat belas hari atau 10 000 eksekusi, mana pun yang tercapai lebih dulu, dengan data input dan output lengkap untuk setiap node. Pada NVMe kecil dengan schedule trigger yang sibuk, itulah yang memenuhi disk. Tambahkan ini ke blok environment n8n dan restart:
- EXECUTIONS_DATA_PRUNE=true
- EXECUTIONS_DATA_MAX_AGE=168 # hours — one week
- EXECUTIONS_DATA_PRUNE_MAX_COUNT=5000
- EXECUTIONS_DATA_SAVE_ON_SUCCESS=none # keep failures, drop the noise
EXECUTIONS_DATA_SAVE_ON_SUCCESS=none adalah kemenangan terbesar untuk instance berfrekuensi tinggi: ini menghentikan penulisan payload dari eksekusi yang berhasil, sambil tetap menyimpan setiap eksekusi yang gagal secara lengkap agar Anda bisa men-debug-nya. Pertahankan pada "all" selagi Anda masih membangun workflow, lalu ubah begitu workflow-nya sudah stabil.
Bungkam. File Compose ini sudah mematikan diagnostics, version notifications, dan survei personalisasi. Pemanggil keluar yang tersisa adalah galeri template, yang mengambil data dari api.n8n.io; setel N8N_TEMPLATES_ENABLED=false jika Anda ingin sama sekali tidak ada panggilan pihak ketiga. Jika Anda memang menonaktifkan version notifications, pasang pengingat bulanan di kalender Anda untuk membaca release notes — instance self-hosted yang tidak pernah diperbarui siapa pun adalah hasil yang lebih buruk daripada satu yang memberi ping untuk versi baru.
Node Code. N8N_BLOCK_ENV_ACCESS_IN_NODE=true, yang sudah ada di file, menghentikan expression dan Code node dari membaca variabel environment proses — yang pada kotak ini berarti kata sandi PostgreSQL dan kunci enkripsi. Jika Anda tidak menggunakan REST API publik, tambahkan N8N_PUBLIC_API_DISABLED=true dan tutup juga permukaan itu.
Cadangan — ketiga bagian atau tidak sama sekali. Cadangan basis data saja tidak berguna tanpa kunci enkripsi, dan kunci saja tidak memulihkan apa pun. Cadangkan dump PostgreSQL, volume data n8n, dan .env secara bersamaan, dan simpan setidaknya satu salinan di luar server:
cd /opt/n8n
docker compose exec -T postgres pg_dump -U n8n n8n | gzip > backup-db-$(date +%F).sql.gz
docker run --rm -v n8n_n8n_data:/data -v "$PWD":/backup alpine \
tar czf /backup/backup-vol-$(date +%F).tar.gz -C /data .
cp .env backup-env-$(date +%F)
Nama volume adalah nama project Compose ditambah nama volume; jika direktori Anda tidak bernama n8n, jalankan docker volume ls dan gunakan apa yang Anda lihat. Masukkan ketiga baris itu ke dalam cron job, kirim arsipnya ke tempat lain, dan uji sekali proses restore-nya — cadangan yang tidak diuji adalah keyakinan, bukan cadangan.
Pembaruan. docker compose pull diikuti oleh docker compose up -d. Buat snapshot terlebih dahulu: n8n menjalankan migrasi basis data saat start, dan migrasi tidak dirancang untuk di-roll back. Melintasi versi mayor — lompatan 1.x ke 2.x, misalnya — baca release notes sebelum melakukan pull, bukan sesudahnya, dan pertimbangkan untuk pin ke tag image eksplisit alih-alih :latest agar restart tanpa pengawasan tidak pernah meng-upgrade Anda secara mengejutkan.
Secara bawaan n8n berjalan dalam regular mode: proses yang sama yang melayani editor dan menerima webhook juga mengeksekusi workflow. Ini sederhana dan benar sampai satu workflow yang panjang mulai membuat yang lain menunggu. Gejalanya jelas — eksekusi tertahan pada status "running" selama beberapa menit, editor menjadi lamban, dan webhook yang seharusnya merespons dalam 200 ms malah merespons dalam delapan detik.
Queue mode membagi pekerjaan. Instance utama menyimpan editor, trigger, dan endpoint webhook; ia mendorong execution ID ke dalam Redis; proses worker terpisah menariknya, memuat workflow dari PostgreSQL, menjalankannya, dan melaporkan kembali lewat Redis. Ada tiga aturan yang mengikuti arsitektur itu dan ketiganya menggigit orang yang mengabaikannya: setiap instance harus berbagi basis data PostgreSQL yang sama, setiap instance harus membawa N8N_ENCRYPTION_KEY yang sama, dan SQLite sama sekali tidak didukung.
Tambahan pada file Compose adalah satu layanan Redis dan satu layanan worker, yang merupakan image n8n yang sama dijalankan dengan perintah worker:
redis:
image: redis:7-alpine
restart: unless-stopped
command: ["redis-server", "--save", "60", "1", "--appendonly", "no"]
volumes:
- redis_data:/data
n8n-worker:
image: docker.n8n.io/n8nio/n8n:latest
restart: unless-stopped
command: worker --concurrency=5
depends_on:
- redis
- postgres
environment:
# the SAME encryption key and the SAME database as the main instance
- EXECUTIONS_MODE=queue
- QUEUE_BULL_REDIS_HOST=redis
- N8N_ENCRYPTION_KEY=${N8N_ENCRYPTION_KEY}
- DB_TYPE=postgresdb
- DB_POSTGRESDB_HOST=postgres
- DB_POSTGRESDB_DATABASE=${POSTGRES_DB}
- DB_POSTGRESDB_USER=${POSTGRES_USER}
- DB_POSTGRESDB_PASSWORD=${POSTGRES_PASSWORD}
- GENERIC_TIMEZONE=${GENERIC_TIMEZONE}
- TZ=${GENERIC_TIMEZONE}
Tambahkan juga EXECUTIONS_MODE=queue dan QUEUE_BULL_REDIS_HOST=redis ke layanan n8n utama — kedua sisi perlu sepakat soal mode ini. Ada dua opsi yang layak diatur sejak hari pertama: OFFLOAD_MANUAL_EXECUTIONS_TO_WORKERS=true, agar menekan "Test workflow" di editor tidak membebani proses utama, dan N8N_GRACEFUL_SHUTDOWN_TIMEOUT, yang bawaannya 30 detik dan menentukan berapa lama worker diizinkan menyelesaikan pekerjaannya saat ini selama redeploy. Jika workflow Anda biasanya berjalan lebih dari setengah menit, naikkan nilainya, atau setiap deployment akan menghentikan pekerjaan yang sedang berjalan.
Jangan mulai di sini. Queue mode menambahkan dua bagian yang bergerak dan satu kelas kegagalan yang sama sekali tidak dimiliki regular mode. Tetaplah di regular mode sampai Anda melihat antrean bertambah atau satu workflow memblokir yang lain, lalu tambahkan satu worker di kotak yang sama sebelum menambahkan kotak kedua. Progresi itu — Sentinel di regular mode, Garrison dengan satu worker, Ravelin dengan tiga — mencakup semuanya kecuali deployment yang benar-benar besar.
Sebagian besar panduan self-hosting memperlakukan pemilihan host sebagai soal performa. Untuk mesin otomasi, bukan itu masalahnya. Sebuah instance n8n menyimpan dua hal yang hampir tidak dimiliki bersama oleh apa pun yang lain yang Anda self-host: satu tabel terenkripsi berisi API key, token OAuth, dan kata sandi surel dari setiap layanan yang Anda otomasi, dan — tepat di sampingnya — sebuah graf yang menggambarkan persis bagaimana organisasi Anda berjalan. CRM mana. Feed bank mana. Pemasok mana. Pelanggan mana yang mendapat surel mana, pada trigger mana. Baca daftar workflow sebuah perusahaan, dan Anda telah membaca perusahaan itu.
Lapisan satu — siapa yang dikira host tentang Anda. Lapisan aplikasi di sini sungguh baik: kredensial dienkripsi at rest, editor berada di balik TLS dan 2FA. Lapisan yang bocor adalah yang ada di bawahnya. Paket hosted mengetahui entitas hukum Anda, alamat penagihan Anda, dan kartu Anda. Hyperscaler mengetahui hal yang sama dan menyimpannya selama bertahun-tahun. Itu bukan eksposur hipotetis; itu adalah join key antara "sebuah brankas terenkripsi ada" dan "ia milik perusahaan bernama ini". Pendaftaran tanpa surel dan tanpa dokumen identitas, diselesaikan dalam Monero, menghilangkan join key itu, bukan brankasnya.
Lapisan dua — disk. Enkripsi at rest hanya membantu melawan seseorang yang tidak juga memiliki kuncinya, dan pada instalasi bawaan kunci itu berada di filesystem yang sama dengan basis datanya. Pertahankan .env pada mode 600, simpan salinan kunci di luar mesin, dan lebih memilih provider yang yurisdiksinya tidak menjadikan datacenter tempat yang praktis untuk menyampaikan proses hukum — yang merupakan keseluruhan argumen dari panduan yurisdiksi Nordic.
Lapisan tiga — IP exit. Setiap node HTTP Request keluar dari alamat VPS, dan alamat itu membawa reputasi. Rentang hyperscaler adalah yang paling agresif dibatasi lajunya (rate-limited) dan dipagari CAPTCHA di internet, karena di situlah para scraper hidup; workflow yang men-scrape atau melakukan polling akan mulai gagal pada IP AWS atau DigitalOcean jauh sebelum gagal pada rentang Nordic yang lebih sepi. n8n juga menghormati variabel standar HTTP_PROXY, HTTPS_PROXY, ALL_PROXY, dan NO_PROXY, sehingga segelintir workflow yang membutuhkan exit berbeda dapat dialihkan melalui SOCKS proxy lokal atau Tor sementara sisanya berjalan langsung.
Satu pintu lagi, baru di lini 2.x: n8n dapat mengekspos MCP server tingkat instance sehingga AI agent dapat memanggil workflow Anda sebagai tools. Ini sungguh berguna dan juga merupakan endpoint publik ke dalam lapisan otomasi Anda, yang layak mendapat perlakuan yang sama seperti yang lain — lihat panduan remote MCP server untuk alasan TLS, OAuth, dan eksposurnya.
Volume data dibuat ulang dan n8n menghasilkan kunci enkripsi baru. Tidak ada yang bisa memulihkan kredensial lama. Selalu setel N8N_ENCRYPTION_KEY secara eksplisit dan simpan salinannya di luar server.
WEBHOOK_URL tidak disetel, sehingga n8n membangun URL dari N8N_HOST. Setel WEBHOOK_URL dan N8N_EDITOR_BASE_URL ke alamat HTTPS publik dan restart container-nya.
Anda mengakses editor lewat http biasa dan cookie sesi aman ditolak. Selesaikan setup TLS-nya, alih-alih menyetel N8N_SECURE_COOKIE ke false pada instance publik.
Empat belas hari data eksekusi lengkap dari trigger yang berjalan tiap menit. Perketat EXECUTIONS_DATA_MAX_AGE dan PRUNE_MAX_COUNT, dan hentikan penyimpanan eksekusi yang berhasil.
Tag :latest ditambah migrasi basis data yang tidak bisa di-roll back. Pin ke tag eksplisit, buat snapshot sebelum setiap pull, dan baca release notes di setiap versi mayor.
GENERIC_TIMEZONE bawaannya America/New_York, yang jarang sekali menjadi apa yang diinginkan orang. Setel GENERIC_TIMEZONE dan TZ ke zona nyata yang sama, lalu restart.
Sepuluh pertanyaan yang muncul sebelum, selama, dan setelah memindahkan instance n8n ke server Anda sendiri.
Untuk otomasi Anda sendiri, ya. n8n dirilis di bawah Sustainable Use License: Anda boleh menggunakan, menyalin, memodifikasi, dan mendistribusikannya untuk keperluan bisnis internal serta penggunaan pribadi atau non-komersial, tanpa biaya. Yang dilarang oleh lisensi ini adalah membebankan biaya kepada orang lain untuk n8n atau turunannya — dalam praktiknya, menjual kembali "hosting n8n" sebagai produk. File dengan .ee. dalam nama file atau .ee dalam path direktori dikecualikan dari lisensi itu dan memerlukan n8n Enterprise License berbayar. Jadi: mengotomasi perusahaan Anda sendiri di VPS yang Anda sewa sepenuhnya masuk dalam hibah gratis; membangun bisnis hosting n8n di atasnya tidak.
Dokumentasi Docker Compose resmi n8n sendiri menyatakan minimum 2 vCPU dan 4 GB RAM. Itu persis tingkatan Sentinel ($3.90/bln — 2 vCPU, 4 GB, 120 GB NVMe), yang dengan nyaman menjalankan n8n plus PostgreSQL plus Caddy untuk instance pribadi atau tim kecil. Naik ke Garrison (4 vCPU, 8 GB, $7.90/bln) saat Anda menambahkan worker queue-mode atau menjalankan workflow yang menyimpan payload besar di memori, dan ke Ravelin (8 vCPU, 16 GB, $16.90/bln) untuk instance tim yang melakukan ribuan eksekusi per hari dengan data biner — PDF, gambar, audio.
SQLite adalah bawaan dan sungguh baik-baik saja untuk satu orang dengan segelintir workflow. Beralihlah ke PostgreSQL saat Anda memiliki eksekusi konkuren, saat riwayat eksekusi tumbuh melewati beberapa ratus ribu baris, atau saat Anda berencana untuk scale — dan perhatikan bahwa queue mode sama sekali tidak mendukung SQLite. Bermigrasi belakangan berarti mengekspor workflow dan kredensial lalu mengimpornya kembali ke instance baru, yang merupakan satu sore yang tidak akan Anda nikmati. Jika ada kemungkinan pertumbuhan, mulailah dengan PostgreSQL; file Compose dalam panduan ini sudah melakukannya.
Setiap kredensial dalam basis data menjadi tidak terbaca secara permanen. n8n mengenkripsi kredensial yang tersimpan — token OAuth, API key, kata sandi SMTP — dengan kunci itu, dan tidak ada mekanisme pemulihan maupun tiket dukungan yang bisa mengembalikannya. Anda harus memasukkan ulang setiap kredensial secara manual. Ini adalah cara paling umum sebuah instance n8n self-hosted hancur: seseorang membuat ulang volume Docker, n8n menghasilkan kunci baru, dan semua workflow langsung gagal dengan error dekripsi. Setel kunci itu secara eksplisit di .env Anda sebelum boot pertama, dan simpan salinannya di tempat yang bukan server.
Empat penyebab, berurutan dari yang paling sering. (1) WEBHOOK_URL tidak disetel, sehingga editor memberi Anda URL http://localhost:5678/webhook/… yang tidak bisa dijangkau layanan eksternal mana pun — setel ke URL HTTPS publik Anda. (2) Workflow-nya belum diaktifkan; URL tes hanya mendengarkan selagi editor terbuka, URL produksi hanya ada setelah workflow diaktifkan. (3) DNS atau firewall: rekamannya tidak resolve, atau port 80/443 tertutup. (4) Anda berada di balik lapisan proxy tambahan dan belum menyetel N8N_PROXY_HOPS, sehingga n8n membaca IP klien yang salah. Uji dengan curl biasa dari mesin yang bukan server.
Ya, dan itu pola yang normal — satu Caddy di depan, satu jaringan Compose, n8n pada satu hostname dan Vaultwarden, Nextcloud, atau SearXNG pada yang lain. Dua catatan penting. Memori: n8n ditambah PostgreSQL idle di sekitar 700 MB dan workflow yang berat bisa melonjak jauh melewati itu, jadi sisakan ruang gerak. Blast radius: basis data n8n adalah hal paling padat kredensial di kotak ini, sehingga apa pun lain yang berbagi host itu mewarisi profil risikonya. Pada tingkatan $3.90/bulan, wajar untuk memberi mesin otomasi servernya sendiri.
Secara bawaan, ada tiga endpoint. Telemetri produk anonim (N8N_DIAGNOSTICS_ENABLED, bawaan true), pengecekan versi baru dan pembaruan keamanan terhadap api.n8n.io (N8N_VERSION_NOTIFICATIONS_ENABLED, bawaan true), dan penjelajah template workflow, yang mengambil data dari https://api.n8n.io (N8N_TEMPLATES_ENABLED, bawaan true). Tak satu pun dari ketiganya mengirim kredensial atau data workflow Anda, tetapi ketiganya mengumumkan bahwa sebuah instance ada di IP Anda. Setel ketiganya ke false jika Anda ingin kotak ini diam — Anda kehilangan galeri template dan banner pembaruan, jadi pantau sendiri rilis-rilisnya.
n8n Cloud Starter seharga €20/bulan ditagih tahunan untuk 2,500 eksekusi; Pro seharga €50/bulan untuk 10,000. VPS Sentinel seharga $3.90/bulan dan jumlah eksekusinya hanya dibatasi oleh CPU dan RAM, yang untuk workflow webhook-dan-API pada umumnya berarti puluhan ribu. Titik impas dari sisi uang langsung tercapai; biaya sesungguhnya ada pada sisi operasional. Self-hosting berarti Anda memiliki tanggung jawab atas upgrade, cadangan, perpanjangan TLS, dan insiden disk penuh pukul 3 pagi. Aturan yang jujur: jika Anda tidak akan meng-upgrade instance-nya sendiri dalam sebulan setelah rilis keamanan, bayarlah untuk Cloud. Jika docker compose pull bulanan sudah jadi bagian dari hidup Anda, self-host saja.
Karena apa yang disimpan sebuah instance n8n. Tabel kredensial adalah satu penyimpanan terenkripsi berisi API key, token OAuth, dan kata sandi surel untuk setiap layanan yang Anda otomasi, dan graf workflow di sampingnya adalah peta yang bisa dibaca tentang bagaimana bisnis Anda sebenarnya berjalan — CRM mana, feed bank mana, pemasok mana, pelanggan mana. Situs web statis tidak membocorkan apa pun dari itu. Lapisan aplikasi melindunginya dengan baik; lapisan metadata adalah tempat kebocorannya. Jika pendaftaran mesin ini menyertakan scan paspor dan kartu, Anda telah mengenkripsi brankasnya sekaligus menuliskan nama Anda di pintunya. Host no-KYC yang dibayar dengan Monero menjaga kedua lapisan itu tetap selaras.
Ya, untuk bentuk yang umum — node AI Agent yang memanggil API model jarak jauh. Beban kerja itu terikat I/O, ia menunggu provider, dan Sentinel bisa menanganinya. Yang tidak cocok adalah menjalankan model itu sendiri: model lokal 7B membutuhkan sekitar 8 GB RAM dan kecepatan inferensi yang nyata membutuhkan GPU, yang tidak dimiliki tingkatan ini. Arahkan n8n ke endpoint OpenAI-compatible jarak jauh dan biarkan VPS-nya tetap ringan. Panduan pendamping tentang menjalankan AI agent 24/7 membahas sisi runtime-nya — kebijakan restart, secrets, batas pengeluaran, dan jebakan crash-loop.
Sentinel (2 vCPU, 4 GB, 120 GB NVMe, $3.90/bln) memenuhi syarat minimum n8n dengan ruang untuk PostgreSQL dan Caddy di kotak yang sama. Tanpa surel saat pendaftaran, tanpa dokumen identitas, eksekusi tanpa batas.
Terakhir ditinjau · 2026-08-24 · Sumber · Dokumentasi hosting n8n, n8n LICENSE.md (Sustainable Use License), halaman harga n8n.io, dokumentasi upstream Docker dan Caddy · Kadence · tahunan
This guide is one spoke of a larger series. The pillar walks the three privacy layers end to end — the sibling spokes below dive into the specifics.
Three independent layers — signup, payment, network — explained, legal context included, common mistakes flagged.
Deploy your own MCP server on a no-KYC VPS — TLS, streamable HTTP, OAuth.
Host an MCP server with no ID — the privacy stack, crypto-paid.
Pindahkan agen keluar dari laptop Anda — penentuan ukuran, systemd, rahasia, batas pengeluaran.
Ollama di CPU tanpa GPU — apa saja yang muat di 4, 8, 16, atau 32 GB.