3 小时搭一个 AI 打工人:自动发日报、盯数据、推消息
从零部署,不写代码也能让机器替你 007

读完本文,你将收获:
- 理解 n8n 是什么、能做什么、为什么值得选择
- 掌握三种 Docker 部署方案:快速体验版、单机持久化版、生产就绪版
- 学会配置 PostgreSQL 数据库、Nginx 反向代理、HTTPS 证书
- 避开时区、Webhook、数据库膨胀等常见踩坑点
- 拥有一套可直接复用的部署脚本和运维命令
故事的开始:
老板说要降本增效,小禾说好
上周五下班前,老板把小禾叫到办公室:“小禾啊,公司现在要降本增效,你看看能不能把那些重复性的工作自动化一下?比如每天早上把销售数据汇总发到群里、新客户注册自动发欢迎邮件、GitHub 有 issue 自动通知钉钉…”
小禾心想,这不就是要写一堆定时脚本吗?Python 脚本 + Crontab,经典组合,干就完了。
但转念一想,每个需求都写脚本,代码散落各处,维护起来像在玩"找茬游戏"。而且运营同事也有类似需求,难道还要他们学 Python?
于是小禾开始搜索"低代码自动化平台",一番比较后,目光停在了 n8n 上:
| 平台 | 开源? | 私有化? | 节点数量 | 社区活跃度 |
|---|---|---|---|---|
| Zapier | 否 | 否 | 5000+ | 高 |
| Make (原 Integromat) | 否 | 否 | 1000+ | 中 |
| n8n | 是 | 是 | 400+ | 极高 |
开源、可私有化、Star 数 60k+、还支持自定义代码节点…
“就是你了!”
然后小禾用了一个下午就部署好了。这篇文章就是小禾的部署实战记录,手把手带你从零开始,绝不让你踩小禾踩过的坑。
n8n 是个啥?为什么选它?
一句话解释
n8n(发音:n-eight-n)是一个开源的工作流自动化平台,你可以把它理解为"开源版 Zapier"或"可私有化的 Make"。
它的核心理念是:用拖拽的方式,把各种服务串联起来,实现自动化。
触发器 → 处理节点 → 处理节点 → ... → 输出
比如:“每天早上 9 点,从数据库拉取昨日销售数据 → 用 AI 生成总结 → 发送到企业微信群”。
以前这需要写代码,现在只需要拖拽几个节点,连线,Done。
为什么选 n8n?
| 优势 | 说明 |
|---|---|
| 开源免费 | MIT 协议,社区版完全免费,想怎么用就怎么用 |
| 私有化部署 | 数据完全在自己手里,不用担心商业机密泄露 |
| 400+ 集成 | 支持主流服务:Slack、Discord、飞书、钉钉、企业微信、MySQL、PostgreSQL、HTTP、OpenAI… |
| 代码节点 | 内置 JavaScript/Python 节点,复杂逻辑照样能搞 |
| AI 原生 | 内置 AI Agent、向量数据库、RAG 等节点,天生适合 AI 应用 |
| 可视化调试 | 每个节点的输入输出一目了然,debug 不抓瞎 |
| 社区活跃 | GitHub 60k+ Star,社区节点丰富,遇到问题有人答 |
n8n 能做什么?几个真实场景
场景 1:销售数据日报
定时触发(每天9点) → 查询MySQL → AI总结 → 发送企业微信
场景 2:客户自动跟进
新客户注册(Webhook) → 发欢迎邮件 → 3天后检查是否下单 → 未下单则发优惠券
场景 3:GitHub Issue 通知
GitHub新Issue → 翻译成中文 → 发送钉钉/飞书
场景 4:内容自动分发
公众号发文(RSS) → AI生成摘要 → 同步发到Twitter/LinkedIn/知乎
场景 5:AI 客服机器人
收到用户消息 → RAG检索知识库 → GPT生成回复 → 返回用户
看到这里,是不是有点心动了?下面开始动手部署!
前置准备:磨刀不误砍柴工
硬件与系统要求
| 组件 | 最低要求 | 推荐配置 | 本文测试环境 |
|---|---|---|---|
| CPU | 1 核 | 2 核+ | 2 核 |
| 内存 | 2GB | 4GB+ | 4GB |
| 硬盘 | 10GB | 20GB+ | 40GB SSD |
| 系统 | Ubuntu 22.04/24.04 | Ubuntu 22.04 LTS | Ubuntu 22.04 |
💡 小贴士:n8n 本身不吃太多资源,但如果你要跑 AI 相关节点(调用 OpenAI 等),建议内存 4GB 起步。
软件准备清单
在开始之前,确保你的服务器上有:
- Docker(必须)
- Docker Compose(必须)
- 一个域名(可选,但强烈建议用于 HTTPS)
- 能科学上网(部分节点需要访问海外服务)
一键检查环境
# 检查系统版本
cat /etc/os-release | grep VERSION
# 检查 Docker
docker --version
# 检查 Docker Compose
docker compose version
如果 Docker 没装,别慌,下一节就教你。
开始部署:三种姿势任你选
n8n 官方推荐使用 Docker 部署,小禾这里提供三种方案,根据你的需求选择:
| 方案 | 适用场景 | 难度 |
|---|---|---|
| 方案 A:快速体验版 | 本地试玩,不保存数据 | 低 |
| 方案 B:单机持久化版 | 个人/小团队使用 | 中 |
| 方案 C:生产就绪版 | 正式环境,带数据库+反向代理 | 高 |
方案 A:快速体验(5 分钟上手)
这个方案适合你先体验一下 n8n 长什么样,数据不持久化,重启就没了。
Step 1:安装 Docker(如果没装的话)
# 更新包管理器
sudo apt update && sudo apt upgrade -y
# 一键安装 Docker
curl -fsSL https://get.docker.com | sh
# 把当前用户加入 docker 组(免 sudo)
sudo usermod -aG docker $USER
# 重新登录或执行以下命令使生效
newgrp docker
# 验证安装
docker --version
Step 2:一行命令启动 n8n
docker run -it --rm \
--name n8n \
-p 5678:5678 \
docker.n8n.io/n8nio/n8n:1.123.5
Step 3:打开浏览器访问
http://你的服务器IP:5678
第一次访问会让你设置管理员账号,填完就能进入主界面了。
⚠️ 注意:这种方式容器停止后数据就没了,仅供体验,不要用于生产环境!
方案 B:单机持久化版(推荐个人使用)
这个方案会把数据保存在本地目录,重启不丢失。
Step 1:创建数据目录
# 创建 n8n 工作目录
mkdir -p ~/n8n-data
cd ~/n8n-data
Step 2:创建 docker-compose.yml
cat > docker-compose.yml << 'EOF'
version: '3.8'
services:
n8n:
image: docker.n8n.io/n8nio/n8n:1.123.5
container_name: n8n
restart: always
ports:
- "5678:5678"
environment:
# 基础配置
- N8N_HOST=0.0.0.0
- N8N_PORT=5678
- N8N_PROTOCOL=http
- NODE_ENV=production
# 时区设置(重要!)
- GENERIC_TIMEZONE=Asia/Shanghai
- TZ=Asia/Shanghai
# 数据加密密钥(请修改为你自己的随机字符串)
- N8N_ENCRYPTION_KEY=your-super-secret-encryption-key-change-me
# 可选:允许使用社区节点
- N8N_COMMUNITY_PACKAGES_ALLOW_TOOL_USAGE=true
volumes:
- ./data:/home/node/.n8n
healthcheck:
test: ["CMD", "wget", "-q", "--spider", "http://localhost:5678/healthz"]
interval: 30s
timeout: 10s
retries: 3
EOF
Step 3:启动服务
# 启动
docker compose up -d
# 查看日志
docker compose logs -f
# 看到类似这行就是启动成功了:
# n8n | Editor is now accessible via:
# n8n | http://localhost:5678
Step 4:访问并初始化
浏览器访问 http://你的服务器IP:5678,按提示设置管理员账号。
常用管理命令
# 停止
docker compose down
# 重启
docker compose restart
# 查看状态
docker compose ps
# 更新到最新版(注意检查版本号)
docker compose pull && docker compose up -d
# 查看日志
docker compose logs -f --tail=100
方案 C:生产就绪版(推荐团队/正式环境)
这个方案使用 PostgreSQL 作为数据库,Nginx 作为反向代理,支持 HTTPS,适合正式环境使用。
架构图
Step 1:创建项目目录
mkdir -p ~/n8n-production
cd ~/n8n-production
mkdir -p {nginx,postgres-data,n8n-data}
Step 2:创建环境变量文件
cat > .env << 'EOF'
# 数据库配置
POSTGRES_USER=n8n
POSTGRES_PASSWORD=your-strong-postgres-password-change-me
POSTGRES_DB=n8n
# n8n 配置
N8N_ENCRYPTION_KEY=your-32-character-encryption-key!!
N8N_HOST=n8n.yourdomain.com
N8N_PROTOCOL=https
N8N_PORT=5678
# 时区
GENERIC_TIMEZONE=Asia/Shanghai
TZ=Asia/Shanghai
EOF
⚠️ 重要:请务必修改密码和加密密钥为你自己的值!
Step 3:创建 docker-compose.yml
cat > docker-compose.yml << 'EOF'
version: '3.8'
services:
postgres:
image: postgres:15-alpine
container_name: n8n-postgres
restart: always
environment:
- POSTGRES_USER=${POSTGRES_USER}
- POSTGRES_PASSWORD=${POSTGRES_PASSWORD}
- POSTGRES_DB=${POSTGRES_DB}
volumes:
- ./postgres-data:/var/lib/postgresql/data
healthcheck:
test: ["CMD-SHELL", "pg_isready -U ${POSTGRES_USER} -d ${POSTGRES_DB}"]
interval: 10s
timeout: 5s
retries: 5
networks:
- n8n-network
n8n:
image: docker.n8n.io/n8nio/n8n:1.123.5
container_name: n8n
restart: always
depends_on:
postgres:
condition: service_healthy
environment:
# 数据库连接
- DB_TYPE=postgresdb
- DB_POSTGRESDB_HOST=postgres
- DB_POSTGRESDB_PORT=5432
- DB_POSTGRESDB_DATABASE=${POSTGRES_DB}
- DB_POSTGRESDB_USER=${POSTGRES_USER}
- DB_POSTGRESDB_PASSWORD=${POSTGRES_PASSWORD}
# n8n 配置
- N8N_HOST=${N8N_HOST}
- N8N_PORT=${N8N_PORT}
- N8N_PROTOCOL=${N8N_PROTOCOL}
- NODE_ENV=production
- N8N_ENCRYPTION_KEY=${N8N_ENCRYPTION_KEY}
# Webhook URL(用于外部回调)
- WEBHOOK_URL=https://${N8N_HOST}/
# 时区
- GENERIC_TIMEZONE=${GENERIC_TIMEZONE}
- TZ=${TZ}
# 性能优化
- EXECUTIONS_DATA_PRUNE=true
- EXECUTIONS_DATA_MAX_AGE=168
- EXECUTIONS_DATA_SAVE_ON_ERROR=all
- EXECUTIONS_DATA_SAVE_ON_SUCCESS=none
# 安全配置
- N8N_COMMUNITY_PACKAGES_ALLOW_TOOL_USAGE=true
volumes:
- ./n8n-data:/home/node/.n8n
networks:
- n8n-network
healthcheck:
test: ["CMD", "wget", "-q", "--spider", "http://localhost:5678/healthz"]
interval: 30s
timeout: 10s
retries: 3
nginx:
image: nginx:alpine
container_name: n8n-nginx
restart: always
ports:
- "80:80"
- "443:443"
volumes:
- ./nginx/nginx.conf:/etc/nginx/nginx.conf:ro
- ./nginx/certs:/etc/nginx/certs:ro
depends_on:
- n8n
networks:
- n8n-network
networks:
n8n-network:
driver: bridge
EOF
Step 4:创建 Nginx 配置
cat > nginx/nginx.conf << 'EOF'
events {
worker_connections 1024;
}
http {
upstream n8n {
server n8n:5678;
}
# HTTP -> HTTPS 重定向
server {
listen 80;
server_name n8n.yourdomain.com;
return 301 https://$server_name$request_uri;
}
# HTTPS 配置
server {
listen 443 ssl http2;
server_name n8n.yourdomain.com;
# SSL 证书(请替换为你的证书路径)
ssl_certificate /etc/nginx/certs/fullchain.pem;
ssl_certificate_key /etc/nginx/certs/privkey.pem;
# SSL 安全配置
ssl_protocols TLSv1.2 TLSv1.3;
ssl_ciphers HIGH:!aNULL:!MD5;
ssl_prefer_server_ciphers on;
# 代理配置
location / {
proxy_pass http://n8n;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
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;
# Webhook 长连接支持
proxy_read_timeout 300s;
proxy_connect_timeout 75s;
}
}
}
EOF
Step 5:申请 SSL 证书
使用 Let’s Encrypt 免费证书(需要先将域名解析到服务器):
# 安装 certbot
sudo apt install certbot -y
# 申请证书(先停止 nginx 或使用 webroot 模式)
sudo certbot certonly --standalone -d n8n.yourdomain.com
# 复制证书到项目目录
sudo cp /etc/letsencrypt/live/n8n.yourdomain.com/fullchain.pem ./nginx/certs/
sudo cp /etc/letsencrypt/live/n8n.yourdomain.com/privkey.pem ./nginx/certs/
sudo chown -R $USER:$USER ./nginx/certs/
Step 6:启动所有服务
# 启动
docker compose up -d
# 查看状态
docker compose ps
# 应该看到三个服务都是 running/healthy 状态
Step 7:访问并测试
- 浏览器访问
https://n8n.yourdomain.com - 设置管理员账号
- 创建一个简单的工作流测试
部署后的必做配置
1. 设置证书自动续期
# 创建续期脚本
cat > ~/n8n-production/renew-cert.sh << 'EOF'
#!/bin/bash
cd ~/n8n-production
certbot renew --quiet
cp /etc/letsencrypt/live/n8n.yourdomain.com/fullchain.pem ./nginx/certs/
cp /etc/letsencrypt/live/n8n.yourdomain.com/privkey.pem ./nginx/certs/
docker compose restart nginx
EOF
chmod +x ~/n8n-production/renew-cert.sh
# 添加定时任务(每月 1 号凌晨 3 点执行)
(crontab -l 2>/dev/null; echo "0 3 1 * * ~/n8n-production/renew-cert.sh") | crontab -
2. 设置数据库备份
cat > ~/n8n-production/backup.sh << 'EOF'
#!/bin/bash
BACKUP_DIR=~/n8n-backups/$(date +%Y%m%d)
mkdir -p $BACKUP_DIR
cd ~/n8n-production
# 备份数据库
docker compose exec -T postgres pg_dump -U n8n n8n > $BACKUP_DIR/n8n-db.sql
# 备份 n8n 数据目录
cp -r ./n8n-data $BACKUP_DIR/
# 保留最近 7 天的备份
find ~/n8n-backups -type d -mtime +7 -exec rm -rf {} + 2>/dev/null
echo "Backup completed: $BACKUP_DIR"
EOF
chmod +x ~/n8n-production/backup.sh
# 每天凌晨 2 点自动备份
(crontab -l 2>/dev/null; echo "0 2 * * * ~/n8n-production/backup.sh") | crontab -
3. 开放防火墙端口
# 如果使用 UFW
sudo ufw allow 80/tcp
sudo ufw allow 443/tcp
# 如果使用云服务器,记得在安全组也开放 80 和 443 端口
踩坑记录:小禾替你踩过的坑
坑 1:时区不对,定时任务抽风
现象:设置的定时任务执行时间不对,比如设置早上 9 点执行,结果凌晨 1 点就跑了。
原因:n8n 容器默认使用 UTC 时区。
解决:
environment:
- GENERIC_TIMEZONE=Asia/Shanghai
- TZ=Asia/Shanghai
坑 2:Webhook 收不到回调
现象:配置了 Webhook,但外部服务回调不成功。
原因:WEBHOOK_URL 没配置或配置错误。
解决:
environment:
- WEBHOOK_URL=https://n8n.yourdomain.com/
坑 3:社区节点安装失败
现象:想安装社区节点,但一直失败。
原因:n8n 默认禁止了一些可能有风险的操作。
解决:
environment:
- N8N_COMMUNITY_PACKAGES_ALLOW_TOOL_USAGE=true
坑 4:执行历史太多,数据库爆了
现象:运行一段时间后,数据库越来越大,甚至磁盘满了。
解决:配置执行记录自动清理
environment:
- EXECUTIONS_DATA_PRUNE=true
- EXECUTIONS_DATA_MAX_AGE=168 # 保留 7 天
- EXECUTIONS_DATA_SAVE_ON_SUCCESS=none # 成功的执行不保存详情
坑 5:容器重启后数据没了
现象:用方案 A 快速体验后,重启容器数据全没了。
原因:没挂载数据卷。
解决:使用方案 B 或 C,确保有 volumes 配置。
快速避坑清单
# 1. 检查服务状态
docker compose ps
# 2. 查看日志排错
docker compose logs -f n8n
# 3. 进入容器调试
docker compose exec n8n sh
# 4. 检查数据库连接
docker compose exec postgres psql -U n8n -d n8n -c "SELECT 1"
# 5. 检查磁盘空间
df -h
# 6. 检查内存使用
free -h
# 7. 重启所有服务
docker compose restart
# 8. 更新版本(注意先查看 Release Notes)
# 修改 docker-compose.yml 中的版本号,然后:
docker compose pull && docker compose up -d
第一个工作流:体验"真香"时刻
部署完成后,让我们创建第一个工作流来体验一下 n8n 的魅力。
示例:每日天气通知
- 点击右上角 “Add workflow” 创建新工作流
- 添加 Schedule Trigger 节点,设置每天早上 8 点触发
- 添加 HTTP Request 节点,调用天气 API
- 添加 Code 节点,格式化数据
- 添加 Send Email 或 HTTP Request(发到企业微信/钉钉)节点
这样,每天早上你就能收到天气预报了。这只是冰山一角,n8n 能做的事情远超你的想象!
彩蛋:n8n 2.0 来了!
2025 年 12 月 5 日,n8n 发布了 2.0 版本,这是一个重要的安全加固版本:
| 变化 | 说明 |
|---|---|
| 任务运行器默认启用 | 所有代码节点在隔离环境中执行,更安全 |
| 环境变量保护 | Code 节点无法直接访问环境变量 |
| 危险节点禁用 | 允许执行任意命令的节点默认禁用 |
| 性能优化 | 高负载下表现更好 |
💡 n8n 1.x 版本将在 2.0 发布后继续维护 3 个月(仅安全和 bug 修复),如果你追求稳定,可以继续使用本文的 1.123.5 版本;如果你想尝鲜,可以把镜像标签改为
2.0.1或latest。
写在最后:自动化是解放生产力的第一步
从接到老板的任务到部署完成,小禾只用了一个下午。而这个一下午的投入,换来的是未来无数个小时的解放。
现在,每天早上 9 点,销售数据自动汇总发到群里;新客户注册后,欢迎邮件自动发出;GitHub 有新 issue,钉钉立刻通知。
老板问小禾:“小禾,最近效率挺高啊,是不是偷偷请了助理?”
小禾微微一笑:“是的老板,我请了个 7×24 小时不休息的机器人助理,它叫 n8n。”
如果你也想拥有这样一个永不疲倦的数字助理,现在就动手部署吧!有问题欢迎留言交流。
参考资料:
- n8n 官方文档 - Docker 部署
- n8n GitHub Releases
- n8n 2.0 发布公告
- 测试环境:Ubuntu 22.04 / Docker 27.x / n8n 1.123.5
📚 本文是「AI 基础设施部署」合集的重要篇章。 如果你对私有化部署 AI 应用感兴趣,欢迎 👉 查看「AI 基础设施部署」完整合集,从基础环境搭建到各类 AI 服务部署,一步步构建你的 AI 城堡。
更多推荐


所有评论(0)