type
Post
status
Published
date
Mar 19, 2026 03:14 PM
slug
flow2api-gcp-deployment
summary
本文基于实际部署经验,记录了将 Flow2API 项目部署到 GCP 的完整过程,包括踩过的坑和解决方案。即使你是零基础,跟着做也能成功。
tags
AIGC
感悟
AI绘图
Gemini
Nano Banana Pro
Flow
category
技术分享
icon
fas fa-tag
password
本文基于实际部署经验,记录了将 Flow2API 项目部署到 GCP 的完整过程,包括踩过的坑和解决方案。即使你是零基础,跟着做也能成功。
📋 目录
最终效果
部署完成后的架构:
组件 | 配置 |
云服务商 | Google Cloud Platform |
虚拟机 | Compute Engine e2-medium(2 vCPU / 4GB) |
操作系统 | Ubuntu 22.04 LTS |
服务 | Flow2API Docker 容器 |
反向代理 | Nginx(80 → 8000) |
HTTPS | Cloudflare Flexible SSL |
验证码 | YesCaptcha 第三方打码 |
最终通过
https://your-subdomain.yourdomain.com 访问服务,管理后台和 API 一切正常。前置准备
在开始之前,你需要准备:
- ✅ Google 账号 — 用于访问 GCP
- ✅ 信用卡/借记卡 — GCP 需要绑定支付方式(新用户有 $300 免费额度)
- ✅ 一个域名(可选)— 推荐在 Cloudflare 托管
- ✅ YesCaptcha 账号 — 注册 [YesCaptcha]() 并充值(10 元即可)
https://yescaptcha.com/i/13Xd8K
第一步:安装并配置 gcloud CLI
下载安装
前往 Google Cloud SDK 安装页面 下载安装包。
> ⚠️ Windows 用户注意:如果安装在非默认路径,需要手动将 `bin` 目录添加到系统 PATH。
初始化登录
按提示操作:
- 浏览器会自动打开,登录你的 Google 账号
- 选择或创建项目
- 选择默认区域(后面会详细说明)
第二步:创建 GCP 项目
在网页端创建
- 打开 GCP 控制台
- 顶部项目下拉菜单 → 新建项目
- 填写项目名称,记下项目 ID
设置默认区域
- 首次打开会提示启用 Compute Engine API,点击启用
- 设置默认区域和地区
区域选择建议:
区域 | 位置 | 适合场景 |
us-central1 | 🇺🇸 美国中部 | 价格最便宜 |
asia-east1 | 🇹🇼 台湾 | 亚洲用户延迟最低 |
asia-northeast1 | 🇯🇵 东京 | 亚洲备选 |
在 CLI 中切换项目
第三步:创建虚拟机
参数说明:
参数 | 说明 |
e2-medium | 2 vCPU + 4GB 内存,够用且经济 |
30GB | 磁盘空间,Docker 镜像较大需要充足空间 |
ubuntu-2204-lts | Ubuntu 22.04,Docker/Git 安装方便 |
flow2api-server | 网络标签,用于防火墙规则 |
💡 显示Disk size: '30 GB' is larger than image size: '10 GB'的警告可以忽略,Ubuntu 会自动扩展分区。
创建成功后,记下输出的 EXTERNAL_IP。
第四步:配置防火墙
⚠️0.0.0.0/0表示允许所有 IP 访问。生产环境建议限制来源 IP。
第五步:SSH 连接到 VM
- 首次连接会自动创建 SSH 密钥
- Windows 系统会自动打开 PuTTY 窗口
- 看到
用户名@flow2api-vm:~$就表示连接成功了
💡 后续也可以通过 GCP 控制台的网页 SSH 连接,手机浏览器也能操作!
第六步:安装 Docker 和 Git
以下命令均在 VM 的 SSH 会话中执行:
第七步:拉取代码并构建镜像
⚠️ 构建过程中看到A new release of pip is available提示可以忽略,这是容器内部的提示,不影响使用。
为什么在 VM 上构建而不是本地?
直接在 VM 上
git clone + docker build 的好处:- 不依赖本地 Docker,也不受国内网络限制
- 以后更新只需
git pull+ 重新构建
- 手机上也能 SSH 进来操作
第八步:配置并启动服务
创建数据目录
创建配置文件
需要修改的关键配置:
修改完毕后,
Ctrl+O 保存,Ctrl+X 退出。> ⚠️ 踩坑提醒:如果自定义密码导致登录失败,可以先将 `admin_username` 和 `admin_password` 都设为 `"admin"`,删除数据库文件后重启:
启动容器
验证
浏览器访问
http://你的VM外部IP:8000 应该可以看到管理后台。第九步:配置域名和 HTTPS
如果你没有域名,可以跳过此步,直接用http://IP:8000访问。
安装 Nginx 反向代理(在 VM 上执行)
记得将your-subdomain.yourdomain.com替换为你的实际域名!
配置 Cloudflare
- 选择你的域名 → DNS → Add Record
- 添加 A 记录:
字段 | 值 |
Type | A |
Name | 你的二级域名(如 api) |
IPv4 | 你的 VM 外部 IP |
Proxy status | 橙色云朵(Proxied) |
- 左侧 SSL/TLS → Overview → 加密模式选 Flexible
等待 1-2 分钟 DNS 生效,访问
https://your-subdomain.yourdomain.com 即可看到 HTTPS 小锁 🔒第十步:绑定静态 IP
VM 默认分配的是临时 IP,停止再启动后 IP 会变,需要重新修改 DNS。绑定静态 IP 可以一劳永逸。
⚠️ 注意--access-config-name的值是external-nat(小写带连字符),不是External NAT!
查看新 IP:
最后去 Cloudflare 将 A 记录更新为新的静态 IP。此后无论怎么停启 VM,IP 都不会变了。
进阶:Host Agent 自动续签与无头打码(推荐)
如果你不想一直消耗第三方打码(如 YesCaptcha)的额度,并且希望 Session Token 过期后能自动刷新,可以部署官方的
flow2api-host-agent。该服务直接运行在 VM 宿主机上,通过 noVNC 提供桌面上的 Chrome 浏览器用于打码,并负责自动向你的 flow2api 实例提交新 Token。
> ⚠️ 前提:
flow2api 容器必须改用Dockerfile.headed构建。setting.toml中的captcha_method必须改为"browser"。VM 的内存建议保持在e2-medium(4GB) 或以上,因为要运行双 Chrome。
1. 重新部署 flow2api 容器版本
2. 宿主机安装系统级依赖
> 坑 1: Ubuntu 22.04 默认的 chromium-browser 是 snap 包,无法被 systemd 后台服务正常调用。必须安装原版 Google Chrome!
3. 克隆并安装 Host Agent
4. 修复系统服务配置(极度避坑)
> 坑 2 和坑 3:
脚本默认指定的浏览器是 chromium,我们需要改为刚才安装的 google-chrome-stable。同时,noVNC 缺少宿主机与网页之间的画面桥接,我们需要手动配置 x11vnc。
修改浏览器服务:
创建 x11vnc 数据桥接服务(不要用
-bg 参数,否则 systemd 会将其误判为退出):创建虚拟显示器(Xvfb + Fluxbox)的守护服务:
重载并启动一切!
最后,运行 noVNC 的 Web Socket(此步使用
websockify 在后台桥接 6080 和 5900 端口):5. 开放 GCP 防火墙新端口
在你的本地计算机 PowerShell 执行:
6. 配置 Host Agent 参数
回到 SSH,编辑配置:
最关键参数如下填写:
完成后重启服务:
7. 首次登录与开启持续刷新
- 浏览器打开
http://你的VM外部IP:38110/login。
- 你应该能看到右侧出现了一个模拟的桌面,里面运行着 Google Chrome。
- 在这个 Chrome 中操作,完成 Google Labs 的账号登录(有任何图片验证或者风控手机验证,都在这里手动解决)。
- 确保最终界面停留在了正常的 Google Labs 页面,且帐号头像已显示。
- 点击页面左上角面板里的 “立即刷新 Token”。如果右上角飘出绿色的成功提示,则打通了任督二脉!
- 回到 SSH,启动自动续期服务:
至此,恭喜你拥有了一个 7x24 小时全自动续签、自己给自己过无头打码的完美系统。
日常维护
更新代码并重新部署
查看日志
手机管理 VM
两种方式:
- Google Cloud App:[Android](https://play.google.com/store/apps/details?id=com.google.android.apps.cloudconsole) / [iOS](https://apps.apple.com/app/google-cloud-console/id1005120814),一键启停 VM
- 手机浏览器:打开 [console.cloud.google.com/compute](https://console.cloud.google.com/compute),勾选 VM → 启动/停止
💡 由于设了--restart unless-stopped,VM 启动后容器会自动运行,不需要手动操作。
费用说明
资源 | 月费估算 |
Compute Engine ( e2-medium) | ~$25 |
磁盘 (30GB) | ~$3 |
静态 IP(使用中) | 免费 |
静态 IP(VM 停止时未使用) | ~$7 |
Cloudflare | 免费 |
| 常开合计 | ~$28/月 |
> 💡 GCP 新用户有 $300 免费额度(90 天有效期),足够运行大约 10 个月。
省钱建议
- 服务不是 24/7 需要的话,不用时停止 VM,只收磁盘费 $3/月
- 每次 VM 启动会触发一次验证码打码,消耗 YesCaptcha 额度。如果使用频繁,建议让 VM 常驻运行
- `e2-medium`(4GB 内存)对于标准模式(非有头浏览器)完全够用
踩坑记录
问题 | 原因 | 解决方案 |
gcloud 命令找不到 | 安装在自定义路径,未加入 PATH | 手动添加 bin 目录到系统 PATH |
本地 docker build 无法拉取基础镜像 | 国内网络无法连接 Docker Hub | 改为在 GCP VM 上直接构建 |
创建仓库报 ALREADY_EXISTS | 仓库已经存在 | 不是错误,可以忽略 |
自定义密码后登录失败 | 密码特殊字符导致 TOML 解析异常 | 重置为默认密码 + 删除 db 文件 |
浏览器显示「不安全」 | 直接用 IP:8000 无 HTTPS | Nginx 反向代理 + Cloudflare SSL |
delete-access-config 报错 | access config 名称是 external-nat 而非 External NAT | 使用正确的小写名称 |
部署 Host Agent:浏览器启动退出码为 1 | Ubuntu 22.04 apt 安装的 chromium 实际上是 snap 沙盒包,systemd 无法调用它 | 直接增加源, apt-get 原版的 google-chrome-stable,并修改服务配置。 |
部署 Host Agent:Web UI 中远程桌面无限转圈 | 没有安装且配置 x11vnc 数据流 | 独立创建一个 x11vnc 的 systemd 伴生服务,抛接给 websockify 的 5900 端口。 |
部署 Host Agent:x11vnc 服务启动即停止 | 服务文件中带入了 -bg 参数,导致应用挂到后台引起 systemd 误判为进程死亡 | 使用 Type=simple 服务时去除一切 -bg 及 daemon 化自运行参数。 |
部署 Host Agent:x11vnc 报错 BadAccess | x11vnc 请求捕获共享内存权限不足 | 启动参数加上 -noxdamage 和 -noshm 关闭共享内存与损害轮训。 |
打码方式对比
方式 | 需要 Dockerfile.headed | 说明 |
yescaptcha | ❌ | 第三方打码服务,推荐 |
capmonster | ❌ | 第三方打码,YesCaptcha 替代 |
ezcaptcha | ❌ | 第三方打码 |
capsolver | ❌ | 第三方打码 |
browser | ✅ | 容器内有头浏览器打码 |
personal | ✅ | 有头浏览器 + 自动刷新 ST |
remote_browser | ❌ | 连接远程有头打码服务器 |
使用标准Dockerfile部署时,只能选择不需要Dockerfile.headed的打码方式。
总结
整个部署流程核心就是:
- GCP 创建 VM — 一条命令搞定
- VM 里装 Docker — apt-get 一键安装
- Git 拉代码 + Docker Build — 云端构建,不依赖本地网络
- 配置文件 + Docker Run — 服务跑起来
- Nginx + Cloudflare — HTTPS 加持
- 静态 IP — 一劳永逸
整个过程大约 30 分钟可以完成。以后更新代码只需要
git pull + 重新构建,手机上也能操作。如果这篇文章对你有帮助,欢迎点赞收藏 ⭐


