它是什么
先别被「虚拟主机」这四个字骗了。以前在别处买的那种,像房东隔好的单间,面板一点、FTP 一传网站就跑起来了,那叫传统共享主机。本文在 GCP 里说的「开虚拟主机」,其实是去 Compute Engine 开一台 Linux 虚拟机(VM):相当于交给你一台通了水电的裸机,CPU 几核、内存多大、系统盘多少 G、要不要固定外部 IP、门禁(防火墙规则)放谁进来,全都能自己拧;但「刷墙买家具」,也就是安装网站运行环境,得你自己来。
为啥要这么麻烦?因为不浪费钱,也不被同台机器的邻居拖慢:今天放个小博客就选最便宜的 1 核 1G,以后流量涨了关机调大就行。但小白第一个坑几乎都栽在门禁上——机器明明显示「运行中」,浏览器却一直转圈,多半是忘了在防火墙放行 80(HTTP) 和 443(HTTPS),IP 再对也进不来。
那「家具」长啥样?最常见的搭配是 Linux 加 Nginx 或 Apache 当门口接待员,后面摆三样东西之一:纯 HTML 静态页、PHP 程序(比如 WordPress),或者让它做反向代理,把访客悄悄转给后台别的服务。接待员不装,浏览器就只会对着空机器发呆。
开好 VM、点「SSH」连上之后,先别急着传文件,把下面整段复制进去回车,摸个底:
sudo apt update && sudo apt install -y nginx curl && curl -s ifconfig.me
为什么是这一串?apt update 先刷新软件目录,不然直接装常报「找不到包」,新手一看红字就以为机器坏了(第二个坑);顺手把 curl 也装上,免得精简镜像没预带;接着请进 Nginx;最后打印出来那串数字,就是你这台机器的外部 IP,等下直接拿去用。
把它粘进浏览器时记得手打 http:// 开头,别让浏览器自作主张跳 https://——证书还没配,会先弹「不安全」吓你一跳(第三个坑)。看到 Nginx 欢迎页,就说明这台裸机已经会接客了,后面再放页面或 PHP 就很顺了。
解决什么问题
用 Google GCP 开虚拟主机来架网站,解决的是「不买机器,也能先有一台能联网的电脑」。以前要采购物理服务器、等发货、装系统;现在在网页里选系统、地区和规格,几分钟就能开一台带公网 IP 的机器,适合练手、测试、个人博客、作品集和小站上线。
先用一条不改配置的命令理解「公网访问」:外网能拿到网页响应,不只是自己电脑能看见。复制到终端或 Cloud Shell,查看公开示例站的响应头:
curl -I https://example.com
看到 HTTP/ 开头就说明请求有返回。坑是:有公网 IP 不等于网站已上线,还要装 Web 服务、放行 80/443;防火墙别图省事全端口开放。
只放固定模板,套餐主机也许够用;但要自定义系统包、改 PHP/Node/Python 版本、开 8080 端口、设定时任务,或迁移旧站文件和数据库,固定套餐常会限制权限。GCP 虚拟主机更像自己的电脑,能装软件、改配置、设计划任务。代价是安全更新、备份、防火墙也要自己管,别用弱密码,别把数据库端口暴露公网。
操作前在 Google Cloud 控制台右上角打开 Cloud Shell,先复制这条命令确认账号和项目;它只查看配置,不创建资源、不产生实例费用:
gcloud config list
这么做是为了避免把机器开到旧账号、公司项目或错误地区,后面看账单却找不到资源;普通电脑没装 gcloud 报 command not found,不是你做错了。
- 计费:按 CPU、内存、磁盘、运行时间和流量等规格与用量算,先用小规格试跑,够用再升配。
- 控成本:练完停止实例;改配置前做快照便于回滚;看监控里的 CPU、磁盘、网络,配合预算提醒决定开关机或删除。
- 费用坑:免费额度有条件;关机后通常不收虚拟机运行费,但磁盘、静态公网 IP、快照仍可能计费,创建前看价格估算、创建后看账单。
怎么上手
第一次别急着买大机器。GCP 用“项目”装资源、权限和账单:先建项目、绑定结算账号,再到“API 和服务”启用 Compute Engine,等一两分钟。区域选离访客近的,如 asia-east1、asia-east2,延迟低;但以后换区域要搬磁盘和 IP,先想好。
- 建 VM。在 Compute Engine 点“创建实例”,镜像选 Ubuntu 或 Debian,机器选
e2-small这类小规格,够练手也省钱;防火墙务必勾选“允许 HTTP 流量”和“允许 HTTPS 流量”。80/443 是网站入口,没勾的话后面页面打不开,常常不是 Nginx 坏了。 - SSH 登录并装 Nginx。实例列表点“SSH”会开浏览器终端。整段复制:更新清单、装 Nginx、启动,并先在本机测一次。
sudo apt update sudo apt install -y nginx curl sudo systemctl enable --now nginx curl -I http://localhost看到
200 OK后,在浏览器访问http://外部IP,应出现 Nginx 默认页;打不开就回头检查实例状态和防火墙勾选。 - 放网站文件。默认目录是
/var/www/html。先别传整站,用一页最小 HTML 验证链路,刷新上面的地址能看到标题,就说明 VM、Nginx、防火墙都通了。echo '<h1>我的第一个 GCP 网站</h1>' | sudo tee /var/www/html/index.html > /dev/null curl -I http://localhost - 固定 IP 和域名。在“VPC 网络 → IP 地址”把临时外部 IP 预留为静态外部 IP,区域要和 VM 一致,并绑定到这台 VM;否则重启后 IP 可能变,域名会失效。到域名商添加 A 记录,主机记录填
@或留空,值填这个 IP。DNS 生效可能要几分钟到几小时,别反复改;闲置静态 IP 也可能计费。 - 配置 HTTPS。先确认
http://域名能打开,再回到 VM 的 SSH 终端整段复制。命令会询问域名和邮箱,自动申请免费证书并把 HTTP 跳到 HTTPS;输入哪个域名,就要先让哪个域名解析到这个 IP。域名没生效、80/443 没放行、短时间申请太多次,都容易失败。while [ -z "$DOMAIN" ]; do read -r -p "请输入已指向静态 IP 的域名: " DOMAIN; done while [ -z "$EMAIL" ]; do read -r -p "请输入接收证书提醒的邮箱: " EMAIL; done DOMAIN="${DOMAIN#http://}" DOMAIN="${DOMAIN#https://}" DOMAIN="${DOMAIN%%/*}" sudo apt update sudo apt install -y certbot python3-certbot-nginx sudo tee "/etc/nginx/sites-available/$DOMAIN" > /dev/null <<EOF server { listen 80; server_name $DOMAIN; root /var/www/html; index index.html; } EOF sudo ln -sf "/etc/nginx/sites-available/$DOMAIN" "/etc/nginx/sites-enabled/$DOMAIN" sudo nginx -t && sudo systemctl reload nginx sudo certbot --nginx -d "$DOMAIN" --non-interactive --agree-tos -m "$EMAIL" --redirect - 用 gcloud 复核。不确定资源建在哪,点控制台右上角 Cloud Shell,复制下面命令;它只查看 VM、静态 IP 和防火墙,不会删东西。若列表为空,多半是顶部项目选错。注意 Cloud Shell 不是刚才的 VM SSH 终端。
gcloud compute instances list gcloud compute addresses list gcloud compute firewall-rules list
与替代方案对比
先别急着用 Google GCP 开 VM 架网站。Compute Engine 像「自己租一台电脑」:共享主机像住酒店,有人打扫,最省心,但 PHP 版本、端口、可装软件常被限制;VM 自由度更高,root、防火墙、系统包都能改,代价是补丁、密钥、备份、监控要自己管。小白常以为「能连上就完事」,结果不打补丁,或把 0.0.0.0/0 全端口放开。对比前先看当前项目有什么:
gcloud --version
gcloud auth list
gcloud config list project
gcloud projects list
gcloud services list --enabled
gcloud compute instances list
gcloud app services list
gcloud run services list
gcloud storage buckets list
为什么先看?同一账号常有旧项目,选错项目会以为「服务不见了」。第一行检查 Google Cloud CLI;若报 command not found,先装 SDK 或改用 Cloud Shell。第二行只显示登录账号;若没有 ACTIVE 账号,先完成登录再回来。后面的项目、服务和资源列表都是查询,不会创建 VM。若提示 API 未启用或权限不足,多半是没用这个产品、项目没选对或权限不够,不是命令错;别把网上的创建、部署命令当测试乱跑。
- App Engine 和 Cloud Run:适合不想管服务器的应用,平台管实例、扩容和补丁;VM 适合自定义端口、系统包和迁移旧站。
- Cloud Storage:适合纯静态页面;有动态程序、数据库或后台任务时,VM 的「一台机器 + 数据库 + 进程」更容易理解。坑:PHP 丢进桶里不会执行。
- 其他云厂商 VM:AWS EC2、Azure VM、阿里/腾讯 CVM 思路接近:选镜像、规格、磁盘、防火墙、公网 IP。GCP 的优势是计费、网络、日志与 IAM 的组合,账单、排错、控权能串起来。坑:别天天用 Owner,别把密钥放进网站目录。
最佳实践
网站能打开只是第一步,想让它稳稳跑着、不半夜被暴力破解、也不收到天价账单,下面这几件「保命操作」一定要做。别怕,照着敲就行。
先把门关紧:防火墙和 SSH 默认把 22 端口开给全世界(0.0.0.0/0)是小白最常踩的坑,机器人几分钟就会来试密码。正确做法是:网站只对外开 80/443,SSH 只放行你自己家的 IP,并且彻底关掉密码登录、改用密钥。
# 1. 先查自己当前的公网 IP,记下来,把下面命令里的 你的IP 换掉
curl -s ifconfig.me
# 2. 收紧 SSH 规则,再单独建一条只给网站用的规则
gcloud compute firewall-rules update allow-ssh --source-ranges="你的IP/32"
gcloud compute firewall-rules create allow-web --allow=tcp:80,tcp:443 --source-ranges="0.0.0.0/0" --target-tags=http-server
# 3. ⚠️ 坑来了:千万别关掉当前这个 SSH 窗口!先另开一个窗口用密钥试登成功,再回来跑这行
sudo sed -i 's/^#*PasswordAuthentication.*/PasswordAuthentication no/' /etc/ssh/sshd_config && sudo systemctl restart sshd
为什么这么麻烦?密码能被硬猜出来,密钥几乎不能。一定要「先试登、再关密码」,不然会把自己锁在门外,只能去 GCP 控制台救场。另外家里宽带 IP 变了记得回来改一下规则。
权限给小一点,密钥别乱放 给 VM 绑服务账号时,别图省事直接勾「Editor」,只给「日志写入 + 监控写入」就够用了。更别把 .json 密钥丢进 /var/www/html,那等于贴在网站根目录让人用浏览器直接下载。顺手查一下,再定期更新补漏洞:
# 扫一眼网站目录有没有漏放的密钥,有输出就赶紧移走
sudo find /var/www/html -name "*.json" -o -name "*.pem"
# 系统和 Nginx 的已知漏洞靠这行堵上,建议每月跑一次
sudo apt update && sudo apt upgrade -y && sudo apt install --only-upgrade nginx -y
上线前先体检,钱和退路都留好 去 GCP「结算」设个 50 元预算提醒,去「快照」开每日自动备份,再打开 Cloud Monitoring,忘关机器或被人刷流量时不会吓一跳。别以为配完证书就完事了,DNS 没生效、证书忘续期太常见了,上线前敲这两行确认:
# 看域名是不是真的指到了这台机器,没输出就是还没生效
dig +short 你的域名.com
# 看证书起止日期,别上线第二天就变「不安全」
echo | openssl s_client -connect 你的域名.com:443 -servername 你的域名.com 2>/dev/null | openssl x509 -noout -dates
流量涨了别直接改生产环境 一看到卡就点「编辑机器类型」很危险:改配置要停机,万一新机型跟旧系统不兼容就起不来了。永远先打快照,留好回滚路径,再停机调整,改完立刻测,不对劲就用这份快照滚回去:
# 调配置前先手动存个档(替换成你的实例名和区域)
gcloud compute disks snapshot 你的实例名 --snapshot-names=before-resize-$(date +%F) --zone=asia-east1-b
记住这个顺序:快照 → 停机 → 改配置 → 开机测试 → 不行就回滚。别在正跑着的网站上「裸改」,这是最省心、也最救命的一条习惯。
常见问题(FAQ)
新手一定要会 Linux 命令吗?
只需掌握 SSH 登录、文件复制、服务重启和查看日志等基础命令即可。
架设 WordPress 可以吗?
可以,安装 Nginx 或 Apache、PHP、数据库,或直接使用市场镜像更快。
会被收很多费用吗?
先选小规格 VM,设置预算提醒,关机可停计算费,但磁盘仍会计费。
域名和证书怎么处理?
把域名解析到静态外部 IP,再为网站配置 HTTPS 证书即可。
不想自己折腾 GCP?我们提供云平台代维护、上云迁移与账单代付服务,一对一技术支持。
