Patet

发布到公网

你的应用在本地跑通了,下一步是让全世界都能访问——本篇帮你选对托管方式、把代码部署上去并配好 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(输出目录):你的框架打包后生成静态文件的文件夹。常见值:
框架输出目录
Vitedist
Astrodist
Next.js(静态导出)out
Hugopublic
Create React Appbuild

部署

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 —— 想要掌控或省钱时

  • 你拿到一台干净的 Linux 机器,从装运行时到配 Nginx 反向代理全自己来。
  • 适合:要跑特殊软件、需要长期低成本常驻、或单纯想学会运维。
  • 详细选购和搭建见 购买服务器便宜的云服务器

怎么选

第一次上线、又赶时间,就用 PaaS——几分钟就能跑起来。等你对流量、成本有了实感,或者想完全掌控,再迁到 VPS 也不迟。

把代码部署上去

不管走 PaaS 还是 VPS,现代部署的核心逻辑都一样:基于 Git 的部署

  1. 构建命令(build command):平台拉取你的代码后,执行它来生成可运行的产物。
  2. 产物目录(dist / output):静态站点指向打包好的文件夹;后端应用则是平台跑你的启动命令。
  3. 环境变量(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://

绑自定义域名也不难:

  1. 在平台的 Custom domains 里填上你的域名。
  2. 按提示在 DNS 里加一条 CNAME(或 A)记录指向平台。
  3. 等证书自动签发(通常几分钟),就能用自己的域名访问了。

常见坑

部署失败时先查这几项

  • 输出目录填错:部署成功但访问是空白/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 版本不一致(用 .nvmrcpackage.jsonengines 字段锁版本)。

监听端口和地址的正确写法(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:// 访问,自定义域名已生效

完整清单见 上线自查清单

本页目录