前言:在部署前请自行解决服务器和域名相关问题。
n8n
是一款开源、低代码的工作流自动化平台。部署也相当容易,可选择 npm
安装,但是相对机器性能要求比较高;也可以选择 docker
进行安装,方便快捷但是需要会 docker
相关操作。
安装和部署
我这边的话推荐用 docker
进行安装,比如 1panel
面板上的一键安装,或者像这位 大佬 教的进行安装。
如果有需要中文版,也可以使用 n8n-i18n-chinese 该Github
仓库进行根据MD文档操作进行安装,该仓库支持 1.86.1
以上的版本直接使用仓库内的 docker-compose.yml
进行快速安装,不需要自己过多的操作。
操作前提示:一定要打开自己域名管理里面的
Websocket
开关。因为n8n
中的环境变量N8N_PUSH_BACKEND决定了后端如何向 UI 发送实时更新。它可以设置为 websocket 或 sse(服务器发送事件):
- 默认: websocket
选项:
- websocket:使用 WebSockets 进行推送通知和实时更新。
- sse:使用服务器发送事件。
1panel安装部署
在应用商店直接搜索 n8n
,并点击安装即可,版本自选,端口自己设置在自己想的,n8n
默认端口为 5678
。
但记住,从 n8n
的 1.79
版本之后,官方便对 n8n
的持续服务网络连接进行了更改,往上版本如果环境变量参数缺少了部分参数,会导致部署好之后使用时提示 Connection lost
。这不是自己操作的问题,是官方并没有明确提出的问题。
# 以下是我完整的容器环境变量
N8N_SECURE_COOKIE=false # 如果想要cookie验证这里可以改成true
WEBHOOK_URL=https://xxx.xxx.com/ # 缺少需补上,1.79版本以上刚需该变量
N8N_HOST=xxx.xxx.com # 缺少需补上
N8N_DEFAULT_LOCALE=zh-CN # 如果是中文版需要加上,不是的话不需要,可以无视
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
NODE_VERSION=20.19.0
YARN_VERSION=1.22.22
NODE_ICU_DATA=/usr/local/lib/node_modules/full-icu
N8N_VERSION=1.86.1
NODE_ENV=production
N8N_RELEASE_TYPE=stable
SHELL=/bin/sh
之后在面板里域名配置好对应端口的反向代理就好了。
Docker直接部署
这里以上述中文版仓库为例,将仓库 git clone
下来之后,按照作者的 README.md
说的操作就好了。之后配置好域名对应端口 15678:5678
的反向代理就可以了。
但是环境变量相关问题同上1panel安装部署的参数一样,如果是高于 1.79
的版本都需要额外写入参数,保证服务连接。
部署完
在这之后只需要跳转到自己 n8n
的域名,就会有注册登录的页面,弄完之后就可以快乐的玩耍了。这之后再附带一个简单的自动化实战案例。
案例
这里我们就实现一个简单的 Github
的 Golang
仓库接收到推送后,自动同步到服务器内编译并后台运行跑起服务的案例。
这里需要在对应仓库内的 Settings → Webhook
里面配置好:
仓库需要配置两个 Webhook
,一个是测试的,一个是生产实际用的。
这里的 Payload URL
要和 n8n
工作流里的 URL
一致,测试URL
即 https://域名/webhook-test/path
这里的 path
是 n8n
的 Webhook
里你自己设置的;如果是 生产URL
即 https://域名/webhook/path
。
这样 Github
和 n8n
工作流的 Webhook
同步配置好后,就能接通了。
Webhook 就像一个触发器,这样配 Github 仓库只要有 push 事件发生,就会像对应 URL 发送 POST 请求,n8n 工作流只要处于 active 状态,就会检测到 POST 请求并自动执行之后的工作流。
Webhook
触发后就到 Execute Command
即在 n8n
所在系统执行你所需要的命令,这里我因为是 docker
部署的,所以命令都在容器里。这里就需要 ssh
连接到宿主机去对应文件区域执行我们所需要的命令。
这里参考两位大佬写的文章:
Github Actions 实现 Nuxt 3 自动构建并部署
因为我是容器 → 宿主机,所以需要将密钥放在容器里,公钥在宿主机。即生成好密钥之后,通过容器挂载配置直接找到 n8n
挂载的目录,把密钥丢进去。之后执行我们需要的命令就好:
ssh -i /usr/local/lib/node_modules/n8n/node_modules/n8n-editor-ui/dist/密钥 用户名@host.docker.internal "sudo bash /path/path/xxx.sh"
这里还是推荐访问到宿主机之后,用 shell
脚本去执行命令,会比较方便。
我需要的使用场景就是到对应目录,将原先运行着的后台进程删掉,然后拉去仓库最近代码,修改对应代码之后打包在后台运行。
#!/bin/bash
# 切换到项目目录
cd /xxx/xxx/path/xxx.xxx.com/
# 杀掉 ./gacha 进程的第一个实例
sudo kill -9 $(ps aux | grep './xxx' | awk '{print $2}' | head -n 1) || true
# 拉取最新的代码
sudo git pull
# 修改 xxx.js 文件中的 URL
sudo sed -i 'xxs|http://xxx/xxx|https://xxx/xxx|' /xxx/path/asset/xxx.js || true
# 编译 Go 程序
sudo go build -o xxx main.go
# 后台运行 Go 程序
nohup ./xxx > /dev/null 2>&1 &
另外容器 ssh
连接到宿主机,会有一些问题,例如我的:
sudo kill -9 $(ps aux | grep './xxx' | awk '{print $2}' | head -n 1) || true
sudo sed -i 'xxs|http://xxx/xxx|https://xxx/xxx|' /xxx/path/asset/xxx.js || true
nohup ./xxx > /dev/null 2>&1 &
同是一个用户,但是容器 ssh
连接进来第1、2条命令必须加 sudo
才能正常执行,而且都需要使用一些手段处理命令的回参,不然会阻塞住 n8n
自动化执行命令的会话,这在人为手操相同命令是不会出现这类问题的。
最后,后台运行编译好的文件必须舍弃掉 nohup
的回参,不然会因为不知名原因导致该命令变成前台运行切阻塞当前连接会话,让 n8n
自动化执行命令部分直接无限阻塞,导致自动化运行不下去。
之后邮件发送通知那里自己弄好邮箱的 smtp
配置就好了,网上应该有挺多教的,就不赘述了。
运行测试
在真正使用前,最好每个自动化节点测试一下,看看命令啥的有没问题,会不会阻塞,有没有写错参数啥的。
Webhook
的话,可以只 push
一次,Github
仓库的 Webhook
有个 Recent Deliveries
,开启 n8n
的 Webhokk
测试监听后,去 Recent Deliveries
重发请求就好了,如果监听到了会有对应仓库的所有回参的。
至于 Execute Command
的命令,需要自己去一步步试错了,不同的命令可能都会有不同的差异影响,但应该大体上没这么多问题。如果出问题了就当锻炼大伙排错能力了。
最后邮件那里如果配置对的话就能发送你配置的邮件给你。
当你用 生产URL
进行自动化的时候,n8n
概述里有个 执行
,里面自己的自动化流程执行的什么样都可以看得到。
总结
感谢 Bhao 大佬的友情耐心协助。这次部署和配置学到了许多的东西,也真正的自己手动配置了一次自动化流程,感受到了自动化的方便快捷。希望该篇文章能够对大伙有些许帮助。
评论(0)