发布到公网
你的应用在本地跑通了,下一步是让全世界都能访问——本篇帮你选对托管方式、把代码部署上去并配好 HTTPS。
你的应用在本地 localhost 跑得好好的,但别人还访问不到它。要上线,最关键的决定其实是:用哪种方式托管。选对了,后面一路顺;选错了,会在不必要的运维上耗掉很多时间。
下面我们先帮你把三条路看清楚,再带你走最省心的那一条,最后把代码部署、HTTPS 和常见坑都讲明白。
三种上线方式
绝大多数项目都能落到下面三类里。先对号入座,再往下看。
| 方式 | 最适合 | 投入精力 | 费用 | 扩容 |
|---|---|---|---|---|
| 静态托管(Cloudflare Pages、Vercel、Netlify、GitHub Pages) | 纯静态页面、SPA、SSG(如 Vite、Next.js 静态导出、Astro、Hugo) | 最低,连上 Git 就能用 | 几乎免费(多数有慷慨免费额度) | 平台自动搞定,全球 CDN |
| Serverless / PaaS(Vercel、Railway、Render、Fly.io) | 有后端但不想管服务器的应用(API、SSR、带数据库的全栈应用) | 低,写好 build 命令即可 | 免费档够试水,正式用月付几美元起 | 平台托管,按量或一键加实例 |
| 自己的服务器(VPS) | 需要完全掌控:自定义运行时、长驻进程、特殊端口、成本敏感的常驻负载 | 高,要自己装环境、配反代、做安全 | VPS 每月 $4–6 起,固定可控 | 要自己加机器、配负载均衡 |
简单的判断法:
- 没有后端(页面、工具站、文档、营销页)→ 走静态托管,这是最省心的。
- 有后端但不想碰服务器(全栈应用、API)→ 走 Serverless / PaaS。
- 想要完全掌控、或要省长期成本 → 上自己的 VPS,配套看 购买服务器 和 便宜的云服务器。
最简单的路径:静态站点
如果你的项目能 build 出一堆静态文件(HTML / CSS / JS),那恭喜你——上线只要几分钟。下面以 Cloudflare Pages 为例(Vercel、Netlify 步骤几乎一样)。
把代码推到 Git
先把项目推到 GitHub(或 GitLab)。平台是通过连接你的仓库来自动部署的,所以代码必须先在远端。
git init
git add .
git commit -m "first deploy"
git remote add origin git@github.com:你的用户名/你的项目.git
git push -u origin main连接仓库
登录 Cloudflare Dashboard,进入 Workers & Pages → 创建 → Pages → 连接到 Git,授权并选中你的仓库。
设置构建命令和输出目录
这是最容易出错的一步,务必填对:
- Build command(构建命令):
npm run build(或pnpm build/bun run build,看你用什么包管理器) - Build output directory(输出目录):你的框架打包后生成静态文件的文件夹。常见值:
| 框架 | 输出目录 |
|---|---|
| Vite | dist |
| Astro | dist |
| Next.js(静态导出) | out |
| Hugo | public |
| Create React App | build |
部署
点 Save and Deploy。平台会拉取代码、跑构建、把产物发布到全球 CDN。等绿色对勾出现,你就拿到一个 *.pages.dev 的临时网址了,打开就能访问。
之后每次推送都自动部署
配好之后,你每次 git push 到主分支,平台都会自动重新构建并上线。改完代码推一下就完事,不用再手动操作。
Vercel 和 Netlify 体验几乎一样:连 Git → 设构建命令和输出目录 → 部署。它们通常还能自动识别常见框架,连配置都帮你猜好。
有后端的应用
如果你的应用需要一个常驻进程(处理 API 请求、连数据库、跑后台任务),就不能只靠静态托管了。这时有两条路:
PaaS(Railway / Render / Fly.io)—— 推荐先试这条
- 你只管写代码,平台负责跑容器、给你域名、配 HTTPS、看日志。
- 连上 Git 仓库就能部署,和静态托管一样省心。
- 适合:全栈应用、Node/Python/Go 后端、需要数据库的项目。
- Railway、Render 都能顺带开个托管数据库(Postgres / Redis),不用自己装。
- 缺点:流量大了之后单价比 VPS 贵,平台也有一定锁定性。
自己的 VPS —— 想要掌控或省钱时
怎么选
第一次上线、又赶时间,就用 PaaS——几分钟就能跑起来。等你对流量、成本有了实感,或者想完全掌控,再迁到 VPS 也不迟。
把代码部署上去
不管走 PaaS 还是 VPS,现代部署的核心逻辑都一样:基于 Git 的部署。
- 构建命令(build command):平台拉取你的代码后,执行它来生成可运行的产物。
- 产物目录(dist / output):静态站点指向打包好的文件夹;后端应用则是平台跑你的启动命令。
- 环境变量(environment variables):密钥、数据库连接串、第三方 API key——这些绝对不能写死在代码里,要在平台的控制台里设置。
一个典型的构建 + 启动流程长这样:
# 安装依赖(用 lockfile 保证版本一致)
npm ci
# 构建
npm run build
# 启动(后端应用;静态站点不需要这步)
npm start千万别把密钥提交进 Git
数据库密码、API key、JWT 密钥等敏感信息一律走环境变量,在平台控制台里配置,不要写进代码或 .env 文件后提交。把 .env 加进 .gitignore。一旦泄露到 Git 历史,即使删掉也等于已经公开了。
在 PaaS 里,进项目的 Settings → Variables / Environment 就能加环境变量。代码里通过 process.env.DATABASE_URL 这样读取,本地用 .env 文件、线上用平台变量,互不干扰。
HTTPS 与自定义域名
好消息:绝大多数平台都自动送免费 HTTPS。Cloudflare Pages、Vercel、Netlify、Railway、Render 都会自动给你签发并续期证书,你什么都不用做,访问就是 https://。
绑自定义域名也不难:
- 在平台的 Custom domains 里填上你的域名。
- 按提示在 DNS 里加一条 CNAME(或 A)记录指向平台。
- 等证书自动签发(通常几分钟),就能用自己的域名访问了。
- 还没有域名?看 购买域名。
- 想用 Cloudflare 管 DNS、加 CDN 和防护?看 接入 Cloudflare。
常见坑
部署失败时先查这几项
- 输出目录填错:部署成功但访问是空白/404,多半是 output directory 写错了(比如该填
dist写成了build)。 - 少配环境变量:本地有
.env,线上没配,应用一启动就因为读不到密钥而崩溃。逐个核对平台变量。 - 监听了错误的端口 / 地址:线上要监听平台注入的
process.env.PORT,并绑定到0.0.0.0(不是localhost/127.0.0.1),否则外部根本连不进来。 - 忘了设
NODE_ENV=production:会拖慢性能,有时还会触发只在生产暴露的 bug。 - 本地能 build,CI 上挂:通常是 lockfile 没提交(用
npm ci而非npm install),或 Node 版本不一致(用.nvmrc或package.json的engines字段锁版本)。
监听端口和地址的正确写法(Node 示例):
const port = process.env.PORT || 3000;
app.listen(port, "0.0.0.0", () => {
console.log(`listening on ${port}`);
});本步骤检查清单
- 想清楚走哪条路:静态托管 / Serverless·PaaS / 自己的 VPS
- 代码已推到 Git,构建命令和输出目录都填对了
- 所有密钥都通过环境变量配置,没有写死在代码里
- 应用监听
process.env.PORT并绑定0.0.0.0 - 确认线上是
https://访问,自定义域名已生效
完整清单见 上线自查清单。