n8n二三事

使用n8n的契机是我的游戏服务器需要节能,但是一直没有找到监听mysql的方法,直到遇见了n8n。

没想到n8n远比我想象的要强大的多的多多多~

目录

为什么低代码在当下越发值得学习?

自从AI爆火以来,我一直可以刷到这样一句话:

“ AI 不会淘汰人,只会淘汰那些不会用 AI 的人”。

AI的出现,几乎拉平了技术与非技术、专家与普通人之间的差距。

先不谈专家的事,毕竟专家教授们有时候也不太靠谱。

但对于非技术出身的人来说,甚至包括部分技术人员,他们对 AI 的认知往往是模糊的:

  • 有时觉得 AI 无所不能,
  • 有时又觉得 AI 什么都做不到。

经过长达🐔两年半🐔时间的观察,我发现导致这种状态的核心原因很简单:

他们无法分清AI究竟是一种产品还是一种技术。

我来指路:低代码 + AI,有没有搞头?

这就要说到n8n了。

在 AI 出现之前,n8n 只是一个图形化的低代码产品。

但 AI 出现之后,低代码 + AI的组合让事情变得更加有趣。

首先,AI 时代的企业,对 业务与技术的结合 提出了更高的要求,而 低代码能帮助更多业务人员跨入 AI 领域。

简单来说,

  • 低代码 能让非技术人员快速参与业务开发,

  • AI 能让低代码平台发挥出更大的价值,

  • 二者结合,简直是一石三鸟!

js
少林功夫好啊,真滴好~

少林功夫棒啊,真滴棒~

我是铁头功,无敌铁头功~

你是金刚腿,我是金刚腿~

🌰举个例子:

一个简单的Excel表格操作问题,在没有AI接入之前的n8n流程:

业务员需要执行一系列繁琐的步骤:

  1. 找到文件

  2. 读取文件

  3. 修改字段

  4. 重新打包

  5. 重新保存

但在接入 AI 之后,一切变得更加简单:

整个过程中,我们 几乎不需要编写任何代码,仅需 拖拖拽拽,然后让 AI 通过 Prompt 识别并修改内容,最后保存到本地。

最终的结果:

  • 对于我们来说,低代码的工作流节省了大量时间;
  • 对于AI来说,借助n8n,我们已经迈入了 AI Cyberpunk的世界!

至此,我们也终于成为了一个 “会用 AI 的人”。 🚀

关键词

快速部署

本文仅讨论自托管的n8n,使用n8n Cloud服务的请参考官方文档:https://docs.n8n.io/manage-cloud/overview/

推荐使用Docker进行自托管n8n的安装,环境为Debian 12.

第一步:安装Docker

  1. 设置Docker的 apt存储库:
shell
# 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
  1. 安装最新的Docker包:
shell
sudo apt-get install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
  1. 验证是否安装成功:

此命令下载测试映像并在容器中运行。容器运行时,它会打印一条确认消息并退出。

shell
sudo docker run hello-world

第二步:部署n8n

首先,创建一个目录用于 n8n 的部署:

shell/
mkdir /home/jason/n8n_with_postgreSQL

然后,在该目录下创建三个文件:.envinit-data.shdocker-compose.yml,目录结构如下:

n8n 默认使用 SQLite 作为数据库,这是一种基于文件的数据库。与大多数文件数据库类似,当数据量增长到一定程度时,性能会下降,并且数据库文件会不断增大。

为了解决这个问题,我们直接使用 PostgreSQL 作为 n8n 的数据库,并在 docker-compose.yml 文件中添加一些关键参数,以确保长期稳定运行:

shell
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
shell
POSTGRES_USER=changeUser
POSTGRES_PASSWORD=changePassword
POSTGRES_DB=n8n

POSTGRES_NON_ROOT_USER=changeUser
POSTGRES_NON_ROOT_PASSWORD=changePassword
init-data.sh:
shell
#!/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
json
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

配置完成之后,我们直接启动🚀:

shell
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 反向代理的配置文件:

json

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,因此更新过程非常简单,只需执行以下命令:

shell
# 拉取新版本
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

先学习,再开始,❌

先开始,再学习,✅

面向Cursor编程
写在年末