用一行脚本装好 n8n 并在 localhost:5678 打开本地编辑器
【免费下载链接】n8nFair-code workflow automation platform with native AI capabilities. Combine visual building with custom code, self-host or cloud, 400+ integrations.项目地址: https://gitcode.com/GitHub_Trending/n8/n8n
本文带你从零自托管一个 n8n 实例:在终端粘贴一行安装命令,等待约一两分钟,就能在 http://localhost:5678 打开工作流编辑器。全程只需要机器上有 Docker,不用手写任何配置文件,脚本会把栈定义、密钥、搜索服务一次性配齐。
一行命令装下来的是什么
很多人第一次装 n8n 只用docker run跑单容器,也能用,但 Code 节点里写 JavaScript/Python 代码、AI 助手做网页搜索这些能力会缺失。官方的一行脚本拉起的是一整套 compose 栈(compose 可以理解为"用一份 YAML 文件管理一组容器"),共五个长期运行的服务:
n8n:主体,唯一对主机发布端口的容器,占5678runners:专门跑 Code 节点用户代码的容器,端口只对内网开放sandbox-api和sandbox-runner-1:AI 助手的代码沙箱,后者是特权容器searxng:给 AI 助手提供网页搜索的元搜索引擎
另外还有一个一次性的sandbox-certs容器,负责生成沙箱内部的 mTLS 证书,跑完即退出。这套栈的完整定义在 docker/get-n8n-compose.yml 里,脚本安装时会把它下载到本地,之后这份文件归你,脚本永远不会重写它。
动手前确认 Docker 和 5678 端口
脚本开跑前会逐项自检,不满足就报错退出并给修复提示,所以这两件事最好先过一遍:
- Docker 装好了且守护进程在运行,并且
docker compose version能执行(即 Compose v2 插件可用,旧的独立docker-compose二进制不受支持)。Podman、Colima 等兼容引擎也行,但要装带 compose 插件的dockerCLI,并用DOCKER_HOST指向它们的 socket。 - 5678 端口空闲。脚本会探测
http://127.0.0.1:5678/,只要有进程应答(哪怕只是接受连接)就判定端口被占用并终止。
安装目录默认是命令执行处的./n8n,该目录必须不存在或为空,否则脚本拒绝写入;想换目录用环境变量N8N_DIR=./some-dir指定即可。
执行一行安装并理解背后的四步
最短主路径:
curl -fsSL https://get.n8n.io | sh它从官方地址下载安装脚本并立即执行;你会先看到 Docker 版本检测的两行绿勾,然后是拉镜像的进度条,最后停在一条n8n is running at: http://localhost:5678的摘要上。
如果习惯先审查再执行,用脚本头部推荐的写法:
curl -fsSL https://get.n8n.io -o get-n8n.sh && less get-n8n.sh && sh get-n8n.sh先下载为本地文件、翻页读完再运行,内容全部可见(源码即 docker/get-n8n.sh)。
执行期间脚本实际做四件事:
- 定版本:取最新稳定 release,以
N8N_VERSION=2.32.0这样的形式写死进.env,不用浮动 tag——否则容器重建时会静默升级并触发数据库迁移。查 GitHub 失败时回退到内置的2.32.0。 - 生成三个文件到
./n8n:compose.yml(栈定义)、.env(权限 600,内含本次安装随机生成的沙箱密钥、runner 认证 token 等)、searxng-settings.yml(开启搜索 JSON 接口)。 - 拉镜像并启动:
docker compose up -d起全部服务,首次拉镜像可能要几分钟。 - 等健康检查:每 3 秒轮询一次
http://127.0.0.1:5678/healthz,上限 180 秒——首次启动要跑数据库迁移,180 秒就是留给它的预算。
常用选项拼在管道后面,按需取用:
| 写法 | 效果 |
|---|---|
sh -s -- --version 2.32.0 | 安装指定版本(必须三段式版本号) |
sh -s -- --no-start | 只生成配置,不拉镜像不启动 |
sh -s -- --version | 只打印脚本版本和将装的 n8n 版本,零改动 |
两个环境变量:N8N_DIR换安装目录;DO_NOT_TRACK=1表示安装或升级失败时不再询问是否发送匿名失败报告(仅含脚本版本、系统名、失败步骤,默认不发送)。
确认就绪:浏览器看界面,终端看健康检查
摘要打印后在浏览器打开 http://localhost:5678 即进入编辑器,完成初始账号创建就能开始拖节点建工作流:
不想依赖脚本提示时,两条命令可以独立复核。健康检查端点(脚本判定就绪用的就是它):
curl http://127.0.0.1:5678/healthz它请求 n8n 的健康端点;返回成功说明服务已能处理请求。再看容器状态:
docker compose -f n8n/compose.yml ps它会列出栈内全部容器;期望看到n8n、sandbox-api、sandbox-runner-1、runners、searxng五个处于 running,sandbox-certs以退出码 0 结束(exited 0,这是正常行为)。
日常三个动作:停止、启动、升级
停止和启动各一条命令(摘要里也会原样给出):
docker compose -f n8n/compose.yml down # 停止 docker compose -f n8n/compose.yml up -d # 启动down只停容器删网络,数据卷原封不动;up -d重新拉起。
在已有安装上不带--upgrade重跑一行脚本是安全的 no-op:它发现./n8n已有配置后只报告当前状态、启动地址和升级命令,不碰任何文件。真正升级用:
curl -fsSL https://get.n8n.io | sh -s -- --upgrade它只修改.env里的N8N_VERSION一行(可与--version x.y.z组合指定目标版本),然后拉镜像并重启;密钥和其他配置一概不动。若官方栈定义已更新,它只会提示你去看变更,不会替你改写本地compose.yml。
卡住时先对号入座这三个失败点
失败时脚本会把错误归好类,最常见的三种:
- 端口被占用:报
something is already listening on port 5678。停掉占用进程后重跑;或者加--no-start只生成配置,手动改n8n/compose.yml里的端口映射再启动。 - Docker Hub 拉取限流:⚠️ 配置文件不受影响,等约一小时后用
docker compose -f n8n/compose.yml up -d启动即可;或者docker login登录 Docker Hub 账号提高限额后重跑脚本。 - 180 秒内
/healthz不通:按提示执行docker compose -f n8n/compose.yml logs n8n看主体日志。
另有一种是安装目录非空被拒:提示用N8N_DIR=./some-dir换个目录,不要往已有文件里硬写。
数据存在哪,以及这套部署的边界
所有实例数据存在 Docker 卷n8n-data中,挂载到容器内/home/node/.n8n:工作流保存在 SQLite 数据库里,同目录还放 webhook URL 和凭据加密密钥。据 docker/images/n8n/README.md 说明,启动时若找不到这些数据,n8n 会自动生成新密钥,已有凭据将无法再解密——迁移或备份时这个卷是第一优先级。
安全上记住脚本摘要的两句原话:只有5678端口可以暴露到公网;sandbox-runner-1是特权 Docker-in-Docker 容器,永远不要发布它的端口,runners、sandbox-api、searxng只在 compose 网络内以服务名访问,不发布主机端口。
最后明确边界:这套一行部署面向本地试用和快速验证。生产级需求——TLS、Postgres、队列模式——不在一行脚本范围内,需要另行规划。如果哪天想彻底重来,卸载命令是docker compose -f n8n/compose.yml down -v && rm -rf n8n,注意down -v会连带删除n8n-data卷,也就是删掉全部 n8n 数据。
【免费下载链接】n8nFair-code workflow automation platform with native AI capabilities. Combine visual building with custom code, self-host or cloud, 400+ integrations.项目地址: https://gitcode.com/GitHub_Trending/n8/n8n
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考