top of page

LBSocial

如何在 Google Cloud 虚拟机上通过 Docker 安装 n8n(分步教程)

n8n 之所以备受推崇,是因为它让复杂的自动化变得触手可及。它提供了一个可视化的操作界面,让你能轻松连接各类 API、服务和 AI 工具,同时还保留了编写自定义代码和设计高级工作流逻辑的灵活性。


在本教程中,我们将带你实操完整的 n8n Google Cloud Docker 安装流程。为了保证系统的长期稳定与可扩展性,我们不会采用那种临时的快捷安装法,而是严格按照官方的部署路线,在已经运行 OpenClaw 智能体的虚拟机上从头构建一个安全、结构化的生产级环境。


Deploying n8n on Google Cloud via Docker: Step-by-Step Installation & Demo Workflow

💡 提示: 本教程视频已配有 中文音轨。如需收听,请前往 YouTube 网站 播放,并在播放器设置(齿轮图标)中选择“音频(Audio track) -> 中文(Chinese)”。



部署架构


在敲击命令行之前,我们先从全局视角理清底层的架构逻辑。我们将把 n8n 作为一个容器化服务,与我们现有的应用并行部署。


Diagram showing integration of OpenClaw and n8n on Google Cloud VM using VS Code and Docker. Workflow chart and goal included.
The deployment architecture maps the secure connection from VS Code to the Google Cloud VM and the n8n interface.

引入 Docker 可以让整个系统环境保持纯净。它将 n8n 封装在独立的容器中运行,这样一来,无论是后续的管理、升级还是数据备份,都变得异常简单,且绝对不会干扰到 VM 上的其他服务。


步骤 1:安装 Docker(官方推荐路线)


为了打造一个稳固的基础架构,我们需要将 Docker 的官方软件源添加到 VM 的包管理器 (apt) 中。



第一步,更新本地的软件包列表,并安装好处理安全下载所需的依赖工具:


sudo apt update
sudo apt install -y ca-certificates curl gnupg lsb-release

接下来,为安全密钥创建一个专属目录,并下载 Docker 官方的 GPG 密钥。系统正是靠这把“钥匙”来严格验证你下载的安装包是否确实出自 Docker 官方:


sudo install -m 0755 -d /etc/apt/keyrings
curl -fsSL https://download.docker.com/linux/debian/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg
sudo chmod a+r /etc/apt/keyrings/docker.gpg

现在,将 Docker 的官方软件源映射并写入到你的 VM 配置中:


echo "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/debian $(. /etc/os-release && echo $VERSION_CODENAME) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null

最后,再次刷新软件包列表,让系统识别刚刚添加的新软件源。接着,我们就可以正式安装 Docker Engine 以及 Compose 插件了:


sudo apt update
sudo apt install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin

安装完成后,通过查询版本号来验证安装是否成功:


docker --version
docker compose version


步骤 2:执行 n8n Google Cloud Docker 安装与容器配置


Docker 准备就绪后,我们开始配置 n8n 实例。这里我们需要新建两个核心目录:一个用来存放部署蓝图 (n8n-compose),另一个用来持久化保存我们的工作流数据 (.n8n)。


必须明确一点:容器本身是临时的。一旦容器重启或升级,内部未保存的数据就会彻底丢失。因此,我们需要将数据卷(volume)映射到 .n8n 文件夹,确保你的心血(工作流数据)能安全、永久地沉淀在 VM 的物理硬盘上。



在你的用户主目录下创建这两个文件夹:


mkdir ~/n8n-compose ~/.n8n
cd ~/n8n-compose

新建一个 .env 环境变量文件,用来妥善保管你的安全配置和密码信息:


nano .env

将以下配置参数粘贴进去(请务必根据实际情况替换时区和密码):


N8N_HOST=localhost
N8N_PORT=5678
N8N_PROTOCOL=http
GENERIC_TIMEZONE=America/New_York
TZ=America/New_York
N8N_BASIC_AUTH_ACTIVE=true
N8N_BASIC_AUTH_USER=admin
N8N_BASIC_AUTH_PASSWORD=YourStrongPasswordHere
N8N_SECURE_COOKIE=false

安全加固: 严格限制该文件的访问权限,确保只有文件所有者才能读取其中的敏感信息:


chmod 600 .env

紧接着,创建 compose.yaml 部署蓝图文件:


nano compose.yaml

粘贴下面这段 Docker Compose 的配置代码。请特别留意配置中是如何将持久化数据卷挂载到 ~/.n8n 目录的:


services:
  n8n:
    image: docker.n8n.io/n8nio/n8n:latest
    container_name: n8n
    restart: unless-stopped
    ports:
      - "5678:5678"
    env_file:
      - .env
    volumes:
      - ~/.n8n:/home/node/.n8n

以分离模式(detached mode)启动容器,让其在后台独立持续运转:


docker compose up -d

Terminal showing Docker commands for starting a container. A compose.yaml file is open in the editor with configuration details.
VS Code showing the /n8n-compose folder structure on the left and the successful docker compose up -d terminal output at the bottom

步骤 3:利用 VS Code 端口转发实现安全访问


出于安全考虑,Google Cloud 的防火墙默认会拦截外部对 5678 端口的访问请求。与其简单粗暴地向公网开放防火墙,我们更推荐使用 VS Code Remote-SSH。这相当于在你的本地电脑和 VM 之间,悄悄建立了一条安全加密的直达隧道。


Code editor displaying a YAML configuration for n8n setup. Sidebar shows folder structure. Terminal lists port details for forwarding.
 VS Code "PORTS" tab showing port 5678 forwarded to localhost:5678

  1. VS Code 底部面板中,切换到 PORTS(端口)选项卡。

  2. 点击 Forward a Port(转发端口),然后输入 5678

  3. 回到你的本地电脑,打开浏览器,访问 http://localhost:5678。


顺利进入前端界面后,只需跟着屏幕上的提示,即可完成 n8n 管理员账号的初始化设置。


(注意:如果你需要一个不依赖于 VS Code 且更加持久稳定的私密连接,你也可以通过执行 sudo tailscale serve --bg --https 8444 http://127.0.0.1:5678 来配置一条 Tailscale Serve 路由。)



步骤 4:构建演示工作流(基于人口普查数据的自动化分析)


为了直观检验 n8n 的运行状态,我们来动手配置一个实际的数据流:调用美国人口普查局(US Census API)获取原始数据,通过自定义的 JavaScript 脚本进行数据清洗,最后用柱状图将弗吉尼亚州人口排名前 10 的县可视化展示出来。


Workflow editor showing nodes: "When clicking 'Execute workflow'," "HTTP Request," "JavaScript Analysis," "QuickChart." Button reads "Execute workflow."
n8n canvas showing the complete flow: HTTP Request -> Code Node -> QuickChart

1. HTTP Request 节点


在画布上拖入一个 HTTP Request 节点。将请求方法设为 GET,并把下面这段 API 链接粘贴到 URL 输入框中:


https://api.census.gov/data/2023/acs/acs5? get=NAME,B01003_001E&for=county:*&in=state:51

HTTP request setup in software interface. URL input shown under "Parameters." Button displays "Execute step" in red. No output data visible.
The HTTP Request node configuration panel shows the GET method and the pasted URL.

2. Code 节点 (JavaScript 分析逻辑)


顺着刚才的节点,连入一个 Code 节点。将编程语言切换到 JavaScript。这段代码的核心逻辑是:接收 API 返回的原始数组,提取出县名和对应的人口基数,进行降序排列,最后把数据拼装成图表渲染所需的标签和数值格式。


粘贴以下处理逻辑:


const rows = items.map(item => {
  const value = item.json;
  return Array.isArray(value) ? value : Object.values(value);
});

if (!rows || rows.length < 2) {
  return [{ json: { error: 'No valid population values found', rawPreview: rows[0] || null } }];
}

const headers = rows[0];
const dataRows = rows.slice(1);

const results = dataRows.map(row => {
  const obj = {};
  headers.forEach((h, i) => { obj[h] = row[i]; });

  return {
    county: obj.NAME,
    population: Number(obj.B01003_001E),
    state_fips: obj.state,
    county_fips: obj.county
  };
}).filter(r => Number.isFinite(r.population));

const sortedDesc = [...results].sort((a, b) => b.population - a.population);
const top10 = sortedDesc.slice(0, 10);

const labels = top10.map(r => r.county.replace(', Virginia', ''));
const values = top10.map(r => r.population);

return [{ json: { labels, values, chartTitle: 'Top 10 Virginia Counties by Population' } }];

Code editor with JavaScript script for mapping Virginia counties by population. An "Execute step" button appears on the right.
The Code node opens, showing the JavaScript snippet

3. QuickChart 节点


最后,接入 QuickChart 节点,它将基于我们清洗好的结构化数据直接生成可视化图表:


  • Chart Type: Bar Chart

  • Add Labels: From Array

  • Labels Array: ={{$json.labels}}

  • Data: ={{$json.values}}


QuickChart interface showing a JSON input for a bar chart. Blue bars represent data for various counties, with labels like Fairfax and Norfolk.
The QuickChart node opens, showing the final generated bar chart of the top 10 Virginia counties

执行该工作流(Execute workflow),你就能看到系统成功渲染出了一张精准反映人口分布的柱状图。


Conclusion (总结)


通过将 n8n 以 Docker 容器的形式部署在 Google Cloud VM 上,我们成功搭建了一个深藏于防火墙保护之下、既稳健又极具弹性的自动化基座。在本次实验中,我们完整走通了官方推荐的部署全流程、妥善加固了凭证安全、实现了工作流数据的永久挂载,并亲手跑通了一个具有实际业务逻辑的数据分析案例。


这只是一个起点。在接下来的 LBSocial 教程中,我们将继续在这套底层架构上进行拓展——尝试将 n8n 与我们构建的 OpenClaw 智能体深度集成,最终打造出完全自治、由 AI 引擎驱动的闭环工作流系统。


留言


bottom of page