SSD Nodes Learn
Panduan Matt ConnorOleh Matt Connor · Dikemas kini 2026-07-24

cara host n8n di VPS guna Docker & HTTPS

Panduan lengkap pasang n8n dengan Docker Compose dan Postgres. Elakkan ralat WEBHOOK_URL dan masalah encryption-key semasa tetapan reverse proxy HTTPS.

Apa yang anda bina

n8n ialah alat automasi aliran kerja: editor visual di mana pencetus — seperti webhook, jadual, atau penghantaran borang — memulakan rantaian nod yang memanggil API, mengubah bentuk data dan menulis ke sistem lain. Ia telah menjadi penyambung utama untuk aliran kerja ejen AI kerana ia boleh berhubung dengan setiap pembekal model dan pangkalan data tanpa anda perlu menulis perkhidmatan. Seorang docker run boleh memiliki editor yang berfungsi dalam masa dua minit. Panduan ini adalah tentang baki sembilan puluh peratus lagi: menjadikannya tahan lama dengan menggunakan Postgres berbanding fail SQLite lalai, boleh dicapai melalui HTTPS, dan — bahagian yang hampir semua orang silap — memastikan webhook memberikan URL yang boleh dicapai oleh dunia luar.

Stack yang lengkap terdiri daripada dua kontena dalam satu rangkaian Docker: n8n itu sendiri, dan pangkalan data Postgres yang menyimpan aliran kerja serta kredensialnya. Sebuah reverse proxy pada hos menamatkan TLS dan menghantar trafik ke n8n pada localhost, supaya tiada apa pun yang terdedah ke internet kecuali melalui proxy tersebut. Ia berada bersama perkhidmatan lain dalam senarai pendek self-hosting 2026.

Prasyarat, dan had sebenar

Anda memerlukan VPS dengan sekurang-kurangnya 1 GB RAM; rancang untuk 2 GB apabila aliran kerja mula memproses data sebenar. Ini kerana proses pelaksanaan dan runtime Node.js menggunakan banyak memori. Kegagalan container oleh out-of-memory killer semasa proses berjalan adalah cara yang buruk untuk belajar. Satu vCPU sudah mencukupi untuk permulaan.

Anda memerlukan domain atau subdomain — contohnya n8n.example.com — dengan A record yang menghala ke IP awam VPS yang sudah berfungsi sebelum anda meminta sijil. Port 80 dan 443 mesti dibuka untuk proxy; port 5678 n8n tidak boleh terdedah kepada internet. Anda memerlukan Docker Engine dan plugin Compose; jika docker compose version ralat dengan docker: 'compose' is not a docker command bermakna anda menggunakan binari tunggal yang lama, dan plugin tersebut adalah sudo apt install docker-compose-plugin.

SQLite sesuai untuk ujian, Postgres untuk kegunaan kritikal

Pangkalan data lalai n8n ialah fail SQLite di /home/node/.n8n/database.sqlite. Ia memadai untuk tujuan percubaan — jangan pasang (mount) sebarang volume dan data akan hilang apabila kontena dicipta semula, yang merupakan satu pengajaran penting. Sebab utama untuk beralih ke Postgres bukanlah kelajuan mentah; SQLite menggunakan kunci penulis tunggal (single writer lock). Oleh itu, instans yang menjalankan beberapa workflow serentak, atau mod barisan (queue mode) yang akan anda perlukan nanti, akan menyebabkan ralat SQLITE_BUSY: database is locked semasa berlaku konkurensi. Postgres tidak mempunyai had tersebut, boleh disandarkan (backup) dengan kemas menggunakan pg_dump, dan merupakan pilihan yang diandaikan oleh dokumentasi n8n untuk pelayan yang kritikal. Menukar pangkalan data kemudiannya bermaksud anda perlu migrasi data secara manual, jadi jika pelayan ini penting, mulakan dengan Postgres.

DNS dan firewall

Tetapkan rekod dan buka port terlebih dahulu. Ini bagi mengelakkan langkah sijil gagal kerana nama tidak dapat diselesaikan.

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 5678. Fail compose mengikat n8n ke 127.0.0.1:5678 supaya hanya reverse proxy hos sahaja yang boleh mencapainya. ufw allow 5678 akan membatalkan pengasingan tersebut.

Fail Compose

Buat direktori kerja dan sebuah docker-compose.yml. Ini adalah keseluruhan stack — dua perkhidmatan, satu rangkaian peribadi, dua volume 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 secara terus. DB_POSTGRESDB_HOST=postgres ialah nama perkhidmatan, 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 bersaing dengan Postgres semasa but; tanpa ia, n8n akan bermula, tidak menemui pangkalan data, dan berhenti. Volume bernama n8n_data pada /home/node/.n8n menyimpan kunci penyulitan dan, bagi SQLite, pangkalan data — satu-satunya direktori yang tidak boleh anda hilangkan. Tetapkan imej pada versi tepat, jangan sesekali gunakan latest; sebab-sebabnya ada dalam bahagian naik taraf di bawah.

Fail rahsia

Jangan letakkan kata laluan di dalam fail compose. Letakkannya di dalam fail .env bersebelahan fail tersebut supaya Compose dapat 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 adalah rentetan paling penting di sini — ia merupakan kunci untuk menyulitkan setiap kredensial yang disimpan. Tetapkan ia secara eksplisit dan jangan biarkan n8n menjananya secara automatik, kerana nilai yang anda jana boleh dicatat dan dipulihkan semula. Sebaik sahaja n8n menyulitkan kredensial pertama dengan kunci ini, mengubahnya akan menyebabkan semua kredensial tidak boleh dinyahsulit — jadi tetapkan sekali sekarang, dan jangan ubah baris tersebut lagi.

Pemboleh ubah env yang menentukan sama ada webhook berfungsi

Empat pemboleh ubah mengawal cara n8n memperkenalkan dirinya kepada dunia luar. Kesilapan pada pemboleh ubah ini adalah soalan sokongan n8n yang paling utama.

  • N8N_HOST ialah hostname awam, n8n.example.com. Biarkan ia pada nilai lalai localhost di belakang proxy, dan editor akan cuba memuatkan API sendiri dari localhost dalam pelayar anda, yang menyebabkan kegagalan.
  • N8N_PROTOCOL=https memberitahu n8n bahawa ia dihidangkan melalui TLS, jadi ia menandakan cookie sesi Secure dan membina URL https://.
  • N8N_PORT=5678 ialah port yang didengari n8n di dalam kontena. Ia bukan port awam; proxy menggunakan port 443.
  • WEBHOOK_URL=https://n8n.example.com/ adalah pemboleh ubah yang kritikal. 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 menggunakan N8N_HOST:N8N_PORT dan memberikan https://n8n.example.com:5678/webhook/... atau, lebih buruk lagi, http://localhost:5678/webhook/... — dicetak tanpa ralat, kelihatan munasabah, tetapi tidak boleh dicapai dari internet, menyebabkan permintaan pemanggil tidak sampai secara senyap. Tetapkan ia kepada URL asas awam yang tepat dengan tanda palang (/) di hujung, kemudian sahkan bahawa nod webhook memaparkan URL tanpa port.

N8N_PROXY_HOPS=1 memberitahu pelayan Express n8n untuk mempercayai satu proxy di hadapannya, supaya had kadar (rate-limiting) dan sebarang ciri yang membaca IP klien dapat melihat alamat sebenar dan bukannya alamat proxy. Satu pemboleh ubah yang sengaja tidak ditetapkan di sini ialah N8N_RUNNERS_ENABLED: task runners — n8n menjalankan logik Code-node dalam proses sandboxed yang berasingan — telah menjadi lalai sejak versi 1.69 dan adalah wajib bermula dari barisan 2.x yang ditetapkan dalam panduan ini, jadi pilihan opt-in lama telah usang. Tetapkan ia sekarang dan n8n hanya akan mencatat nota yang memberitahu anda untuk mengalihkannya.

Permulaan pertama

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

Sesi but pertama yang berjaya akan berakhir dengan baris Editor is now accessible via:, dengan baris n8n ready on ..., port 5678 di atasnya. docker compose ps harus menunjukkan kedua-dua kontena Up, dengan postgres ditandakan (healthy). Jika n8n berada dalam gelung Restarting, baca log — ia hampir sentiasa disebabkan oleh sambungan pangkalan data atau keizinan volume yang dinyatakan di bawah.

TLS dengan reverse proxy

n8n menggunakan HTTP biasa pada port 5678; sesuatu di hadapannya perlu menamatkan HTTPS. Terdapat dua pilihan yang mudah.

Jika anda sudah menjalankan beberapa container, 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 adalah satu-satunya aplikasi pada pelayan tersebut, nginx virtual host dengan sijil Let's Encrypt adalah lebih mudah. Gunakan setup TLS Certbot dan nginx untuk Ubuntu 24.04 untuk 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 menghantar kemas kini pelaksanaan secara langsung ke editor melalui WebSocket, dan tanpa dua baris tersebut, halaman log masuk akan dimuatkan tetapi kemudian tergantung dengan banner "lost-connection". proxy_read_timeout 3600 menghalang pelaksanaan yang lama daripada terputus pada had 60 saat lalai nginx. Header X-Forwarded-Proto $scheme adalah pasangan kepada N8N_PROXY_HOPS=1: ia memberitahu n8n bahawa permintaan asal adalah HTTPS walaupun proxy menyampaikannya melalui HTTP biasa, supaya n8n tidak menganggap sambungan tidak selamat dan menolak cookie sendiri.

Aliran kerja pertama anda, untuk menjadikannya nyata

Buka https://n8n.example.com/, cipta akaun pemilik (seksyen seterusnya), dan bina aliran kerja paling ringkas untuk membuktikan laluan tersebut berfungsi: input webhook, panggilan HTTP, dan output respons.

  1. Tambah nod Webhook. Tetapkan method kepada POST dan path seperti hello. Ia memaparkan dua URL, iaitu Test URL dan Production URL — punca bagi separuh daripada laporan "webhook saya tidak berfungsi". Test URL hanya menjawab satu panggilan, dan hanya semasa anda telah klik Listen for test event; ia kemudian akan tamat tempoh. Production URL akan menjawab setiap kali workflow berada dalam keadaan Active.
  2. Tambah nod HTTP Request selepasnya, yang ditujukan ke mana-mana API JSON awam — satu permintaan GET ke https://api.github.com/zen akan mengembalikan string satu baris, dan itu sudah mencukupi.
  3. Tambah nod Respond to Webhook, dan tetapkan pilihan Respond pada nod Webhook kepada "Using Respond to Webhook node" supaya pemanggil menerima semula output daripada nod HTTP tersebut.
  4. Aktifkan workflow dengan menukar suis Active (atas kanan) dan panggil ia: curl -X POST https://n8n.example.com/webhook/hello. Anda sepatutnya menerima baris teks tersebut semula — input POST, panggilan API, dan output respons, yang merupakan struktur bagi kebanyakan automasi sebenar.

Varian berjadual menggantikan nod Webhook dengan Schedule Trigger dan memanggil endpoint model sebagai ganti — menggunakan Ollama yang berjalan pada VPS yang sama adalah cara yang kemas untuk membina ringkasan harian automatik.

Pengurusan pengguna, bukan auth asas

Panduan n8n yang lama menyarankan anda menetapkan N8N_BASIC_AUTH_ACTIVE=true. Pemboleh ubah tersebut telah dibuang dalam n8n 1.0 dan tidak lagi berfungsi. Pengesahan sekarang adalah melalui akaun pemilik: semasa pertama kali anda memuatkan editor, n8n mewajibkan anda mencipta pemilik dengan e-mel dan kata laluan, dan sekatan itu adalah mandatori — tiada mod tanpa nama. Cipta akaun tersebut sejurus selepas but pertama, sebelum anda memberikan URL kepada sesiapa: antara docker compose up dan penghantaran borang pertama itu, instans tersebut boleh dituntut oleh sesiapa sahaja yang mencapainya terlebih dahulu. Lapisan reverse-proxy basic-auth tambahan adalah kunci tambahan yang munasabah, tetapi ia adalah faktor kedua, bukan pengesahan sebenar.

Sandaran: kunci enkripsi dahulu, kemudian pangkalan data

Dua perkara perlu disandarkan, dan kedua-duanya tidak boleh diganti dengan cara yang sama.

N8N_ENCRYPTION_KEY. Setiap kredensial yang anda simpan dalam n8n — token API, kata laluan pangkalan data, rahsia OAuth — dienkripsi semasa disimpan dengan kunci ini. Aliran kerja dalam Postgres tidak berguna tanpanya: jika anda memulihkan pangkalan data ke pelayan baharu dengan kunci yang berbeza, n8n tidak dapat menyahenkripsi satu kredensial pun, tanpa pemulihan dan tanpa tetapan semula. Fail .env anda memegang kunci tersebut; salin fail itu ke tempat lain di luar pelayan — penggunaan pengurus kata laluan adalah sangat ideal — sebaik sahaja anda menciptanya. Ini adalah sandaran yang paling penting.

Pangkalan data Postgres, untuk aliran kerja, sejarah pelaksanaan dan kredensial yang dienkripsi 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 tersebut keluar dari pelayan. Untuk pemulihan pada VPS baharu: jalankan stack tersebut sekali supaya pangkalan data wujud, hentikan n8n, muat semula dump menggunakan psql, masukkan N8N_ENCRYPTION_KEY yang sama ke dalam .env, dan mulakan n8n. Kunci yang sama ditambah dengan dump akan menghasilkan instans yang berfungsi; kunci baharu akan menghasilkan aliran kerja yang tidak dapat menggunakan satu kredensial pun.

Upgrades: pin the tag

Fail fail compose sengaja menggunakan n8nio/n8n:2.29.10 dan bukannya latest. n8n mengeluarkan versi minor baharu hampir setiap minggu dan kadangkala mengubah skema pangkalan data atau tingkah laku node di antaranya. Oleh itu, latest bermaksud proses pull automatik boleh memberikan binaan yang melakukan migrasi pangkalan data sebaik sahaja ia bermula. Tetapkan versi tertentu, baca nota keluaran sebelum menaik taraf — n8n menyatakan perubahan yang memecahkan sistem di sana — dan 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 utama adalah keadaan yang paling kritikal. Sebagai contoh, siri 2.0 telah menukar N8N_BLOCK_ENV_ACCESS_IN_NODE kepada true secara lalai, jadi mana-mana Code node yang membaca process.env akan kehilangan akses secara senyap sehingga anda menetapkannya semula kepada false; keluaran yang sama juga mula menguatkuasakan keizinan ketat pada fail tetapan. Baca laman breaking-changes 2.0 sebelum melintasi sempadan versi utama. n8n menjalankan sebarang migrasi pangkalan data yang diperlukan secara automatik semasa permulaan — itulah sebabnya pg_dump sebelum naik taraf adalah wajib. Oleh sebab kredensial disimpan secara tersulit dengan kunci dalam .env dan data disimpan dalam Postgres, kontena adalah boleh dibuang: anda naik taraf dengan menggantikannya, dan lakukan rollback dengan menetapkan tag sebelumnya dan memulihkan dump.

Mod kegagalan, dengan rentetan teks yang akan anda lihat

The requested webhook "POST hello" is not registered. Ralat 404 berlaku apabila memanggil webhook yang workflownya tidak Active, atau apabila memanggil laluan ujian (test path) ketika tiada sesiapa sedang menunggu. Laluan ujian (/webhook-test/...) hanya menjawab apabila anda telah klik "Listen for test event"; laluan produksi (/webhook/...) hanya menjawab apabila suis workflow dihidupkan. Sibling This webhook is not registered for GET requests. Did you mean to make a POST request? bermaksud kaedah (method) adalah salah — node menjangkakan POST tetapi anda menghantar GET.

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

There was a problem loading init data di pelayar (browser). Editor telah dimuatkan tetapi tidak dapat mencapai backend API sendiri. Di sebalik proxy, ini hampir sentiasa disebabkan oleh N8N_HOST atau WEBHOOK_URL yang salah, proxy yang kekurangan header WebSocket Upgrade, atau N8N_PROTOCOL tidak sepadan dengan cara anda menyambung. Sahkan empat pemboleh ubah awam dan pastikan proxy memajukan (forward) Upgrade dan Connection.

password authentication failed for user "n8n" dalam log, dengan container sedang dimulakan semula. Kata laluan yang dihantar n8n tidak sepadan dengan kata laluan semasa pangkalan data diinisialisasi. Masalahnya: Postgres membaca POSTGRES_PASSWORD hanya apabila ia menginisialisasi direktori data yang kosong. Mulakan stack sekali, kemudian tukar POSTGRES_PASSWORD dalam .env, dan volume postgres_data sedia ada masih menyimpan kata laluan lama. Tetapkan semula kepada nilai asal, atau, jika anda tidak mempunyai data untuk disimpan, docker compose down dan docker volume rm volume postgres, kemudian jalankannya semula secara 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 berlaku kepada pengguna yang melakukan bind-mount folder hos (./n8n_data:/home/node/.n8n) yang dimiliki oleh root. Gunakan named volume yang ditunjukkan di atas, atau jika anda tetap mahu 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 barisan 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 proses restore menyalin semula fail dengan keizinan (permissions) yang longgar. Tiada tindakan diperlukan; tetapkan N8N_ENFORCE_SETTINGS_FILE_PERMISSIONS=false hanya jika sistem fail anda benar-benar tidak dapat menyokong keizinan.

Mismatching encryption keys — baris penuh menyatakan kunci enkripsi dalam fail tetapan /home/node/.n8n/config tidak sepadan dengan N8N_ENCRYPTION_KEY dalam persekitaran (environment) anda. Kunci dalam persekitaran anda berbeza daripada kunci yang ditulis n8n ke dalam volume datanya pada sesi sebelum ini — selalunya kerana n8n menjana kunci rawak pada but sebelum ini apabila pemboleh ubah tidak ditetapkan, dan anda kemudian menetapkan kunci yang berbeza. Letakkan semula kunci asal ke dalam .env, atau, hanya jika anda benar-benar tidak mempunyai kredensial tersimpan yang perlu dikekalkan, padam fail config di dalam volume n8n_data dan biarkan n8n menjana semulanya — dengan risiko kredensial sedia ada tidak lagi boleh dibaca.

Banner log masuk tentang cookie 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 mengakses n8n melalui HTTP biasa — biasanya dengan mengakses IP dan port secara terus dan bukannya melalui proxy HTTPS. Akses melalui https://n8n.example.com/. Hanya jika anda benar-benar tidak dapat menggunakan HTTPS, barulah anda perlu menetapkan N8N_SECURE_COOKIE=false, dan jangan sesekali melakukannya pada pelayan yang terdedah ke internet.

Untuk memasukkan model bahasa ke dalam workflow tersebut, lihat membina workflow AI dengan Claude dan n8n.

FAQ

Patutkah saya menggunakan SQLite atau Postgres untuk n8n?

SQLite (pilihan lalai) memadai untuk mencuba n8n dan untuk penggunaan peribadi yang menjalankan satu aliran kerja pada satu masa. Gunakan Postgres untuk sebarang penggunaan kritikal: kunci penulis tunggal SQLite menyebabkan database is locked semasa konkurensi, manakala Postgres menyokong sandaran yang kemas dengan pg_dump. Migrasi kemudiannya dilakukan secara manual, jadi jika pelayan itu penting, mulakan dengan Postgres.

Mengapa webhook n8n saya tidak pernah berfungsi?

Hampir sentiasa disebabkan WEBHOOK_URL. Jika tidak ditetapkan atau salah, n8n akan mencetak alamat webhook yang dibina daripada N8N_HOST:N8N_PORT — sering kali mengandungi :5678 atau localhost — yang kelihatan sah tetapi tidak boleh dicapai dari internet, menyebabkan permintaan pemanggil tidak sampai. Tetapkan WEBHOOK_URL=https://n8n.example.com/ dan sahkan nod menunjukkan URL tanpa port. Punca kedua ialah memanggil webhook yang aliran kerjanya tidak diaktifkan (Active), yang akan mengembalikan The requested webhook ... is not registered..

Apakah yang mesti saya sandarkan dalam n8n?

Dua perkara. N8N_ENCRYPTION_KEY daripada fail .env anda, kerana setiap kredensial yang disimpan disulitkan dengannya dan kehilangan fail ini akan menyebabkan kredensial tidak boleh dinyahsuliti secara kekal — salin fail ini keluar dari pelayan pada hari anda menciptanya. Dan pg_dump pangkalan data Postgres untuk aliran kerja, sejarah, dan kredensial. Pemulihan memerlukan kedua-duanya: kunci yang sama serta fail dump tersebut.

Bagaimanakah cara untuk meletakkan n8n di belakang HTTPS?

n8n menyediakan HTTP biasa pada port 5678; proxy terbalik (reverse proxy) di hadapan akan menamatkan TLS. Ikat n8n kepada 127.0.0.1:5678 supaya hanya proxy sahaja 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/, dan pastikan proxy memajukan (forward) pengepala WebSocket Upgrade atau editor akan tergantung.

Bagaimanakah cara untuk menaik taraf n8n dengan selamat?

Gunakan tag imej spesifik dan bukannya latest, lakukan pg_dump terlebih dahulu kerana n8n menjalankan migrasi secara automatik semasa permulaan, baca nota keluaran untuk perubahan yang memecahkan sistem, kemudian kemas kini tag dan jalankan docker compose pull n8n && docker compose up -d n8n. Kontena adalah boleh dibuang, jadi lakukan pemulihan (roll back) dengan menetapkan tag sebelumnya dan memulihkan dump sebelum naik taraf.