基于AWS部署n8n并使用Google Sheets

287 阅读10分钟

总览

分五个阶段完成所有工作:

  1. 第一阶段:准备云服务器 - 在亚马逊AWS上启动一台EC2服务器,并为其分配一个固定的公网IP地址。

  2. 第二阶段:配置专属域名 - 将您自己的域名指向这台服务器,这是实现HTTPS安全访问的基础。

  3. 第三阶段:安装并运行n8n - 使用最推荐的Docker方式安装n8n,并挂载数据文件夹以防数据丢失。

  4. 第四阶段:启用HTTPS安全访问 - 安装并配置Nginx作为反向代理,并使用Let's Encrypt申请免费的SSL证书,解决浏览器安全访问问题。

  5. 第五阶段:集成Google Sheets - 在n8n中连接您的Google账户,实现对Google Sheets的自动化操作。


第一阶段:准备云服务器 (EC2)

目标: 拥有一台有固定公网IP的、可以从外网访问的云服务器。

  1. 登录AWS管理控制台

    • 打开浏览器,访问您的AWS管理控制台。
  2. 启动EC2实例(服务器)

    • 在顶部的搜索栏中输入 EC2,然后进入EC2服务页面。

    • 点击“启动实例”按钮。

    • 名称:给您的服务器起一个好记的名字,例如 n8n-server

    • 应用程序和操作系统映像(AMI):选择 “Amazon Linux”,并确保版本是 Amazon Linux 2023 或更高。这是一个免费且稳定的选项。

    • 实例类型:选择 t2.microt3.micro,这两种都符合AWS的免费套餐资格,对于n8n初期使用完全足够。

    • 密钥对(用于登录)这一步对于本教程不那么重要,因为我们将使用浏览器直接连接。但为了完整性,您可以点击“创建新密钥对”,输入一个名字并创建,然后将下载的 .pem 文件保存好。

    • 网络设置

      • 点击“编辑”。

      • 找到“安全组”,这是一个虚拟防火墙。点击“创建安全组”。

      • 在“入站安全组规则”部分,AWS默认会有一条允许SSH(端口22)访问的规则。我们需要额外添加三条:

        • 规则1 (用于n8n初始访问):点击“添加规则”,类型选择“自定义TCP”,端口范围填 5678,源选择 任何位置 (0.0.0.0/0)。 11

        • 规则2 (用于HTTP):点击“添加规则”,类型选择“HTTP”,源选择 任何位置 (0.0.0.0/0)。这会自动开放80端口。

        • 规则3 (用于HTTPS):点击“添加规则”,类型选择“HTTPS”,源选择 任何位置 (0.0.0.0/0)。这会自动开放443端口。

    • 确认所有配置后,点击右下角的“启动实例”。

  3. 分配并绑定固定公网IP(弹性IP)

    • EC2实例重启后公网IP会变动,这对于域名访问是致命的。我们需要一个固定的IP。

    • 在EC2服务页面的左侧菜单中,找到并点击“弹性 IP”。

    • 点击“分配弹性IP地址”,直接在下一个页面点击“分配”。

    • 现在您有了一个固定的IP地址。选中这个地址,点击右上角的“操作”,然后选择“关联弹性IP地址”。

    • 在“实例”下拉菜单中,选择您刚刚创建的 n8n-server 实例。

    • 点击“关联”。 2

至此,您已经拥有了一台配置好防火墙和固定公网IP的服务器。记下这个弹性IP地址,下一步会用到。


第二阶段:配置专属域名

目标: 让您的域名(例如 n8n.yourdomain.com)指向您的服务器IP。

  1. 购买域名(如果您还没有)

    • 您可以在任何域名注册商(如Namecheap, GoDaddy, 阿里云, 腾讯云)购买一个域名。本教程以

      yourdomain.com 为例。 3

  2. 在AWS Route 53中管理域名(推荐)

    • 在AWS控制台顶部搜索 Route 53 并进入。

    • 在左侧菜单点击“托管区域”,然后点击“创建托管区域”。

    • 域名:输入您的主域名,例如 yourdomain.com

    • 类型:选择“公有托管区域”。

    • 点击“创建托管区域”。

    • 创建后,您会看到两条记录:

      NSSOA。记下 NS 记录中的四个值(名称服务器地址),类似 ns-xxx.awsdns-xx.com。 4

  3. 在域名注册商处修改DNS服务器

    • 回到您购买域名的网站(例如Namecheap)。

    • 找到该域名的管理页面,寻找“DNS”或“Nameservers”设置。

    • 将其从“默认DNS”或“基础DNS”修改为“自定义DNS (Custom DNS)”。 5

    • 将上一步在Route 53中获得的四个NS服务器地址,逐一填入。 6

    • 保存设置。(注意:DNS全球生效需要几分钟到48小时不等)

  4. 在Route 53中创建A记录,将域名指向服务器

    • 回到AWS的Route 53托管区域页面。

    • 点击“创建记录”。

    • 记录名称:输入 n8n。(这样您的访问地址就是 n8n.yourdomain.com

    • 记录类型:选择 A

    • :填入您在第一阶段获得的弹性IP地址

    • 点击“创建记录”。 7

至此,您的域名已经配置完成。等待DNS生效后,访问 n8n.yourdomain.com 就会连接到您的服务器。


第三阶段:安装并运行n8n (Docker)

目标: 在服务器上运行n8n,并确保数据安全。

  1. 连接到您的EC2服务器

    • 回到EC2实例列表页面,选中您的 n8n-server 实例。

    • 点击页面顶部的“连接”按钮。

    • 保持默认选项“EC2实例连接”,然后点击“连接”。

    • 一个黑色的命令行窗口会在您的浏览器中打开,您现在已经登录到服务器上了。

  2. 安装Docker

    • 在打开的命令行窗口中,复制并粘贴以下命令,然后按回车。这会更新系统并安装Docker。 88

      Bash

      sudo yum update -y
      sudo yum install -y docker
      
    • 启动Docker并设置为开机自启:

      Bash

      sudo systemctl enable docker
      sudo systemctl start docker
      
    • 允许当前用户使用Docker(无需每次都输入sudo):

      Bash

      sudo usermod -aG docker ec2-user
      
    • 重要:执行完上一条命令后,关闭这个浏览器连接窗口,然后重新点击“连接”按钮进入,以使权限变更生效。

  3. 创建用于存放n8n数据的文件夹

    • 为了防止n8n容器被删除后工作流和凭证丢失,我们需要把数据保存在服务器上。 9

    • 在命令行中执行:

      Bash

      mkdir -p /home/ec2-user/n8n-data
      
  4. 运行n8n容器

    • 这是最关键的一步。复制以下所有代码,粘贴到命令行窗口并回车。

    • 请务必将 n8n.yourdomain.com 替换为您自己的真实域名! 10

      Bash

      docker run -d \
      --name n8n \
      -p 5678:5678 \
      -v /home/ec2-user/n8n-data:/home/node/.n8n \
      -e N8N_HOST="n8n.yourdomain.com" \
      -e N8N_PROTOCOL="https" \
      -e WEBHOOK_URL="https://n8n.yourdomain.com/" \
      --restart unless-stopped \
      n8nio/n8n
      
    • 命令解释

      • -d: 后台运行

      • --name n8n: 给容器取名叫n8n

      • -p 5678:5678: 将服务器的5678端口映射到容器的5678端口 1111

      • -v ...: 将服务器上的 /home/ec2-user/n8n-data 文件夹挂载到容器内的 /home/node/.n8n 目录,用于持久化数据 121212

      • -e ...: 设置环境变量,告诉n8n它将通过HTTPS和指定的域名被访问 13

      • --restart unless-stopped: 保证容器在异常退出或服务器重启后能自动重启 14141414

  5. 验证n8n是否在运行

    • 执行命令:

      docker ps。 15

    • 如果您看到一行关于

      n8n 的信息,且状态(STATUS)为 Up,说明n8n已成功运行。 16


第四阶段:启用HTTPS安全访问 (Nginx)

目标: 解决浏览器 "不安全" 的提示和 "Secure Cookie" 的错误。 17

  1. 安装Nginx

    • 在命令行中执行(Amazon Linux 2023使用

      dnf): 18

      Bash

      sudo dnf install nginx -y
      
  2. 配置Nginx作为反向代理

    • 我们需要让Nginx接收所有来自域名的访问,然后转发给在5678端口运行的n8n。

    • 创建一个Nginx配置文件:

      Bash

      sudo nano /etc/nginx/conf.d/n8n.conf
      
    • 这会打开一个文本编辑器。将下面的配置内容复制粘贴进去。

    • 同样,将 n8n.yourdomain.com 替换为您自己的域名! 19191919

      Nginx

      server {
          listen 80;
          server_name n8n.yourdomain.com;
      
          location / {
              proxy_pass http://localhost:5678;
              proxy_http_version 1.1;
              proxy_set_header Upgrade $http_upgrade;
              proxy_set_header Connection 'upgrade';
              proxy_set_header Host $host;
              proxy_cache_bypass $http_upgrade;
          }
      }
      
    • 按下 Ctrl + X,然后按 Y,最后按回车,保存并退出编辑器。

  3. 安装Certbot并申请SSL证书

    • Certbot是一个可以自动申请和配置Let's Encrypt免费SSL证书的工具。

    • 安装Certbot及其Nginx插件: 20

      Bash

      sudo dnf install certbot python3-certbot-nginx -y
      
    • 运行Certbot,它会自动识别您的Nginx配置并申请证书:

      Bash

      sudo certbot --nginx -d n8n.yourdomain.com
      
    • 过程

      • 它会要求您输入邮箱地址(用于接收证书过期提醒)。

      • 同意服务条款。

      • 它会问您是否愿意分享您的邮箱,可以选N (No)。

      • Certbot会自动完成验证,并询问是否将所有HTTP访问重定向到HTTPS,强烈推荐选择 Redirect (通常是选项2)。

  4. 启动Nginx并设置自动续期

    • 启动Nginx服务:

      Bash

      sudo systemctl start nginx
      sudo systemctl enable nginx
      
    • Let's Encrypt证书有效期为90天,Certbot已经为您设置好了自动续期,无需手动操作。

至此,您已完成所有服务器配置! 在浏览器中输入 https://n8n.yourdomain.com,您应该能看到n8n的初始化设置界面,并且浏览器地址栏会显示一把安全锁。


第五阶段:集成Google Sheets

目标: 在n8n中授权并使用Google Sheets节点。

  1. 进入Google Cloud Platform (GCP) 控制台

    • 用您的Google账户登录 Google Cloud Console

    • 如果这是您第一次使用,请同意服务条款。

    • 在页面顶部,点击项目选择器(可能显示“My First Project”),然后点击“新建项目”。

    • 输入项目名称(例如 n8n-integration)并创建。

  2. 启用所需的API

    • 确保您处于刚才创建的项目中。

    • 在左上角的导航菜单中,选择“API和服务” -> “库”。

    • 搜索并启用以下两个API:

      • Google Sheets API

      • Google Drive API (n8n需要此API来发现文件)

  3. 创建OAuth凭证

    • 在左侧菜单中,选择“API和服务” -> “OAuth同意屏幕”。

      • 选择“外部”,然后点击“创建”。

      • 应用名称n8n

      • 用户支持电子邮件:选择您的邮箱。

      • 开发者联系信息:再次输入您的邮箱。

      • 点击“保存并继续”,接下来的“范围”和“测试用户”步骤可以直接跳过,点击“保存并继续”和“返回信息中心”。

    • 现在,在左侧菜单中选择“凭据”。

      • 点击页面顶部的“+ 创建凭据”,选择“OAuth客户端ID”。

      • 应用类型:选择“Web应用”。

      • 名称:可以保留默认值或填 n8n-credential

      • 已获授权的重定向URI:这是最关键的一步。点击“+ 添加URI”,然后输入以下地址(务必将 n8n.yourdomain.com 换成您自己的域名):

        https://n8n.yourdomain.com/rest/oauth2-credential/callback
        
      • 点击“创建”。

  4. 获取客户端ID和密钥

    • 创建后,一个弹窗会显示您的“客户端ID”和“客户端密钥”。复制并妥善保管这两个值
  5. 在n8n中添加Google Sheets凭证

    • 回到您的n8n界面 (https://n8n.yourdomain.com)。

    • 在左侧菜单中点击“Credentials”,然后点击“Add credential”。

    • 搜索 Google Sheets 并选择它。

    • 将刚刚从Google Cloud复制的“客户端ID”和“客户端密钥”粘贴到对应的输入框中。

    • 点击“Sign in with Google”。

    • 一个Google登录窗口会弹出,登录您的账户,并授权n8n访问您的Google Sheets数据。

    • 授权成功后,窗口会自动关闭,您的凭证就保存好了。