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

- 4月24日
- 讀畢需時 6 分鐘
n8n 之所以备受推崇,是因为它让复杂的自动化变得触手可及。它提供了一个可视化的操作界面,让你能轻松连接各类 API、服务和 AI 工具,同时还保留了编写自定义代码和设计高级工作流逻辑的灵活性。
在本教程中,我们将带你实操完整的 n8n Google Cloud Docker 安装流程。为了保证系统的长期稳定与可扩展性,我们不会采用那种临时的快捷安装法,而是严格按照官方的部署路线,在已经运行 OpenClaw 智能体的虚拟机上从头构建一个安全、结构化的生产级环境。
💡 提示: 本教程视频已配有 中文音轨。如需收听,请前往 YouTube 网站 播放,并在播放器设置(齿轮图标)中选择“音频(Audio track) -> 中文(Chinese)”。
部署架构
在敲击命令行之前,我们先从全局视角理清底层的架构逻辑。我们将把 n8n 作为一个容器化服务,与我们现有的应用并行部署。

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

在 VS Code 底部面板中,切换到 PORTS(端口)选项卡。
点击 Forward a Port(转发端口),然后输入 5678。
回到你的本地电脑,打开浏览器,访问 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 的县可视化展示出来。

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
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' } }];

3. QuickChart 节点
最后,接入 QuickChart 节点,它将基于我们清洗好的结构化数据直接生成可视化图表:
Chart Type: Bar Chart
Add Labels: From Array
Labels Array: ={{$json.labels}}
Data: ={{$json.values}}

执行该工作流(Execute workflow),你就能看到系统成功渲染出了一张精准反映人口分布的柱状图。
Conclusion (总结)
通过将 n8n 以 Docker 容器的形式部署在 Google Cloud VM 上,我们成功搭建了一个深藏于防火墙保护之下、既稳健又极具弹性的自动化基座。在本次实验中,我们完整走通了官方推荐的部署全流程、妥善加固了凭证安全、实现了工作流数据的永久挂载,并亲手跑通了一个具有实际业务逻辑的数据分析案例。
这只是一个起点。在接下来的 LBSocial 教程中,我们将继续在这套底层架构上进行拓展——尝试将 n8n 与我们构建的 OpenClaw 智能体深度集成,最终打造出完全自治、由 AI 引擎驱动的闭环工作流系统。



留言