让我们在 EC2 实例上部署 n8n 🚀🚀🚀
Source: Dev.to
我真的很喜欢自动化
我一直热衷于在工作流中实现自动化。当我偶然发现 n8n 时,真的惊叹不已。之前的各种想法——比如更新 Google 表格、发布社交媒体、托管自己的 API、将 Google Drive 同步到 S3 桶等等——在不需要为每个任务学习新框架或库的情况下变得可行。n8n 让构建能够真正投入使用、帮助日常工作的“小自动化”变得更容易,这也是我爱上它的原因。
下面是一份在 AWS EC2 实例上部署 n8n 的分步指南,帮助你在自己的基础设施上运行自动化。
1. 创建 EC2 实例
-
登录 AWS 管理控制台,进入 EC2 Dashboard。
-
点击 Launch instance。
-
Name – 为实例起一个易于辨识的名称,例如
n8n。 -
Application and OS Images (AMI) – 选择 Amazon Linux 2023 AMI(符合免费套餐)。
-
Architecture – 选择 64-bit (ARM),成本更低(Graviton 处理器)。
-
Instance type – 本教程使用 t4g.medium(2 vCPU,4 GB RAM)。
为什么选 t4g.medium?
- 与同类 x86 实例相比,性价比提升约 40%。
- 对于带有多个 worker 的 n8n 足够。
- 支持 CPU 积分的突发性能。
- 成本比 t3.medium 低约 40%。
- 适合生产环境(不同于 t4g.micro)。
实例 vCPU RAM 典型用途 t4g.micro 1 1 GB 仅限免费套餐,资源受限 t4g.medium 2 4 GB 小型‑中型部署(推荐) t4g.large 2 8 GB 高并发工作流 -
Key pair (login) – 选择已有密钥对或创建新密钥对。SSH 登录需要它。
-
Network settings – 新建安全组并添加以下入站规则:
规则 端口 协议 来源 用途 SSH 22 TCP 你的 IP(或仅用于测试的 0.0.0.0/0)远程终端访问 HTTP 80 TCP 0.0.0.0/0Web 流量(重定向到 HTTPS) HTTPS 443 TCP 0.0.0.0/0n8n UI 的安全 Web 流量 -
Storage – 默认的 8 GiB gp3 卷足以满足基础安装。
-
Advanced details – 滚动到 User data 字段,粘贴下一节的脚本。
-
检查概览后点击 Launch instance。
2. 用户数据脚本(自动化设置)
将下面的脚本粘贴到 User data 文本框中。它会更新系统、安装 Git、Docker 与 Docker Compose,并配置 Docker 权限。
#!/bin/bash
yum install -y git docker
# Install Docker Compose plugin (system-wide)
mkdir -p /usr/local/lib/docker/cli-plugins
curl -SL "https://github.com/docker/compose/releases/latest/download/docker-compose-linux-$(uname -m)" \
-o /usr/local/lib/docker/cli-plugins/docker-compose
chmod +x /usr/local/lib/docker/cli-plugins/docker-compose
# Enable and start Docker
systemctl enable docker
systemctl start docker
# Allow ec2-user to run Docker without sudo
usermod -aG docker ec2-user
该脚本会在实例启动时自动执行,省去多步手动操作。
3. 连接到实例
- 在 EC2 控制台中选中正在运行的实例,点击 Connect。
- 选择 EC2 Instance Connect 选项卡,保持默认用户名
ec2-user,点击 Connect。 - 浏览器会打开基于网页的终端。验证 Docker Compose 是否安装成功:
docker compose --version
如果显示版本号,环境即已准备就绪。
4. 使用预配置仓库部署 n8n
git clone https://github.com/coozgan/hosting-n8n-aws.git
cd hosting-n8n-aws
该仓库提供了一个面向生产的 n8n 部署,包含:
- n8n workers – 异步工作流执行。
- Redis – 作业队列与重试处理。
- PostgreSQL – 持久化存储工作流、执行记录和用户数据。
- Caddy – 具备自动 SSL/TLS 证书的反向代理。
4.1 配置环境变量
cp .env-example .env
nano .env
在文件中添加(或编辑)以下变量:
# 域名配置
DOMAIN=your-domain.com # 若没有域名可使用 localhost
# n8n 加密(生成强随机密钥)
N8N_ENCRYPTION_KEY=YOUR_STRONG_KEY
# PostgreSQL 数据库
POSTGRES_PASSWORD=YOUR_POSTGRES_PASSWORD
# 时区
GENERIC_TIMEZONE=America/New_York
可选 – DuckDNS 域名(用于没有自定义域名的测试)
- 前往 https://www.duckdns.org 创建子域名。
- 将实例的公网 IP(使用
curl ifconfig.me获取)添加到 DuckDNS 记录。 - 在
.env中将DOMAIN设置为该 DuckDNS 子域名。
重要提示: 请妥善保存
N8N_ENCRYPTION_KEY与POSTGRES_PASSWORD。丢失后将无法恢复工作流或数据。
保存并退出(Ctrl+X,随后 Y 再回车)。
4.2 启动整个栈
docker compose up -d
检查所有容器是否在运行:
docker compose ps
实时查看日志,确保一切正常启动:
docker compose logs -f
5. 访问 n8n UI
- 使用自定义域名:
https://your-domain.com - 不使用域名(测试):
http://
此时应能看到 n8n 登录页面,创建你的第一个用户账号。
恭喜!你已经在 AWS 上成功部署了可用的 n8n 实例。
6. 扩容:添加更多 Worker
若需增加 worker 实例,编辑 docker-compose.yml,添加类似下面的条目:
n8n-worker-2:
extends: n8n-worker
container_name: n8n-worker-2
# 如有需要,可添加额外配置
n8n-worker-3:
extends: n8n-worker
container_name: n8n-worker-3
# 如有需要,可添加额外配置
随后重启栈:
docker compose up -d
7. 性能优化建议
| 建议 | 描述 |
|---|---|
| 调整 Worker 数量 | 先从 2–3 个 worker 开始,使用 docker stats 监控 CPU/内存使用情况。 |
| 数据库清理 | compose 文件已设置 EXECUTIONS_DATA_PRUNE=true(默认保留 7 天历史),如有需要可调 EXECUTIONS_DATA_MAX_AGE。 |
| Redis 内存 | Redis 限制为 512 MB,采用 LRU 驱逐策略。可通过 docker exec redis redis-cli info stats 监控。 |
8. 安全最佳实践
- 用户管理 – 确保
N8N_USER_MANAGEMENT_DISABLED=false(默认),为每位团队成员创建独立账号。 - 限制 SSH 访问 – 将安全组的 SSH 入口仅限于你的 IP 地址。
- 保管密钥 – 将
N8N_ENCRYPTION_KEY与POSTGRES_PASSWORD存放在安全的密码管理器或 AWS Secrets Manager 中。
祝自动化愉快!