+86 189 8218 1436 周一至五 10:00-22:00

新创 SaaS 团队如何用 GCP 快速部署 MVP

TL;DR:从项目、预算到部署与验证,用最少 GCP 服务搭出可访问、可监控、可回滚的 SaaS MVP,适合零基础团队快速试错。

开始前你需要准备

新创 SaaS 团队用 GCP 快速部署 MVP,先备齐三样东西,别等部署时才补。以下命令在 macOS、Linux 或 Windows 的 WSL/Git Bash 里复制执行。

第一,用能登录的 Google 账号,绑定信用卡或结算账号,再建统一命名的 GCP 项目,如 team-saas-mvp,项目 ID 写进团队文档。项目 ID 全局唯一,会出现在账单和日志;免费额度也常要绑付款方式,别叫「测试 1」。账号最好由管理员统一管,离职交接也方便。

gcloud --version
git --version
gcloud auth login
gcloud projects list --format="table(projectId,name)"
read -r -p "项目 ID: " PROJECT_ID
gcloud config set project "$PROJECT_ID"
gcloud projects get-iam-policy "$PROJECT_ID" --flatten="bindings[].members" --filter="bindings.members:user:$(gcloud config get-value account)" --format="value(bindings.role)"

先装 Google Cloud CLI(gcloud)和 Git,部署和拉代码都靠它们;前两行验收,报错就先停下,按官网补装后重跑整段。read 时从列表粘贴项目 ID,别手打。输出有 Editor、Owner 或等效角色才算能改;没看到就找管理员加,只有 Viewer 会「看得到、部署不了」。

第二,本地先跑通最小 SaaS:注册登录、一个核心功能、基础环境变量。功能只做一个,别顺手加后台和报表;这样上线报错,能分清是代码问题还是云配置问题。

test -f .env.example || printf 'PORT=8080nDATABASE_URL=sqlite:///dev.dbnSESSION_SECRET=change-men' > .env.example
test -f .env || cp .env.example .env
grep -qxF '.env' .gitignore 2>/dev/null || printf '.envn' >> .gitignore

.env 放真实配置,别进仓库;change-me 上线前换成随机密钥。

若用 VM,再准备 SSH 密钥和几条 Linux 命令:密钥用来登录,基础命令用来进机器后看目录、查文件;不用 VM 可跳过。已有密钥别覆盖,只分享 .pub,私钥别发人也别进 Git。

pwd
ls -la
mkdir -p "$HOME/.ssh"
chmod 700 "$HOME/.ssh"
KEY="$HOME/.ssh/gcp_saas_mvp_ed25519"
test -f "$KEY" || ssh-keygen -t ed25519 -C "gcp-saas-mvp" -f "$KEY"
cat "$KEY.pub"

整体思路

先把目标定成“今天能点开、能存一条数据、能看到日志、花钱有提醒”,别一上来做大厂架构。优先用托管服务降低运维量:应用打成容器放 Cloud Run,少装系统、少打补丁,按请求扩容、自带 HTTPS;VM 只在必须自己管 Linux、装系统依赖时才当备选。常见坑是先买 VM 配 Nginx、打补丁,时间全耗在运维。

gcloud --quiet services enable run.googleapis.com
gcloud --quiet run deploy mvp-app --image gcr.io/cloudrun/hello --region asia-east1 --allow-unauthenticated --revision-suffix init
gcloud --quiet run services describe mvp-app --region asia-east1 --format='value(status.url)'

执行前先在控制台建并选中测试项目、打开 Cloud Shell 并确认已开账单;命令会启用 Run、部署官方示例、打印网址。权限不足找管理员,别乱加 Owner。示例只验证“能跑”,别当业务代码。

  • 最小闭环:应用、数据库、域名、日志、预算告警五件事就够。数据库先用 Cloud SQL 或 Firestore 一张表/集合;域名先用自动 HTTPS 地址,验证后再绑自有域名;日志看 Cloud Logging;预算告警在“结算—预算与提醒”设置 50%、80%、100% 邮件提醒。先上线验证,再谈缓存、队列、多区域。
  • 小步回滚:全程只做可回滚的小改动:每次只改一个配置,Cloud Run 会保留 revision,出错把流量切回旧版本。把每次配置和命令、控制台选项、时间、执行人、结果记进同一篇文档,交接时别靠口头回忆。

为什么这样做?MVP 要验证有人用、愿不愿付钱,不是服务器技巧;过早引入 K8s、Redis 集群,既贵又没人维护。

详细步骤一:创建 GCP 项目与基础设置

第一步先备好「门牌」和「钱包」。打开 GCP 控制台,点顶部项目下拉框选「新建项目」,名字建议叫 saas-mvp-dev。建完别急着部署,立刻去「结算」→「预算和提醒」设个 50 元(或等值美元)预算,阈值勾 50% 和 90% 发邮件。为什么这么做? 小白最常踩的坑,就是本地测完忘了关 Cloud SQL,睡一觉账单就炸了;告警不自动停机,但能第一时间叫醒你。

接着只开本教程用得到的 API,别图省事点「全部启用」:多开一个,就多一份被误用、被扫到产生调用费的风险。

gcloud services enable run.googleapis.com cloudbuild.googleapis.com artifactregistry.googleapis.com sqladmin.googleapis.com

回到自己电脑登录并绑定项目。绑定后每条命令都只落在 saas-mvp-dev 里,避免手滑改到公司生产环境:

gcloud auth login
gcloud config set project saas-mvp-dev

最后在「IAM 和管理」→「授予访问权限」里拉队友,按活儿给最小权限:写接口的给 roles/run.developer 加 roles/cloudsql.client,管镜像的给 roles/artifactregistry.writer 就够了,千万别人人发「Owner」。再提醒一个坑: 全队共用一个高权限账号看着方便,出事连谁删的库都查不到;一人一个账号,有人离开直接移除绑定就好。

详细步骤二:部署 MVP 应用与数据

最省事的是用 Cloud Run 源码直接部署,不用先学 Docker 打镜像,复制一行命令就能发第一版:

gcloud run deploy my-mvp --source . --region asia-east1 --memory 512Mi --concurrency 10 --set-env-vars ENV=prod --allow-unauthenticated

为什么这么做:MVP 流量很小,锁定一个稳定区域、512M 低配、10 个并发就够用,最省钱;非机密配置先放环境变量最省事。小白坑:区域选定后极难迁移,别乱点;别一上来开高配,钱会悄悄烧光。

数据库密码、第三方密钥,千万别写死在代码里(传到 GitHub 分分钟被盗刷)!先存 Secret Manager,再把连接串注入环境变量:

echo -n "pwd123" | gcloud secrets create DB_PASS --data-file=-
gcloud run services update my-mvp --region asia-east1 --set-secrets DB_CONN=DB_PASS:latest

这样应用不用改代码就能安全拿到连接串了。

如果实在得跑虚拟机,就建 Compute Engine,用 SSH 登录后起服务:

gcloud compute instances create mvp-vm --zone asia-east1-b --machine-type e2-micro --tags http-server
gcloud compute firewall-rules create mvp-allow-web --allow tcp:80,tcp:443 --target-tags http-server
gcloud compute ssh mvp-vm --zone asia-east1-b

踩坑提醒:只开 80/443 等必要端口,别图省事防火墙全放通,半夜被挂挖矿脚本就晚了!

详细步骤三:绑定域名、HTTPS 与监控

先把门牌号挂上。Cloud Run 自带免费托管证书,不用自己买、也不用记着续期,对 MVP 最省事。下面整段直接贴进终端,只改第一行的域名就行:

export DOMAIN="mvp.example.com"
export REGION="asia-east1"
gcloud run domain-mappings create --service my-mvp --domain "$DOMAIN" --region "$REGION"
gcloud run domain-mappings describe --domain "$DOMAIN" --region "$REGION" --format='value(status.conditions.status)'

为什么看第二条:要等它输出 ACTIVE,HTTPS 才算真能用。小白最容易踩的坑:命令跑完还得去域名后台补一条它提示的 CNAME 记录;没补就会一直卡在 PENDING。这时千万别反复删了重建,容易撞上证书配额,耐心等 15~30 分钟即可。

接着留好「后视镜」。健康检查用默认的就好,别手痒把 / 改成慢接口,不然实例会被误判成挂了、反复重启。日志是出事时唯一告诉你「哪一行炸了」的地方;费用告警是初创团队的安全带,免得测试流量忘关、半夜刷爆卡,错误率告警随后补上即可:

gcloud logs read "resource.type=cloud_run_revision AND resource.labels.service_name=my-mvp" --limit=20

再去控制台「监控 → 告警」加两条:选预算阈值填 50 元发邮件,再选 Cloud Run 5xx 比率 > 1% 通知到群里。

最后留一版退路:把稳定镜像单独打标签、先不接流量,出事能一键切回。

export PROJECT_ID=$(gcloud config get-value project)
gcloud run deploy my-mvp --image "gcr.io/$PROJECT_ID/my-mvp:v1" --region "$REGION" --tag stable-v1 --no-traffic
  • 回滚入口:控制台 → Cloud Run → my-mvp →「修订版本」,把流量 100% 切给 stable-v1。
  • 负责人:发布当值人,写进群公告,别只记在脑子里。

验证结果

别用“我电脑能打开”当结论。手机切 4G/5G、电脑开无痕窗口,分别访问正式域名:依次点首页、注册、登录、退出再登录都顺,再完成一条核心流程,如新建数据并在列表看到。这样能排掉缓存、自动登录和同网假成功。坑:只看首页不算过,邮件验证、手机回调最易漏。

接着在项目 Cloud Shell 整段复制下面命令;它按文档默认名写好,不用装 SDK,也避免本机环境变量影响判断。

set -e
export URL="$(gcloud run services describe mvp --region=asia-east1 --format='value(status.url)')"
curl -fsS -o /dev/null -w '%{http_code}n' "$URL/healthz"
gcloud logging read 'logName:"run.googleapis.com%2Frequests"' --freshness=30m --limit=20
gcloud logging read 'severity>=ERROR AND resource.type="cloud_run_revision"' --freshness=30m --limit=20
export BILLING_ACCOUNT="$(gcloud beta billing projects describe "$(gcloud config get-value project)" --format='value(billingAccountName)' | sed 's|billingAccounts/||')"
gcloud beta billing budgets list --billing-account="$BILLING_ACCOUNT"
gcloud monitoring dashboards list
gcloud sql instances list --format='table(name,settings.backupConfiguration.enabled)'
gcloud sql backups list --instance=mvp-db --limit=1

结果应是:健康检查返回 200;请求日志有刚才的 GET/POST;ERROR 最近 30 分钟为空,或只有已修复的一次性报错,不能连续刷屏。再到控制台确认预算阈值和通知对象、Monitoring 的 CPU/请求数/5xx 曲线、Cloud SQL 备份开启且有 SUCCESS 记录,并把 Billing Forecast 里的当前每月预估成本写成具体金额,记日期和截图,写进交付文档。坑:预算建了不等于告警发出;图表无数据常是时间范围或权限错;只有备份开关、没有成功记录也不算可恢复。

最后让一位同事只拿文档和项目权限,在新 Cloud Shell 从零复现部署,不给你的电脑、缓存或口头补充。能复现同样页面、日志、告警和成本记录,才说明步骤不依赖个人环境;失败就补文档再跑。因为 MVP 最怕“本地能跑、交接就坏”。

常见坑与解决办法

别一看到红字就改代码。MVP 多数故障,是项目、权限、配置或账单没对齐;按现象查,比乱点控制台安全。先复制下面做一次体检,命令会依次问项目 ID、服务名和区域、域名、Secret 名:

read -p "Project ID: " P
gcloud config set project "$P"
gcloud auth list
gcloud services enable run.googleapis.com compute.googleapis.com secretmanager.googleapis.com
gcloud services list --enabled
gcloud projects get-iam-policy "$P" --format=table
read -p "Cloud Run 服务名 区域: " S R
gcloud run services get-iam-policy "$S" --region "$R"
gcloud run services describe "$S" --region "$R" --format=yaml | grep -E "env:|secretKeyRef|serviceAccountName"
gcloud run services update "$S" --region "$R" --max-instances=3
gcloud run revisions list --service "$S" --region "$R"
gcloud compute instances list
gcloud compute images list
gcloud compute firewall-rules list
gcloud compute ssl-certificates list
read -p "域名: " D
curl -Iv "https://$D" 2>&1 | head -n 8
read -p "Secret 名称: " K
gcloud secrets get-iam-policy "$K"
  1. 权限不足或 API 未启用:报错里的「启用 API」链接最准,按它开服务;再看当前账号、IAM 角色和项目是否选对。小白常把测试项目当生产项目。
  2. 账单暴涨:先在「结算 > 预算和提醒」设预算告警;命令已把最大实例数限到 3,再按列表删闲置 VM、镜像和旧版本。原因是忘关资源会一直计费。
  3. 网站打不开:看 IAM 里有没有 allUsers,没有就允许公开访问;VM 防火墙要放行 80/443,域名 A/CNAME 要指对,HTTPS 证书要已签发。证书刚配常要等,别反复刷新。
  4. 环境变量或数据库连接失败:比对 Secret 名称、区域、连接串和 Secret Manager 授权,运行服务的账号要有访问权。本地能连不代表云端能连,也别把连接串贴群里。
  5. 团队协作混乱:统一项目命名、最小权限、发布记录和回滚方案;生产只走发布流程,别直接改配置,因为无法复现也难回滚。

常见问题(FAQ)

新创 SaaS 团队一定要先买域名吗?

不一定,先用 GCP 默认网址验证功能,确认有人用后再绑定域名。

MVP 应该选 Cloud Run 还是 VM?

优先 Cloud Run,少管服务器;只有需要自定义 Linux 环境时再选 VM。

不会 Docker 能不能部署?

可以,先用源码部署或请开发提供镜像,后续再补容器知识。

如何控制 GCP 费用?

设置预算告警、低配实例和自动扩缩容,定期删除闲置资源。

上线前最少要测什么?

测注册登录、核心流程、日志、HTTPS 和回滚,确保出问题能恢复。

不想自己折腾 GCP?我们提供云平台代维护、上云迁移与账单代付服务,一对一技术支持。

查看代维服务 →

发表评论