⚙️ n8n 是什么?
n8n 是一款强大的开源工作流自动化平台,凭借可视化界面与灵活代码的结合,让构建复杂流程变得直观。它拥有 600+ 集成、原生 AI 能力,采用对用户友好的 fair-code 许可证,确保你对数据和部署拥有完全掌控权。其独特的节点式设计提供了极高的灵活性,几乎能连接任何应用或服务。
自托管 n8n 的核心优势:
本指南目标与读者:
本文面向具备基础技术知识(命令行、Docker概念)并希望自托管 n8n 的用户。我们将手把手带你完成:
提示: 持续运行、复杂工作流或高频任务需更高配置。
cd
, ls
, mkdir
, 文本编辑 (nano
/vim
/VS Code
)。docker run/compose
等命令。适用于学习、开发、测试或非持续性的个人自动化任务。
node -v
, npm -v
验证)。npm install -g n8n # 可能需要 sudo (Linux/macOS)
--ignore-scripts
或 --omit=dev
。n8n # 或 n8n start
访问 http://localhost:5678
。~/.n8n
(Linux/macOS) 或 %USERPROFILE%\.n8n
(Windows)。npm install -g pm2
pm2 start n8n --name n8n
pm2 save
pm2 startup # 按提示执行命令设置开机启动
/etc/systemd/system/n8n.service
,配置后 systemctl enable --now n8n.service
。n8n start --tunnel # 生成临时公网URL (⚠️ 非生产环境使用!)
docker volume create n8n_data
docker run -d --name n8n \
-p 5678:5678 \
-v n8n_data:/home/node/.n8n \ # 核心:挂载卷持久化数据
n8nio/n8n
http://localhost:5678
。docker run -d --name n8n \
... # 端口、卷参数同上
-e N8N_BASIC_AUTH_ACTIVE=true \
-e N8N_BASIC_AUTH_USER=admin \
-e N8N_BASIC_AUTH_PASSWORD=your_strong_pwd \
-e GENERIC_TIMEZONE=Asia/Shanghai \ # 设置时区
n8nio/n8n
或使用 --env-file .env
加载变量文件。docker stop/start/restart n8n # 停止/启动/重启
docker logs n8n # 查看日志
docker exec -it n8n sh # 进入容器 (调试/安装节点)
docker rm n8n # 删除容器 (先停止)
优势: 配置管理清晰 (docker-compose.yml
+ .env
),易于扩展 (加数据库/代理),未来迁移无忧。
brew install --cask orbstack
),性能更优。mkdir my-n8n-project && cd my-n8n-project
.env
(存放敏感配置):# .env
N8N_BASIC_AUTH_ACTIVE=true
N8N_BASIC_AUTH_USER=admin
N8N_BASIC_AUTH_PASSWORD=your_very_strong_pwd
GENERIC_TIMEZONE=Asia/Shanghai
# N8N_ENCRYPTION_KEY=your_secure_key # 强烈建议设置!(openssl rand -hex 32)
# OrbStack 用户可设置自定义域名,如:N8N_HOST=n8n.mydomain.orb.local
docker-compose.yml
:version: '3.8'
services:
n8n:
image: n8nio/n8n:latest
restart: unless-stopped
ports:
- "5678:5678"
volumes:
- n8n_data:/home/node/.n8n # 持久化核心数据
# - ./local_files:/files # (可选) 映射本地文件目录
environment:
- N8N_BASIC_AUTH_ACTIVE=${N8N_BASIC_AUTH_ACTIVE}
- N8N_BASIC_AUTH_USER=${N8N_BASIC_AUTH_USER}
- N8N_BASIC_AUTH_PASSWORD=${N8N_BASIC_AUTH_PASSWORD}
- GENERIC_TIMEZONE=${GENERIC_TIMEZONE}
- NODE_ENV=production
# - N8N_ENCRYPTION_KEY=${N8N_ENCRYPTION_KEY} # 取消注释
# - N8N_HOST=${N8N_HOST:-localhost} # 域名设置
# - WEBHOOK_URL=${N8N_HOST:+https://${N8N_HOST}/} # 配合域名
volumes:
n8n_data: # Docker 管理卷
docker compose up -d # 后台运行
http://localhost:5678
(或 OrbStack 域名如 http://n8n.mydomain.orb.local
)。方法 | 优点 | 缺点 | 适用场景 |
---|---|---|---|
npm | 最直接,Node.js 生态 | 需额外配置后台运行 (PM2等),环境依赖强 | 快速体验,熟悉 Node.js 环境 |
Docker run | 环境隔离,部署快 | 命令较长,管理多容器/配置稍乱 | 快速启动单容器,简单持久化 |
Docker Compose | 配置清晰,易扩展,数据/网络管理优,生产基础 | 需理解 YAML 和 .env 文件 | 开发、测试、生产部署推荐方式 |
让 n8n 在云端稳定运行,随时随地访问。
sudo
用户,禁用 root SSH 登录。ufw
),仅开放必要端口 (SSH/HTTP/HTTPS):sudo ufw allow 22/tcp # SSH
sudo ufw allow 80/tcp # HTTP (用于申请证书)
sudo ufw allow 443/tcp # HTTPS
sudo ufw enable
sudo apt update && sudo apt upgrade -y
。n8n.yourdomain.com
) A 记录指向服务器公网 IP。mkdir ~/n8n-cloud && cd ~/n8n-cloud
.env
(安全配置核心!):# .env
N8N_HOST=n8n.yourdomain.com # 你的域名
WEBHOOK_URL=https://${N8N_HOST}/ # HTTPS!
N8N_PROTOCOL=https
N8N_BASIC_AUTH_ACTIVE=true
N8N_BASIC_AUTH_USER=admin_prod # 生产环境用强用户
N8N_BASIC_AUTH_PASSWORD=Super_Strong_P@ssw0rd! # 强密码!
GENERIC_TIMEZONE=Asia/Shanghai
N8N_ENCRYPTION_KEY=your_generated_secure_key_here # 必须设置!(openssl rand -hex 32)
#DATA_FOLDER=./n8n-data # (可选) 定义基础路径
docker-compose.yml
(含 HTTPS 反向代理 - 以 Caddy 为例):version: '3.8'
services:
caddy:
image: caddy:latest
restart: unless-stopped
ports:
- "80:80" # HTTP -> HTTPS 重定向
- "443:443" # HTTPS
volumes:
- ./Caddyfile:/etc/caddy/Caddyfile
- caddy_data:/data # 持久化 Caddy 数据 (含 SSL 证书)
- caddy_config:/config
environment:
- N8N_HOST=${N8N_HOST} # 传递域名
n8n:
image: n8nio/n8n:latest
restart: unless-stopped
environment:
- N8N_HOST=${N8N_HOST}
- N8N_PORT=5678
- N8N_PROTOCOL=${N8N_PROTOCOL}
- WEBHOOK_URL=${WEBHOOK_URL}
- GENERIC_TIMEZONE=${GENERIC_TIMEZONE}
- N8N_BASIC_AUTH_ACTIVE=${N8N_BASIC_AUTH_ACTIVE}
- N8N_BASIC_AUTH_USER=${N8N_BASIC_AUTH_USER}
- N8N_BASIC_AUTH_PASSWORD=${N8N_BASIC_AUTH_PASSWORD}
- N8N_ENCRYPTION_KEY=${N8N_ENCRYPTION_KEY} #
- NODE_ENV=production
volumes:
- n8n_data:/home/node/.n8n # 核心数据持久化
# - ${DATA_FOLDER}/local_files:/files # (可选)
depends_on:
- caddy
networks:
- n8n-net # (推荐) 使用自定义网络更安全
volumes:
n8n_data:
caddy_data:
caddy_config:
networks:
n8n-net: # 创建专用网络
Caddyfile
(与 docker-compose.yml 同级):{$N8N_HOST} { # 使用环境变量中的域名
reverse_proxy n8n:5678 # 代理到 compose 网络内的 n8n 服务
encode zstd gzip # 压缩
# Caddy 自动处理 HTTPS (Let's Encrypt)
}
docker compose up -d
https://n8n.yourdomain.com
(必须 HTTPS)。.env
中设置的用户名密码登录。Basic Auth
是最低要求,生产环境务必设置强密码。多人使用应配置 n8n 用户管理 + SMTP。http://localhost:5678
或 https://yourdomain.com
)。Manual
节点 (触发)。Set
节点,设置字段 (如 name: "test"
)。NoOp
节点 (结束)。Execute Workflow
测试。Set
节点输出是否正确。cd /your/n8n-compose/dir
docker compose pull n8n # 拉取最新镜像
docker compose up -d --force-recreate n8n # 重启容器应用更新
docker stop n8n
docker rm n8n
docker pull n8nio/n8n:latest
# ⚠️ 务必使用相同的卷映射命令重新运行!
docker run ... -v n8n_data:/home/node/.n8n ... n8nio/n8n
pm2 stop n8n # 或 systemctl stop n8n
npm update -g n8n # 更新到 latest
# npm install -g n8n@next # 更新到 next (测试版)
pm2 start n8n # 或 systemctl start n8n
⚠️ 更新铁律: 无论何种方式,必须确保正确挂载数据卷 (/home/node/.n8n
),否则更新后数据会丢失!/home/node/.n8n
(Docker 容器内) 或 ~/.n8n
(npm 安装)。-v volume_name:/home/node/.n8n
或 Compose 中的 volumes
映射。这是数据安全的基石! 更新/重启容器时,必须保持此映射不变。变量名 | 作用描述 | 示例值 | 重要性 |
---|---|---|---|
N8N_BASIC_AUTH_ACTIVE |
启用基础认证 | true |
高 |
N8N_BASIC_AUTH_USER |
基础认证用户名 | admin |
高 |
N8N_BASIC_AUTH_PASSWORD |
基础认证密码 | StrongP@ss! |
高 |
N8N_ENCRYPTION_KEY |
加密凭证的密钥 (必设!) | openssl rand -hex 32 生成 |
极高 |
N8N_HOST |
实例访问域名 (云部署) | n8n.yourdomain.com |
高 |
WEBHOOK_URL |
Webhook 完整基础 URL (HTTPS!) | https://n8n.yourdomain.com/ |
高 |
N8N_PROTOCOL |
协议 (http /https ) |
https |
高 |
GENERIC_TIMEZONE |
设置时区 | Asia/Shanghai , UTC |
中 |
N8N_DIAGNOSTICS_ENABLED |
是否发送匿名诊断信息 | false (推荐关闭) |
中 |
DB_TYPE |
数据库类型 (替换默认 SQLite) | postgresdb , mysqldb |
中高 |
DB_POSTGRESDB_DATABASE |
Postgres 数据库名 (配 DB_TYPE ) |
n8n |
中高 |
... |
(其他数据库相关变量) | … | … |
Conflict. The container name "/n8n" is already in use
docker stop n8n && docker rm n8n # 先停止再移除旧容器
/host/path
):sudo chown -R 1000:1000 /host/path # 调整主机目录权限 (UID 通常 1000)
# 或改用 Docker 命名卷 (-v volume_name:/container/path)
5678
冲突:# 映射到其他主机端口,例如 5679
docker run ... -p 5679:5678 ...
node-gyp
编译错误 (Windows):
npm cache clean --force
。Cannot find module 'xxx'
(Code 节点):
npm install -g xxx
(在 n8n 相同环境)。FROM n8nio/n8n; RUN npm install -g xxx
)。localhost:5678
(本地):
pm2 list
, docker ps
)。pm2 logs n8n
, docker logs n8n
)。5678
端口。https://yourdomain.com
(云端):
ping yourdomain.com
/ nslookup yourdomain.com
确认解析到正确 IP (等待传播)。80
/443
。docker compose logs caddy
),确认配置正确 (代理到 n8n:5678
)。docker ps
确认 n8n 和代理容器运行,docker logs
查错。https://
。n8n
做子域名 (Google 安全策略),改用 automation.yourdomain.com
等。.env
文件变量名拼写、值和语法。.env
与 docker-compose.yml
同目录。docker compose down && up -d
, docker restart n8n
, pm2 restart n8n
)。docker run -v
或 Compose volumes
是否正确映射到 /home/node/.n8n
。database.sqlite
等文件。