AWS上的n8n自托管堆栈
一个全面的AWS CloudFormation模板,可自动部署一个完整的n8n工作流自动化平台,并提供其他服务,包括Selenium WebDriver和n8n MCP服务器集成。
🚀 特性
- 全自动部署:使用AWS CloudFormation进行一键部署
- n8n工作流自动化:使用PostgreSQL数据库完成n8n实例
- Selenium WebDriver:用于web自动化和测试工作流
- n8n MCP服务器:用于工作流管理的AI助手集成(可在以下网址访问
/custom-mcp) - Caddy反向代理:带SSL证书的自动HTTPS
- 自定义域支持:在您自己的域名上提供n8n
- 安全:适当的安全组和可配置的秘密
- 可扩展的:基于AWS基础设施构建
📋 先决条件
在部署此堆栈之前,请确保您已经:
- AWS帐户:具有创建CloudFormation堆栈、EC2实例和其他AWS资源的足够权限
- S3铲斗:保存CloudFormation模板文件(AWS可以为您创建一个,但拥有自己的bucket可以避免尴尬的自动生成名称)
- 域名:您要托管n8n的域名(例如。,
n8n.yourdomain.com或automation.yourdomain.com) - DNS提供商:访问配置DNS记录(Cloudflare、Route53等)-建议使用Cloudflare
- n8n API密钥:部署后,您需要在n8n实例中生成此内容
🏗️ 建筑
此堆栈创建以下AWS资源:
- EC2实例:使用Docker和Docker Compose的亚马逊Linux 2023
- 弹性IP:n8n实例的静态IP地址
- 安全组:配置为HTTP、HTTPS、SSH、n8n(5678)和Selenium(4444)
- 匿名函数:用于自动创建和管理SSH密钥对
- SSM参数存储:SSH私钥的安全存储
🚀 快速开始
“绿色大按钮”方法
跟随 Saurabh哲学,这个堆栈被设计成一个“绿色大按钮”——你按下它,一切都会自动完成。不再需要手动设置步骤、调试或配置麻烦。
步骤1:部署CloudFormation堆栈
- 上传模板:上传
aws-stack.yaml文件到S3存储桶 - 创建堆栈:使用CloudFormation控制台创建新堆栈
- 配置参数:
- DomainName:您的域名(例如。, n8n.yourdomain.com 或 automation.yourdomain.com) - WebhookUrl:您的webhook URL(例如。, https://n8n.yourdomain.com/) - N8nEncryptionKey:用于n8n加密的安全随机字符串 - N8nJwtSecret:用于JWT身份验证的安全随机字符串 - N8nApiKey:n8n API密钥(在部署后生成)
步骤2:配置DNS(关键步骤)
重要:此步骤最好在启动CloudFormation堆栈后立即执行,以允许DNS解析在Caddy启动并运行时稳定下来。
- 获取弹性IP:从CloudFormation输出中复制弹性IP地址(几乎立即可用)
- 创建记录:在您的DNS提供商(如Cloudflare)中,创建一个A记录,将您的域指向弹性IP
- 设置域名解析:使用“仅DNS”设置, 未代理 -这对Caddy正常工作至关重要
- 等待传播DNS更改可能需要长达48小时(通常要快得多)
步骤3:访问您的n8n实例
大约10分钟后(EC2上的设置时间),您的n8n实例将在以下位置可用:
- n8n接口:
https://your-domain.com - Selenium WebDriver:
http://elastic-ip:4444 - n8n MCP服务器:
https://your-domain.com/custom-mcp
瞧! 就是这样——不再需要调试,不再需要配置麻烦。就像 Saurabh的经历,第一次应该能顺利工作。
🔧 配置
MCP服务器配置
n8n MCP服务器可以通过两种方式配置: 服务器上的HTTP模式 或 本地Docker模式每种方法都有不同的用例和局限性。
选项1:本地Docker模式(建议用于桌面客户端)
最适合:游标、Claude Desktop和其他桌面MCP客户端
这种方法使用Docker容器在本地运行MCP服务器。每个MCP客户端会话都有自己的容器实例,提供真正的多会话支持。
优势:
- ✅ 多个会话 -每个客户端会话都有自己的容器
- ✅ 无身份验证 -不需要Bearer代币
- ✅ 自动清理 -会话结束时,容器将被删除
- ✅ 无服务器端设置 -适用于任何n8n实例
- ✅ 隔离 -每个会话都是完全独立的
配置:
{
"mcpServers": {
"n8n": {
"command": "docker",
"args": [
"run", "-i", "--rm", "--init",
"-e", "N8N_API_URL=https://your-domain.com/api/v1",
"-e", "N8N_API_KEY=your-n8n-api-key",
"ghcr.io/czlonkowski/n8n-mcp:latest"
]
}
}
}它是如何工作的:
- 光标开始 → 创建一个新的Docker容器
- 集装箱运行 → 处于stdio模式的n8n mcp服务器
- API连接 → 连接到n8n实例
- 会话结束 → 容器自动移除(
--rm旗帜) - 新会话 → 干净状态的新鲜容器
选项2:HTTP服务器模式(适用于Web客户端)
最适合:基于Web的MCP客户端、简单的部署、单用户场景
MCP服务器在n8n服务器上以HTTP模式运行,可通过您的域访问。
限制:
- ❌ 仅限单次会话 -一次只能连接一个客户端
- ❌ 需要认证 -需要承载令牌
- ❌ 服务器端设置 -需要Caddy路由配置
- ❌ 会话冲突 -多个客户端出现“服务器已初始化”错误
配置:
对于游标(HTTP模式):
{
"mcpServers": {
"n8n": {
"command": "curl",
"args": [
"-X", "POST",
"-H", "Content-Type: application/json",
"-H", "Accept: application/json, text/event-stream",
"-H", "Authorization: Bearer n8n-mcp-secure-token-55e2c81fceb0",
"https://your-domain.com/custom-mcp/mcp",
"-d", "@-"
],
"env": {
"N8N_API_URL": "https://your-domain.com/api/v1",
"N8N_API_KEY": "your-n8n-api-key"
}
}
}
}对于Claude Desktop(HTTP模式):
{
"mcpServers": {
"n8n": {
"command": "curl",
"args": [
"-X", "POST",
"-H", "Content-Type: application/json",
"-H", "Accept: application/json, text/event-stream",
"-H", "Authorization: Bearer n8n-mcp-secure-token-55e2c81fceb0",
"https://your-domain.com/custom-mcp/mcp",
"-d", "@-"
],
"env": {
"N8N_API_URL": "https://your-domain.com/api/v1",
"N8N_API_KEY": "your-n8n-api-key"
}
}
}
}方案3:地方发展
对于希望从源代码本地运行MCP服务器的开发人员:
git clone https://github.com/czlonkowski/n8n-mcp.git
cd n8n-mcp
npm install
npm run build
npm run start:http然后配置:
{
"mcpServers": {
"n8n": {
"command": "node",
"args": ["/path/to/n8n-mcp/dist/index.js"],
"env": {
"N8N_API_URL": "https://your-domain.com/api/v1",
"N8N_API_KEY": "your-api-key"
}
}
}
}选项4:本地Docker HTTP模式
您还可以使用Docker以HTTP模式在本地运行MCP服务器:
docker run -d \
--name n8n-mcp-local \
-p 3000:3000 \
-e MCP_MODE=http \
-e AUTH_TOKEN=your-custom-token \
-e N8N_API_URL=https://your-domain.com/api/v1 \
-e N8N_API_KEY=your-n8n-api-key \
ghcr.io/czlonkowski/n8n-mcp:latest然后配置您的MCP客户端以连接到 http://localhost:3000/mcp.
建议:
- 适用于桌面MCP客户端 (光标,克劳德桌面)→ Use 本地Docker模式
- 对于基于web的客户端 → Use HTTP服务器模式
- 为了发展 → Use 地方发展
注:
- 替换
your-domain.com使用您的实际域名 - 替换
your-n8n-api-key使用实际n8n API密钥 - 可以通过修改以下内容来更改HTTP模式身份验证令牌
AUTH_TOKENAWS堆栈中的环境变量 - MCP服务器端点为
/custom-mcp/mcp(不只是/custom-mcp)
可用的MCP工具:
这 克朗考斯基/n8n mcp 服务器提供了全面的工具:
核心工具
tools_documentation-获取任何MCP工具的文档list_nodes-列出所有具有筛选选项的n8n节点get_node_info-获取特定节点的全面信息get_node_essentials-仅通过示例获取基本属性search_nodes-在所有节点文档中进行全文搜索validate_node_operation-验证节点配置validate_workflow-完成工作流验证
n8n管理工具(配置API时)
n8n_create_workflow-使用节点和连接创建新的工作流n8n_get_workflow-按ID获取完整的工作流程n8n_update_full_workflow-更新整个工作流程n8n_delete_workflow-永久删除工作流n8n_list_workflows-列出具有过滤和分页功能的工作流n8n_trigger_webhook_workflow-通过webhook URL触发工作流n8n_get_execution-按ID获取执行详细信息n8n_list_executions-列出执行情况并进行状态筛选
环境变量
堆栈会自动配置以下环境变量:
POSTGRES_USER=n8n
POSTGRES_PASSWORD=n8n
POSTGRES_DB=n8n
N8N_ENCRYPTION_KEY=your-encryption-key-here
N8N_USER_MANAGEMENT_JWT_SECRET=your-jwt-secret-here
N8N_PAYLOAD_SIZE_MAX=100
NODE_FUNCTION_ALLOW_EXTERNAL=node-fetch
WEBHOOK_URL=https://your-domain.com/
N8N_API_KEY=your-n8n-api-key-here服务包括
- n8n:主要工作流自动化平台
- PostgreSQL:n8n数据数据库
- 硒:用于web自动化的WebDriver
- n8n MCP服务器:AI助手集成
- 卡迪:使用自动HTTPS反向代理
🔐 安全
- SSH访问:私钥安全地存储在AWS SSM参数存储中
- 安全组:仅打开必要的端口(22、80、443、5678、4444)
- 超文本传输安全协议:通过Caddy自动获得SSL证书
- 可配置的秘密:可以自定义加密密钥和JWT密钥
📊 监测和管理
CloudFormation 输出
堆栈提供以下输出:
CaddyDomain:您的n8n URLSeleniumUrl:Selenium WebDriver URLElasticIP:静态IP地址McpServerInfo:MCP服务器可在以下位置访问/custom-mcp端点KeyDownloadCommand:下载SSH密钥的AWS CLI命令
SSH访问
要通过SSH访问EC2实例:
# Download the SSH private key
aws ssm get-parameter --name /ec2/privateKey/n8n-automatic-EC2-PemFile --with-decryption --query Parameter.Value --output text > n8n-automatic-EC2-PemFile.pem
# Set proper permissions
chmod 400 n8n-automatic-EC2-PemFile.pem
# Connect to the instance
ssh -i n8n-automatic-EC2-PemFile.pem ec2-user@your-elastic-ip🛠️ 故障排除
常见问题
- DNS无法解析:等待DNS传播或检查DNS配置
- HTTPS不工作:确保您的DNS A记录未被代理(仅DNS)-这对Caddy正常工作至关重要
- 服务未启动:检查Docker日志:
docker compose logs - API关键问题:在n8n设置中生成新的API密钥
- 浏览器安全警告:如果您看到“不安全”警告,请确保您使用的是HTTPS和正确的DNS配置
MCP服务器故障排除
- 502网关故障:MCP服务器容器可能未运行。请检查:
docker ps | grep n8n-mcp-server
docker logs n8n-mcp-server- 身份验证错误:确保您的MCP客户端包含正确的Bearer令牌:
curl -H "Authorization: Bearer n8n-mcp-secure-token-55e2c81fceb0" https://your-domain.com/custom-mcp/mcp- 错误的端点:确保你正在使用
/custom-mcp/mcp(不只是/custom-mcp)
- 球童路线问题:重新启动Caddy容器以应用配置更改:
docker compose restart caddy- MCP服务器未启动:检查环境变量是否正确:
docker exec n8n-mcp-server env | grep -E "(MCP_MODE|AUTH_TOKEN|PORT)"有用的命令
# Check service status
docker compose ps
# View logs
docker compose logs n8n
docker compose logs selenium
docker compose logs n8n-mcp-server
# Restart services
docker compose restart
# Update n8n
docker compose pull n8n
docker compose up -d n8n💰 成本考虑
此堆栈创建了以下可计费资源:
- EC2实例:t4g.micro(约8-12美元/月)
- 弹性IP:连接到正在运行的实例时免费
- EBS存储:30GB gp3容量(约3美元/月)
- 数据传输:根据使用情况而有所不同
预计每月成本:10-15美元
小心:由于创建了资源,AWS将开始相应地向您收费。请注意这一点,如果您不再使用该设置,请删除堆栈。
🧹 清理
为避免持续收费,请在完成以下操作后删除CloudFormation堆栈:
- 转到AWS CloudFormation控制台
- 选择您的堆栈
- 点击“删除”并确认
这将删除所有创建的资源。
🤝 贡献
这个项目基于几个开源贡献。请随时提交问题或拉取请求以改进堆栈。
📄 许可证
该项目根据MIT许可证获得许可。
🙏 致谢
这个堆栈建立在几个了不起的开发人员和项目的工作之上:
核心技术
原始AWS堆栈
- Saurabh Sawhney:为n8n部署创建了原始的AWS CloudFormation模板,并引入了“绿色大按钮”概念——将所有繁琐的设置步骤自动化到一个单一、流畅的部署中。这个堆栈基于他出色的工作,并在保持其简单性和自动化理念的同时,扩展了其他功能。
n8n MCP服务器集成
- 伦纳德·塞勒姆:开发了n8n MCP服务器,使AI助手能够与n8n工作流进行交互。这种集成允许强大的AI驱动的工作流管理和自动化。
附加功能
- 硒集成:添加了web自动化功能
- 增强的安全性:改进了安全组配置
- 自定义环境:可配置的环境变量和秘密
📞 支持
如果您遇到问题或有疑问:
- 检查上面的故障排除部分
- 查看n8n文档:https://docs.n8n.io/
- 查看原始AWS堆栈指南:https://saurabh-sawhney.medium.com/self-hosting-the-workflow-automation-tool-n8n-on-aws-ec2-d4d2abf06282
- 查看MCP服务器文档:https://github.com/leonardsellem/n8n-mcp-server
______________________________________________________________________
备注:此堆栈专为开发和测试环境而设计。对于生产使用,请考虑其他安全措施、监控和备份策略。
