
使用n8n的契机是我的游戏服务器需要节能,但是一直没有找到监听mysql的方法,直到遇见了n8n。
没想到n8n远比我想象的要强大的多的多多多~
目录
为什么低代码在当下越发值得学习?
自从AI爆火以来,我一直可以刷到这样一句话:
“ AI 不会淘汰人,只会淘汰那些不会用 AI 的人”。
AI的出现,几乎拉平了技术与非技术、专家与普通人之间的差距。
先不谈专家的事,毕竟专家教授们有时候也不太靠谱。
但对于非技术出身的人来说,甚至包括部分技术人员,他们对 AI 的认知往往是模糊的:
- 有时觉得 AI 无所不能,
- 有时又觉得 AI 什么都做不到。
经过长达🐔两年半
🐔时间的观察,我发现导致这种状态的核心原因很简单:
他们无法分清AI究竟是一种产品还是一种技术。
我来指路:低代码 + AI,有没有搞头?

这就要说到n8n
了。
在 AI 出现之前,n8n 只是一个图形化的低代码产品。
但 AI 出现之后,低代码 + AI
的组合让事情变得更加有趣。
首先,AI 时代的企业,对 业务与技术的结合 提出了更高的要求,而 低代码能帮助更多业务人员跨入 AI 领域。
简单来说,
低代码 能让非技术人员快速参与业务开发,
AI 能让低代码平台发挥出更大的价值,
二者结合,简直是一石三鸟!
少林功夫好啊,真滴好~
少林功夫棒啊,真滴棒~
我是铁头功,无敌铁头功~
你是金刚腿,我是金刚腿~
🌰举个例子:
一个简单的Excel表格操作问题,在没有AI接入之前的n8n流程:

业务员需要执行一系列繁琐的步骤:
找到文件
读取文件
修改字段
重新打包
重新保存
但在接入 AI 之后,一切变得更加简单:

整个过程中,我们 几乎不需要编写任何代码,仅需 拖拖拽拽,然后让 AI 通过 Prompt
识别并修改内容,最后保存到本地。
最终的结果:
- 对于我们来说,低代码的工作流节省了大量时间;
- 对于AI来说,借助n8n,我们已经迈入了
AI Cyberpunk的世界
!
至此,我们也终于成为了一个 “会用 AI 的人”。 🚀
关键词
- n8n.io 开源免费的AI工作流
- Self-host n8n 自托管的n8n,powered by majun.fun
- Docker 我爱Docker
- AI API deepseek又可以充值了
快速部署
本文仅讨论自托管的n8n,使用n8n Cloud服务的请参考官方文档:https://docs.n8n.io/manage-cloud/overview/
推荐使用Docker进行自托管n8n的安装,环境为Debian 12
.
第一步:安装Docker
- 设置Docker的
apt
存储库:
# Add Docker's official GPG key:
sudo apt-get update
sudo apt-get install ca-certificates curl
sudo install -m 0755 -d /etc/apt/keyrings
sudo curl -fsSL https://download.docker.com/linux/debian/gpg -o /etc/apt/keyrings/docker.asc
sudo chmod a+r /etc/apt/keyrings/docker.asc
# Add the repository to Apt sources:
echo \
"deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.asc] https://download.docker.com/linux/debian \
$(. /etc/os-release && echo "$VERSION_CODENAME") stable" | \
sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
sudo apt-get update
- 安装最新的Docker包:
sudo apt-get install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
- 验证是否安装成功:
此命令下载测试映像并在容器中运行。容器运行时,它会打印一条确认消息并退出。
sudo docker run hello-world
第二步:部署n8n
首先,创建一个目录用于 n8n 的部署:
mkdir /home/jason/n8n_with_postgreSQL
然后,在该目录下创建三个文件:.env
、init-data.sh
和 docker-compose.yml
,目录结构如下:

为了解决这个问题,我们直接使用 PostgreSQL 作为 n8n 的数据库,并在 docker-compose.yml 文件中添加一些关键参数,以确保长期稳定运行:
WEBHOOK_URL=https://www.majun.fun:3021 #webhook地址,必须配置公网可访问的地址
EXECUTIONS_DATA_PRUNE = true #是否打开执行结果自动清理,建议开启
EXECUTIONS_DATA_MAX_AGE = 168 #执行结果保留时间(小时)
EXECUTIONS_DATA_PRUNE_MAX_COUNT = 2000 #设置存储执行结果的最大条数
这样,n8n 部署后不仅能够使用 PostgreSQL 作为数据库,还能自动清理过期执行结果,保证系统高效运行。
n8n三个配置文件的清单:
.env
POSTGRES_USER=changeUser
POSTGRES_PASSWORD=changePassword
POSTGRES_DB=n8n
POSTGRES_NON_ROOT_USER=changeUser
POSTGRES_NON_ROOT_PASSWORD=changePassword
init-data.sh:
#!/bin/bash
set -e;
if [ -n "${POSTGRES_NON_ROOT_USER:-}" ] && [ -n "${POSTGRES_NON_ROOT_PASSWORD:-}" ]; then
psql -v ON_ERROR_STOP=1 --username "$POSTGRES_USER" --dbname "$POSTGRES_DB" <<-EOSQL
CREATE USER ${POSTGRES_NON_ROOT_USER} WITH PASSWORD '${POSTGRES_NON_ROOT_PASSWORD}';
GRANT ALL PRIVILEGES ON DATABASE ${POSTGRES_DB} TO ${POSTGRES_NON_ROOT_USER};
GRANT CREATE ON SCHEMA public TO ${POSTGRES_NON_ROOT_USER};
EOSQL
else
echo "SETUP INFO: No Environment variables given!"
fi
docker-composer.yml
version: '3.8'
volumes:
db_storage:
n8n_storage:
services:
postgres:
image: postgres:16
restart: always
environment:
- POSTGRES_USER
- POSTGRES_PASSWORD
- POSTGRES_DB
- POSTGRES_NON_ROOT_USER
- POSTGRES_NON_ROOT_PASSWORD
volumes:
- db_storage:/var/lib/postgresql/data
- ./init-data.sh:/docker-entrypoint-initdb.d/init-data.sh
healthcheck:
test: ['CMD-SHELL', 'pg_isready -h localhost -U ${POSTGRES_USER} -d ${POSTGRES_DB}']
interval: 5s
timeout: 5s
retries: 10
n8n:
image: docker.n8n.io/n8nio/n8n
restart: always
environment:
- DB_TYPE=postgresdb
- DB_POSTGRESDB_HOST=postgres
- DB_POSTGRESDB_PORT=5432
- DB_POSTGRESDB_DATABASE=${POSTGRES_DB}
- DB_POSTGRESDB_USER=${POSTGRES_NON_ROOT_USER}
- DB_POSTGRESDB_PASSWORD=${POSTGRES_NON_ROOT_PASSWORD}
- WEBHOOK_URL=https://www.majun.fun:3021
- EXECUTIONS_DATA_PRUNE = true
- EXECUTIONS_DATA_MAX_AGE = 168
- EXECUTIONS_DATA_PRUNE_MAX_COUNT = 2000
ports:
- 5678:5678
links:
- postgres
volumes:
- n8n_storage:/home/node/.n8n
depends_on:
postgres:
condition: service_healthy
配置完成之后,我们直接启动🚀:
sudo docker compose -f docker-composer.yml up -d
等待运行成功之后,直接访问: http://localhost:5678/ 进入n8n的安装界面:

第三步:反向代理n8n
由于我的 Web 服务是通过 Nginx 运行,并且已支持 HTTPS,因此只需为 n8n 添加一个 Nginx 反向代理,即可通过 https://www.majun.fun:3021 访问 n8n。
以下是 Nginx 反向代理的配置文件:
server {
listen 3021 ssl default_server;
listen [::]:3021 ssl default_server;
ssl_certificate /etc/nginx/your_cert;
ssl_certificate_key /etc/nginx/your_cert_key;
server_name n8n;
location / {
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_pass http://localhost:5678/;
# WebSocket 相关配置
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "Upgrade";
}
}
第四步:配置webhook地址
细心的朋友可能已经注意到,我们的 Docker Compose 文件中已经包含了 n8n 的 Webhook 配置。
没错!只需在 .yml 文件中完成配置,n8n 便可直接使用公网 Webhook 地址,无需额外操作。
- n8n Webhook 配置示意图:

- n8n 启用 Webhook 监听:

第五步:更新n8n
由于我们是通过 Docker Compose 部署的 n8n,因此更新过程非常简单,只需执行以下命令:
# 拉取新版本
sudo docker compose -f docker-composer.yml pull
# 停止旧版本
sudo docker compose -f docker-composer.yml down
# 启动容器
sudo docker compose docker-composer.yml up -d
至此,n8n 的配置与更新流程已全部完成。
制作第一个AI n8n程序
作为 n8n 新手,手写一个 AI 相关的 n8n 程序可能不太现实。
不过,好在n8n有着多到令人发指
的Template,我部署的时候才1300多个,现在已经1489个了!

借助这些模板,我们可以轻松创建第一个 n8n 程序。本次我们将使用 使用 AI 抓取并汇总网页 这个模板。
导入模板
首先,在 n8n 中导入该模板:

导入后,系统会提示使用 OpenAI
模型。由于我们要使用 DeepSeek
模型,因此可以点击 跳过。

导入完成后,整个流程如下:

修改AI model为DeepSeek
首先,删除 OpenAI Chat Model1
节点。然后,添加 DeepSeek Model
节点:

为 DeepSeek
创建新的 API
凭据:

在 DeepSeek Model
节点中,选择 deepseek-chat
模型:

完成后,节点结构应如下所示:

至此,所有配置已经完成!现在,我们的 n8n AI 流程可以使用 DeepSeek 进行网页抓取和总结了 🎉!
后记
这个AI的sample一共请求了772次,花费了13w的token,因为sample的文章比较多,所以有点费token:

主要是n8n官方的这个模板确实不怎么样,但却让我在实践中更好地理解了n8n的设计思路,或者说是低代码平台的整体设计逻辑。
还收获了一些学习的思路。
学习的思路
从实际问题出发,才是学习的正确路径。
低代码工具如 n8n,虽然能帮助你掌握一些技能,但这些技能的价值,取决于能否解决实际问题。如果不能从实际需求出发,选择合适的工具来解决问题,所学的操作很容易变成“无用之物”,甚至很快被遗忘。
学习 n8n 的目的,不是为了掌握工具本身,而是让没有编程能力的人,能够快速实现自动化解决方案。如果没有明确的需求,学习过程可能会显得枯燥无味,与其无目标地学习,不如直接去做一些自己感兴趣的事。
正确的学习方式是:Learning by Doing
先学习,再开始,❌
先开始,再学习,✅
