部署入门:从代码到上线,一个网站是怎么跑起来的
很多刚学建站的人都有一个疑惑:代码在自己电脑上跑得好好的,怎么让全世界的人都访问到?这个过程就叫部署(Deployment)。打个比方:部署就像开外卖店——你(开发者)负责做菜,部署就是把做好的菜端到店面、摆上柜台、打开门营业,让顾客能下单取餐。顾客(访客)看到的店面,就是你放在服务器上、正在运行的网站。本文把这条"从代码到上线"的链路拆开讲,并对比五种常见部署方式。
部署是什么
一句话:部署是把代码从开发环境搬到一个长期运行的服务器环境,并让它对外提供服务的过程。 开发环境是"厨房"(本地电脑),生产环境是"店面"(服务器)。部署不止是"把文件传上去",还包括装依赖、配数据库、设置域名与 HTTPS、启动服务、检查是否正常。想先弄清服务器和网站的关系,可看云服务器基础。
从代码到上线的完整链路
一条完整的发布链路通常有五个阶段,任何一环出错都可能让上线翻车:
- 开发(Develop):在本地写代码、调试,用 Git 记录每次改动。多人协作时用分支管理功能与修复,参考Git 部署工作流。
- 构建(Build):把源码变成可运行产物——压缩 JS/CSS、打包前端资源、编译后端、生成静态文件。这一步在本地和服务器上都要能做,且结果要一致。
- 测试(Test):在"测试环境"跑一遍:功能是否正常、有没有报错、接口通不通、数据库迁移有没有问题。测试环境尽量和生产环境保持一致,否则"本地好、线上炸"。
- 发布(Release):把构建好的产物推到生产服务器,切换流量、更新版本号。发布时机的选择直接影响用户体验,想平滑切换可参考零停机部署策略。
- 运行与监控(Run & Monitor):服务跑起来后不是结束,要看日志、监控错误率与资源占用,出了问题能第一时间回滚。
五种常见部署方式对比
| 方式 | 原理 | 上手难度 | 适合 | 缺点 |
|---|---|---|---|---|
| 手动部署 | 登录服务器,一条条敲命令拉代码、起服务 | 中 | 单机、实验项目 | 容易漏步骤、不可复现 |
| FTP 上传 | 用 FileZilla 等把文件拖到服务器目录 | 低 | 静态站、老式虚拟主机 | 无法管理版本、易出错 |
| Git 拉取 | 服务器上 git pull 拉最新代码再重启 | 中 | 小团队、代码托管 | 仍是半自动 |
| CI/CD 流水线 | 提交代码自动构建、测试、发布 | 中高 | 中大型项目、高频迭代 | 需要维护流水线 |
| 容器部署 | 用 Docker 打包环境,一次构建随处运行 | 中高 | 多环境一致、微服务 | 有学习成本 |
各方式怎么选
- 个人博客、静态站:用 FTP 或直接托管平台最简单,几分钟上线。
- 小团队、WordPress/动态站:从 Git 部署开始,既留版本记录又省事。
- 需要频繁迭代的项目:尽早引入 CI/CD,把构建和测试交给机器,详见CI/CD 流水线搭建。
- 环境复杂、要多套环境:用容器打包,开发、测试、生产完全一致,可参考Docker 部署网站指南。
第一次部署的完整步骤
如果你是第一次部署,按这个顺序做最不容易出错:
- 准备服务器:买好服务器,装好系统(推荐 Ubuntu/Debian 或 CentOS 系),配置 SSH 密钥登录并关闭密码登录,见服务器初始化设置。
- 装好运行环境:按技术栈安装 Web 服务(Nginx/Apache)、语言运行时(PHP/Node/Python)、数据库与扩展,版本和本地保持一致。
- 把代码弄上去:先 Git clone 到服务器,装依赖、跑数据库迁移、配置环境变量(密钥别写进代码库)。
- 配域名与 HTTPS:把域名解析到服务器 IP,用 Certbot 等工具申请免费 SSL 证书并配置自动续期。
- 启动并验证:启动服务,访问域名确认首页、登录、接口都正常;再看一遍日志确认没有报错。
- 补上兜底:设置定时备份、监控告警,并记录一次"如何回滚",上线后心里才有底。
常见问题(FAQ)
Q1:部署和发布是一回事吗? 大致是,但严格说"发布"更强调把新版本切换给用户的动作,是部署链路的最后一环。Q2:一定要用 CI/CD 吗? 不一定。小项目手动或 Git 部署足够,项目变复杂、团队变大后再上流水线,避免一上来就被工具淹没。Q3:上线后还能改吗? 能,每次改动都走"改代码→测试→发布"的流程;建议保留上一次可用的版本用于回滚。Q4:本地正常、线上报错怎么办? 优先核对环境差异:PHP/Node 版本、扩展、数据库版本、目录权限,多半是这里不一致。