最推荐的方法是使用 Docker,因为这样最快、最干净,也最方便后续的升级和维护。
宝塔面板:
进入Docker板块,在应用商店中搜索“n8n”并直接点击安装,只需简单配置即可:
端口需宝塔面板和服务器安全组都要放行指定端口。
需要将宝塔面板更新到最新版本才行
这种情况下,直接写服务的域名地址是会报错的:
DNS server returned an error, perhaps the server is offline
原因:
当你在 n8n 容器内部请求一个域名(如 klynode.158178.cloud)时,容器会尝试通过 DNS 解析该域名。如果这个域名指向的是服务器的 公网 IP,由于某些云服务商的防火墙限制或 NAT 回流(Hairpin NAT)问题,容器可能无法从内部绕回到宿主机的公网接口,从而导致 DNS 报错或连接超时。
解决方案:
services:
n8n:
image: n8nio/n8n:${VERSION}
# container_name: ${CONTAINER_NAME}
deploy:
resources:
limits:
cpus: ${CPUS}
memory: ${MEMORY_LIMIT}
restart: always
ports:
- ${HOST_IP}:${WEB_HTTP_PORT}:5678
volumes:
- ${APP_PATH}/data:/home/node/.n8n
extra_hosts:
- "klynode.178.cloud:172.17.0.1" # 重点
environment:
N8N_SECURE_COOKIE: false
N8N_PROTOCOL: https
WEBHOOK_URL: https://${N8N_HOST}
labels:
createdBy: "bt_apps"
networks:
- baota_net
networks:
baota_net:
external: true
Module 'crypto' is disallowed [line 1]在节点 code - javascript 中,使用了 const crypto = require("crypto");。
原因:
因为 n8n 出于安全考虑,默认禁止在 Code 节点中调用 Node.js 的内置模块或第三方库
方案一:使用node原生 crypto
environment:
NODE_FUNCTION_ALLOW_BUILTIN: crypto
方案二:使用 n8n 内置 $crypto
const hash = $crypto.sha256("hello");
return [{ hash }];
// 或者
const hmac = $crypto.hmac("sha256", "data", "secret");
return [{ hmac }];
保存 - 重启docker
如:请求 1688接口返回
getaddrinfo EAI_AGAIN h5api.m.1688.com错误。
说明你的 n8n 容器完全无法解析外部域名。
EAI_AGAIN 是 DNS 查询超时或解析器无响应的典型报错。对于 1688 这种国内域名,如果你的服务器在国内,通常是 Docker 的网桥(Bridge)与宿主机的 DNS 配置脱节了。
解决方法:
{
"registry-mirrors": ["https://docker.1ms.run"],
"dns": ["223.5.5.5", "114.114.114.114", "8.8.8.8"],
}
添加上 dns 节点