SSD Nodes Learn Hosting plans →
Panduan Matt ConnorOleh Matt Connor · Dikemas kini 2026-08-27

Cara Self-host n8n di VPS dengan Docker dan HTTPS

Panduan lengkap memasang n8n menggunakan Docker Compose dan Postgres. Selesaikan ralat WEBHOOK_URL, konfigurasi kunci enkripsi, dan tetapan reverse proxy HTTPS dengan betul.

Apa yang anda sedang bina

n8n ialah alat automasi aliran kerja: editor visual di mana pencetus, webhook, jadual atau penyerahan borang akan mengaktifkan rantaian nod yang memanggil API, mengubah bentuk data dan menulis ke sistem lain. Ia telah menjadi pilihan utama untuk aliran kerja ejen AI kerana ia berhubung dengan setiap penyedia model dan pangkalan data tanpa anda perlu menulis perkhidmatan. Satu docker run membolehkan anda mendapatkan editor yang berfungsi dalam masa dua minit. Panduan ini adalah mengenai sembilan puluh peratus yang selebihnya: menjadikannya tahan lasak dengan Postgres dan bukannya fail SQLite lalai, boleh dicapai melalui HTTPS, dan bahagian yang hampir semua orang tersilap, iaitu memastikan webhook memberikan URL yang boleh dicapai oleh dunia luar.

Stak yang siap terdiri daripada dua kontena pada satu rangkaian Docker: n8n itu sendiri, dan pangkalan data Postgres yang menyimpan aliran kerja serta kelayakan. Reverse proxy pada hos menamatkan TLS dan menghalakan trafik ke n8n pada localhost, jadi tiada apa yang terdedah kepada internet kecuali melalui proksi tersebut. Ia diletakkan bersama perkhidmatan lain dalam senarai pendek self-hosting 2026.

Prasyarat dan had sebenar

Anda memerlukan VPS dengan RAM sekurang-kurangnya 1 GB. Rancang untuk menggunakan 2 GB apabila workflow mula menjalankan tugas sebenar. Execution dan runtime Node.js menggunakan memori, manakala pembunuh kehabisan memori yang menghentikan container ketika execution sedang berjalan ialah cara yang buruk untuk mengetahui perkara itu. Satu vCPU memadai sebagai permulaan. Jika pelayan ini juga menjalankan perisian yang lebih berat, tentukan saiznya berdasarkan servis tersebut terlebih dahulu. Pustaka foto biasanya menjadi puncanya, dan keperluan RAM sebenar untuk PhotoPrism dan Immich jauh lebih tinggi daripada apa-apa yang diperlukan oleh n8n. Perkara yang sama terpakai pada pelayan media. Pelayan Jellyfin bersama front end yang boleh digunakan untuk menyemak imbas kandungannya, seperti Halcyon, yang membina semula pustaka itu sebagai kedai sewaan dari tahun 90-an, akan menggunakan RAM dan kapasiti transcoding yang tersedia jauh sebelum n8n menyedarinya.

Anda memerlukan domain atau subdomain, contohnya n8n.example.com, dengan A record yang menghala ke IP awam VPS yang perlu diselesaikan (resolve) sebelum anda meminta sijil. Port 80 dan 443 mesti dibuka kepada proksi; port 5678 milik n8n tidak boleh menghadap internet. Anda memerlukan Docker Engine dan pemalam Compose; jika docker compose version memberikan ralat docker: 'compose' is not a docker command, bermakna anda menggunakan binari kendiri (standalone) yang lama, dan pemalam yang betul ialah sudo apt install docker-compose-plugin.

SQLite memadai untuk ujian, Postgres untuk apa-apa yang anda harapkan

Pangkalan data lalai n8n ialah fail SQLite yang terletak di /home/node/.n8n/database.sqlite. Untuk tujuan percubaan, ia memadai. Jika anda tidak memasang (mount) volum, data akan hilang apabila container dicipta semula, yang mana ia merupakan satu pengajaran tersendiri. Sebab untuk beralih kepada Postgres bukanlah kerana kelajuan mentah; ia adalah kerana SQLite memegang kunci penulis tunggal (single writer lock). Oleh itu, satu instans yang menjalankan beberapa aliran kerja (workflow) serentak, atau mod baris gilir (queue mode) yang anda perlukan nanti, akan menyebabkan SQLITE_BUSY: database is locked berlaku di bawah konkurensi. Postgres tidak mempunyai had tersebut, boleh disandarkan dengan bersih menggunakan pg_dump, dan merupakan pangkalan data yang diandaikan oleh dokumentasi n8n sendiri untuk pelayan yang anda harapkan. Menukar pangkalan data kemudian bermakna anda perlu memindahkan data secara manual, jadi jika pelayan ini penting, mulakan dengan Postgres.

DNS dan firewall

Halakan rekod DNS dan buka port terlebih dahulu, supaya langkah sijil kemudian tidak gagal akibat nama yang tidak dapat diselesaikan (resolve).

dig +short n8n.example.com
curl -s ifconfig.me
sudo ufw allow 80/tcp
sudo ufw allow 443/tcp
sudo ufw allow OpenSSH
sudo ufw enable

Jangan buka port 5678. Fail compose mengikat n8n kepada 127.0.0.1:5678 supaya hanya reverse proxy hos yang boleh mencapainya, dan ufw allow 5678 akan membatalkan pengasingan tersebut.

Fail Compose

Cipta direktori kerja dan satu docker-compose.yml. Ini adalah keseluruhan tindanan (stack), dua servis, satu rangkaian peribadi, dan dua volum bernama.

services:
  postgres:
    image: postgres:16-alpine
    restart: unless-stopped
    environment:
      POSTGRES_USER: n8n
      POSTGRES_PASSWORD: ${POSTGRES_PASSWORD}
      POSTGRES_DB: n8n
    volumes:
      - postgres_data:/var/lib/postgresql/data
    networks:
      - n8n_net
    healthcheck:
      test: ["CMD-SHELL", "pg_isready -U n8n -d n8n"]
      interval: 10s
      timeout: 5s
      retries: 5

  n8n:
    image: docker.n8n.io/n8nio/n8n:2.29.10
    restart: unless-stopped
    ports:
      - "127.0.0.1:5678:5678"
    environment:
      - N8N_HOST=n8n.example.com
      - N8N_PORT=5678
      - N8N_PROTOCOL=https
      - WEBHOOK_URL=https://n8n.example.com/
      - N8N_ENCRYPTION_KEY=${N8N_ENCRYPTION_KEY}
      - N8N_PROXY_HOPS=1
      - GENERIC_TIMEZONE=Europe/London
      - DB_TYPE=postgresdb
      - DB_POSTGRESDB_HOST=postgres
      - DB_POSTGRESDB_PORT=5432
      - DB_POSTGRESDB_DATABASE=n8n
      - DB_POSTGRESDB_USER=n8n
      - DB_POSTGRESDB_PASSWORD=${POSTGRES_PASSWORD}
    volumes:
      - n8n_data:/home/node/.n8n
    networks:
      - n8n_net
    depends_on:
      postgres:
        condition: service_healthy

volumes:
  postgres_data:
  n8n_data:

networks:
  n8n_net:

Beberapa keputusan perlu dinyatakan dengan jelas. DB_POSTGRESDB_HOST=postgres ialah nama servis, yang diselesaikan oleh Docker pada rangkaian kongsi, bukan localhost, yang di dalam kontena n8n bermaksud n8n itu sendiri. depends_on dengan condition: service_healthy menghalang n8n daripada mendahului Postgres semasa but; tanpanya n8n akan bermula, mendapati tiada pangkalan data, lalu keluar. Volum bernama n8n_data pada /home/node/.n8n menyimpan kunci penyulitan dan, pada SQLite, pangkalan data tersebut; ini adalah satu-satunya direktori yang tidak boleh hilang. Tetapkan imej kepada versi yang tepat, jangan gunakan latest; sebab-sebabnya ada dalam bahagian naik taraf di bawah.

Fail rahsia

Jangan sekali-kali meletakkan kata laluan di dalam fail compose. Letakkannya di dalam fail .env bersebelahan fail tersebut supaya Compose membacanya secara automatik, dan jana kata laluan tersebut supaya ia benar-benar rawak.

printf 'POSTGRES_PASSWORD=%s\n'  "$(openssl rand -hex 24)" >  .env
printf 'N8N_ENCRYPTION_KEY=%s\n' "$(openssl rand -hex 32)" >> .env
chmod 600 .env

N8N_ENCRYPTION_KEY merupakan rentetan paling penting di sini, kerana ia adalah kunci yang digunakan untuk menyulitkan setiap kelayakan yang disimpan. Tetapkan nilai ini secara eksplisit dan jangan biarkan n8n menjananya secara automatik, kerana nilai yang anda jana sendiri boleh dicatat dan dipulihkan. Sebaik sahaja n8n menyulitkan kelayakan pertamanya dengan kunci ini, menukarnya akan menyebabkan semua kelayakan tidak dapat dinyahsulit, jadi tetapkannya sekali sahaja sekarang, dan jangan ubah baris tersebut lagi.

Pemboleh ubah persekitaran yang menentukan kefungsian webhook

Empat pemboleh ubah mengawal cara n8n memperkenalkan dirinya kepada dunia luar, dan kesilapan dalam menetapkannya merupakan soalan sokongan n8n yang paling kerap ditanya.

  • N8N_HOST ialah nama hos awam, n8n.example.com. Jika dibiarkan pada tetapan lalai localhost di belakang proksi, editor akan cuba memuatkan API-nya sendiri daripada localhost dalam pelayar anda, yang akan gagal.
  • N8N_PROTOCOL=https memberitahu n8n bahawa ia dihidangkan melalui TLS, jadi ia menandakan kuki sesi sebagai Secure dan membina URL https://.
  • N8N_PORT=5678 ialah port yang didengar oleh n8n di dalam kontena. Ini bukan port awam; proksi mengendalikan port 443.
  • WEBHOOK_URL=https://n8n.example.com/ ialah pemboleh ubah yang sering menyebabkan masalah. n8n mencetak alamat webhook yang anda tampal ke dalam Stripe, GitHub atau mana-mana pemanggil luaran dengan membina alamat tersebut daripada nilai-nilai ini. Jika ia tidak ditetapkan atau salah, n8n akan kembali kepada N8N_HOST:N8N_PORT dan memberikan anda https://n8n.example.com:5678/webhook/... atau, lebih buruk lagi, http://localhost:5678/webhook/..., yang dicetak tanpa ralat, kelihatan munasabah, tetapi tidak boleh dicapai dari internet, menyebabkan permintaan pemanggil tidak sampai tanpa sebarang notis. Tetapkan ia kepada URL asas awam yang tepat dengan garis miring (trailing slash) di hujungnya, kemudian sahkan bahawa nod webhook memaparkan URL tanpa port.

N8N_PROXY_HOPS=1 memberitahu pelayan Express n8n untuk mempercayai satu proksi di hadapannya, supaya pengehadan kadar (rate-limiting) dan mana-mana ciri yang membaca IP pelanggan dapat melihat alamat sebenar dan bukannya alamat proksi. Satu pemboleh ubah yang anda tidak perlu tetapkan di sini ialah N8N_RUNNERS_ENABLED: pelaksana tugas (task runners), iaitu n8n yang menjalankan logik Code-node dalam proses berasingan yang dipencilkan, telah menjadi lalai sejak versi 1.69 dan diwajibkan bermula daripada siri 2.x yang digunakan dalam panduan ini, jadi pilihan lama tersebut telah ditamatkan. Tetapkan ia sekarang dan n8n hanya akan mencatatkan notis yang meminta anda membuangnya.

Permulaan pertama

docker compose up -d
docker compose ps
docker compose logs -f n8n

Permulaan pertama yang berjaya akan berakhir dengan baris Editor is now accessible via:, dengan baris n8n ready on ..., port 5678 di atasnya. docker compose ps sepatutnya memaparkan kedua-dua kontena Up, dengan postgres ditandakan sebagai (healthy). Jika n8n terperangkap dalam gelung Restarting, baca log tersebut; masalahnya hampir selalu berpunca daripada sambungan pangkalan data atau keizinan volum yang diterangkan di bawah.

TLS dengan reverse proxy

n8n sendiri menggunakan HTTP biasa pada port 5678; sesuatu di hadapan perlu melakukan TLS termination. Terdapat dua pilihan yang kemas.

Jika anda sudah menjalankan beberapa kontena, letakkan n8n di belakang reverse proxy Traefik yang mengeluarkan sijil TLS secara automatik. Dengan beberapa label, Traefik akan meminta dan memperbaharui sijil untuk anda.

Jika ini merupakan satu-satunya aplikasi pada pelayan tersebut, virtual host nginx dengan sijil Let’s Encrypt adalah lebih ringkas. Gunakan persediaan TLS Certbot dan nginx untuk Ubuntu 24.04 bagi mendapatkan sijil, kemudian gunakan blok pelayan ini:

server {
    listen 443 ssl;
    server_name n8n.example.com;

    ssl_certificate     /etc/letsencrypt/live/n8n.example.com/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/n8n.example.com/privkey.pem;

    location / {
        proxy_pass http://127.0.0.1:5678;
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection "upgrade";
        proxy_set_header Host $host;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;
        proxy_read_timeout 3600;
        client_max_body_size 16m;
    }
}

Header Upgrade dan Connection "upgrade" adalah wajib. n8n menolak kemas kini pelaksanaan secara langsung ke editor melalui WebSocket, dan tanpa dua baris tersebut, halaman log masuk akan dimuatkan kemudian terhenti dengan sepanduk sambungan terputus. proxy_read_timeout 3600 menghalang pelaksanaan yang berjalan lama daripada diputuskan pada had lalai nginx iaitu 60 saat. Header X-Forwarded-Proto $scheme adalah pasangan kepada N8N_PROXY_HOPS=1: ia memberitahu n8n bahawa permintaan asal adalah HTTPS walaupun proksi mencapainya melalui HTTP biasa, supaya n8n tidak menganggap sambungan tersebut tidak selamat dan menolak kuki miliknya sendiri.

Aliran kerja pertama anda, untuk menjadikannya nyata

Buka https://n8n.example.com/, cipta akaun pemilik (bahagian seterusnya), dan bina aliran kerja paling kecil yang membuktikan laluan tersebut berfungsi: webhook masuk, panggilan HTTP, dan respons keluar.

  1. Tambah nod Webhook. Tetapkan kaedah kepada POST dan laluan seperti hello. Ia memaparkan dua URL, Test URL dan Production URL, yang menjadi punca kepada separuh daripada laporan "webhook saya tidak berfungsi". Test URL menjawab satu panggilan, dan hanya semasa anda telah mengklik Listen for test event; ia kemudian akan tamat tempoh. Production URL menjawab pada bila-bila masa aliran kerja ditetapkan sebagai Active.
  2. Tambah nod HTTP Request selepasnya, halakan kepada mana-mana API JSON awam; GET ke https://api.github.com/zen akan mengembalikan rentetan satu baris, yang sudah memadai.
  3. Tambah nod Respond to Webhook, dan tetapkan pilihan Respond pada nod Webhook kepada "Using Respond to Webhook node" supaya pemanggil menerima kembali output daripada nod HTTP.
  4. Tukar aliran kerja kepada Active (kanan atas) dan panggilnya: curl -X POST https://n8n.example.com/webhook/hello. Anda sepatutnya menerima baris zen tersebut kembali; POST masuk, panggilan API, respons keluar, inilah bentuk kebanyakan automasi sebenar.

Varian berjadual menukarkan nod Webhook kepada Schedule Trigger dan memanggil titik akhir model sebagai ganti, satu model yang dihoskan sendiri daripada Ollama yang berjalan pada VPS yang sama merupakan cara yang kemas untuk membina penjana ringkasan harian.

Pengurusan pengguna, bukan basic auth

Panduan n8n lama menyuruh anda menetapkan N8N_BASIC_AUTH_ACTIVE=true. Pemboleh ubah tersebut telah dibuang dalam n8n 1.0 dan kini tidak melakukan apa-apa. Pada masa ini, pengesahan menggunakan akaun owner: kali pertama anda memuatkan editor, n8n meminta anda mencipta owner dengan e-mel dan kata laluan, dan kawalan ini wajib digunakan kerana tiada mod tanpa nama. Cipta akaun tersebut sejurus selepas boot pertama, sebelum anda memberikan URL kepada sesiapa: antara docker compose up dengan penghantaran borang pertama itu, sesiapa yang mencapainya dahulu boleh mengambil alih instance tersebut. Lapisan basic-auth pada reverse proxy ialah kawalan tambahan yang munasabah, tetapi ia merupakan faktor kedua, bukan pengesahan sebenar. Akaun owner dan semua perkara lain dalam panduan ini boleh digunakan pada edisi komuniti percuma; jika anda kemudiannya mahu pengguna tambahan dengan peranan terperinci atau SSO, baca ciri n8n yang memerlukan lesen berbayar sebelum membuat perancangan berdasarkan ciri tersebut.

Sandaran: kunci penyulitan dahulu, kemudian pangkalan data

Dua perkara perlu disandarkan, dan kedua-duanya mempunyai tahap kebolehgantian yang berbeza.

N8N_ENCRYPTION_KEY. Setiap kelayakan yang anda simpan dalam n8n, token API, kata laluan pangkalan data, dan rahsia OAuth, disulitkan semasa tidak aktif menggunakan kunci ini. Alur kerja (workflows) dalam Postgres tidak berguna tanpanya: jika anda memulihkan pangkalan data ke pelayan baharu dengan kunci yang berbeza, n8n tidak akan dapat menyahsulit satu pun kelayakan, dan tiada cara untuk pemulihan atau tetapan semula. Fail .env anda menyimpan kunci tersebut; salin fail ini ke lokasi di luar pelayan, sebaik-baiknya dalam entri pengurus kata laluan, pada hari anda menciptanya. Ini adalah sandaran yang paling penting.

Pangkalan data Postgres, untuk alur kerja, sejarah pelaksanaan, dan kelayakan yang disulitkan itu sendiri:

docker compose exec -T postgres pg_dump -U n8n -d n8n \
  | gzip > n8n-db-$(date +%F).sql.gz

Jalankan arahan tersebut mengikut jadual dan salin fail dump keluar dari pelayan. Untuk memulihkan pada VPS baharu: jalankan stack sekali supaya pangkalan data wujud, hentikan n8n, muatkan semula fail dump dengan psql, masukkan N8N_ENCRYPTION_KEY yang sama ke dalam .env, dan mulakan n8n. Kunci yang sama berserta fail dump akan menghasilkan instans yang berfungsi; kunci baharu bermakna alur kerja tidak akan dapat menggunakan satu pun kelayakan.

Naik taraf: tetapkan tag versi

Fail compose menetapkan n8nio/n8n:2.29.10 dan bukannya latest secara sengaja. n8n mengeluarkan versi minor baharu hampir setiap minggu dan kadangkala menukar skema pangkalan data atau gelagat nod di antaranya, jadi latest bermakna proses pull tanpa pengawasan boleh memberikan anda binaan yang memigrasikan pangkalan data anda sebaik sahaja ia bermula. Tetapkan versi, baca nota keluaran sebelum menaik taraf, n8n menyatakan perubahan yang memecahkan keserasian di sana, dan lakukan naik taraf secara sengaja:

docker compose exec -T postgres pg_dump -U n8n -d n8n | gzip > pre-upgrade.sql.gz
# edit the image tag in docker-compose.yml, then:
docker compose pull n8n
docker compose up -d n8n
docker compose logs -f n8n

Lompatan versi major adalah perkara yang paling penting dalam hal ini. Contohnya, siri 2.0 menukar N8N_BLOCK_ENV_ACCESS_IN_NODE kepada true secara lalai, jadi mana-mana nod Code yang membaca process.env akan kehilangan akses secara senyap sehingga anda menetapkannya semula kepada false; keluaran yang sama mula menguatkuasakan kebenaran ketat pada fail tetapan. Baca halaman perubahan yang memecahkan keserasian 2.0 sebelum melintasi sempadan versi major. n8n menjalankan sebarang migrasi pangkalan data yang diperlukan secara automatik semasa permulaan, itulah sebabnya pg_dump sebelum naik taraf adalah wajib. Oleh kerana kelayakan disimpan dalam bentuk disulitkan dengan kunci dalam .env dan data disimpan dalam Postgres, kontena tersebut boleh dibuang: anda menaik taraf dengan menggantikannya, dan membuat rollback dengan menetapkan tag sebelumnya serta memulihkan dump.

Mod kegagalan, berserta rentetan yang akan anda lihat

The requested webhook "POST hello" is not registered. Ralat 404 daripada panggilan webhook yang alur kerjanya tidak Active, atau daripada memanggil laluan ujian apabila tiada sesiapa yang mendengar. Laluan ujian (/webhook-test/...) hanya menjawab semasa anda telah menekan "Listen for test event"; laluan pengeluaran (/webhook/...) hanya menjawab apabila togol alur kerja dihidupkan. This webhook is not registered for GET requests. Did you mean to make a POST request? yang berkaitan bermaksud kaedah yang digunakan salah, nod menjangkakan POST tetapi anda menghantar GET.

URL webhook menunjukkan :5678 atau localhost. Nod memaparkan https://n8n.example.com:5678/webhook/... atau http://localhost:5678/.... WEBHOOK_URL tidak ditetapkan atau salah, jadi n8n membina alamat tersebut daripada N8N_HOST:N8N_PORT dan bukannya pangkalan awam anda. Tetapkan WEBHOOK_URL=https://n8n.example.com/, cipta semula kontena dengan docker compose up -d, dan port tersebut akan hilang.

There was a problem loading init data dalam pelayar. Editor dimuatkan tetapi tidak dapat mencapai API backendnya sendiri. Di sebalik proksi, ini hampir selalu disebabkan oleh N8N_HOST atau WEBHOOK_URL yang salah, proksi yang kehilangan pengepala WebSocket Upgrade, atau N8N_PROTOCOL yang tidak sepadan dengan cara anda menyambung. Sahkan empat pemboleh ubah yang menghadap ke awam dan pastikan proksi memajukan Upgrade dan Connection.

password authentication failed for user "n8n" dalam log, dengan kontena dimulakan semula. Kata laluan yang dihantar oleh n8n tidak sepadan dengan kata laluan yang digunakan semasa pangkalan data dimulakan. Perangkapnya: Postgres membaca POSTGRES_PASSWORD hanya apabila ia memulakan direktori data yang kosong. Mulakan stack sekali, kemudian tukar POSTGRES_PASSWORD dalam .env, dan volum postgres_data sedia ada masih menyimpan kata laluan lama. Tetapkannya semula kepada yang asal, atau, jika anda tiada data untuk disimpan, docker compose down dan docker volume rm volum postgres, kemudian mulakan semula dengan segar.

EACCES: permission denied, open '/home/node/.n8n/config' semasa permulaan. n8n berjalan sebagai pengguna node (UID 1000) dan tidak dapat menulis ke direktori konfigurasinya. Ini menjejaskan pengguna yang melakukan bind-mount pada folder hos (./n8n_data:/home/node/.n8n) yang dimiliki oleh root. Gunakan volum bernama seperti yang ditunjukkan di atas, atau jika anda berkeras untuk menggunakan bind mount, sudo chown -R 1000:1000 ./n8n_data terlebih dahulu.

Permissions 0644 for n8n settings file /home/node/.n8n/config are too wide. Changing permissions to 0600.. Bermula dari siri 2.x, n8n menguatkuasakan 0600 pada fail tetapan tersebut secara lalai dan membaikinya sendiri semasa but. Baris log ini bermaksud ia telah membetulkan mod tersebut, biasanya selepas bind mount atau selepas pemulihan menyalin semula fail dengan kebenaran yang longgar. Tiada tindakan diperlukan; tetapkan N8N_ENFORCE_SETTINGS_FILE_PERMISSIONS=false hanya jika sistem fail anda benar-benar tidak menyokong kebenaran.

Mismatching encryption keys, baris penuh menyatakan kunci penyulitan dalam fail tetapan /home/node/.n8n/config tidak sepadan dengan N8N_ENCRYPTION_KEY dalam persekitaran anda. Kunci dalam persekitaran anda berbeza daripada kunci yang ditulis oleh n8n ke dalam volum datanya pada pelaksanaan sebelumnya, selalunya kerana n8n menjana kunci rawak pada but terdahulu apabila pemboleh ubah tidak ditetapkan, dan anda kemudian menetapkan kunci yang berbeza. Letakkan kunci asal kembali ke dalam .env, atau, hanya jika anda benar-benar tiada kelayakan tersimpan yang perlu dikekalkan, padam fail config di dalam volum n8n_data dan biarkan n8n menjananya semula, dengan menerima hakikat bahawa kelayakan sedia ada akan menjadi tidak boleh dibaca.

Sepanduk log masuk tentang kuki selamat: Your n8n server is configured to use a secure cookie, however you are either visiting this via an insecure URL, or using Safari. Anda menetapkan N8N_PROTOCOL=https tetapi mencapai n8n melalui HTTP biasa, biasanya dengan mengakses IP dan port secara terus dan bukannya melalui proksi HTTPS. Capai ia melalui https://n8n.example.com/. Hanya jika anda benar-benar tidak boleh menggunakan HTTPS, anda harus menetapkan N8N_SECURE_COOKIE=false, dan jangan sekali-kali melakukannya pada kotak yang menghadap ke internet.

Untuk meletakkan model bahasa di dalam alur kerja tersebut, lihat membina alur kerja AI dengan Claude dan n8n.

FAQ

Patutkah saya menggunakan SQLite atau Postgres untuk n8n?

SQLite (pilihan lalai) memadai untuk mencuba n8n dan bagi instans peribadi yang menjalankan satu aliran kerja pada satu masa. Beralihlah kepada Postgres untuk sebarang kegunaan kritikal: kunci penulis tunggal SQLite menyebabkan database is locked berlaku semasa konkurensi, dan Postgres boleh disandarkan dengan kemas menggunakan pg_dump. Migrasi kemudiannya perlu dilakukan secara manual, jadi jika pelayan tersebut penting, mulakan dengan Postgres.

Mengapa webhook n8n saya tidak pernah berfungsi?

Hampir selalu disebabkan oleh WEBHOOK_URL. Jika tidak ditetapkan atau salah, n8n akan mencetak alamat webhook yang dibina daripada N8N_HOST:N8N_PORT, yang sering mengandungi :5678 atau localhost. Alamat ini kelihatan sah tetapi tidak boleh dicapai dari internet, menyebabkan permintaan pemanggil tidak pernah sampai. Tetapkan WEBHOOK_URL=https://n8n.example.com/ dan pastikan nod memaparkan URL tanpa port. Punca kedua ialah memanggil webhook yang aliran kerjanya tidak ditogol kepada Active, yang akan mengembalikan The requested webhook ... is not registered..

Apakah yang perlu saya sandarkan dalam n8n?

Dua perkara. N8N_ENCRYPTION_KEY daripada fail .env anda, kerana setiap kelayakan yang disimpan disulitkan dengannya dan kehilangannya akan menyebabkan kelayakan tersebut tidak dapat dinyahsulit selama-lamanya; salin fail ini keluar dari pelayan pada hari anda menciptanya. Serta pg_dump pangkalan data Postgres untuk aliran kerja, sejarah dan kelayakan. Pemulihan memerlukan kedua-duanya: kunci yang sama berserta fail dump tersebut.

Bagaimanakah cara meletakkan n8n di sebalik HTTPS?

n8n menyediakan HTTP biasa pada port 5678; reverse proxy di hadapan akan menamatkan TLS. Ikat n8n kepada 127.0.0.1:5678 supaya hanya proksi yang boleh mencapainya, kemudian gunakan Traefik dengan sijil automatik atau nginx dengan sijil Let's Encrypt. Tetapkan N8N_PROTOCOL=https dan WEBHOOK_URL=https://your-host/, serta pastikan proksi memajukan pengepala WebSocket Upgrade atau editor akan tergantung.

Bagaimanakah cara menaik taraf n8n dengan selamat?

Tetapkan tag imej yang khusus dan bukannya latest, buat pg_dump terlebih dahulu kerana n8n menjalankan migrasi secara automatik semasa permulaan, baca nota keluaran untuk perubahan yang memecahkan konfigurasi, kemudian kemas kini tag dan jalankan docker compose pull n8n && docker compose up -d n8n. Kontena adalah bersifat pakai buang, jadi lakukan rollback dengan menetapkan semula tag sebelumnya dan memulihkan dump sebelum naik taraf.