🌐 第一课:网站部署全景图

预计阅读时间:12 分钟  |  难度:入门 ⭐

📋 本课目标:看完这节课,你应该能画出"从敲完代码到用户访问"的完整链路图,知道每种部署方式适合什么场景,并能做出适合自己的技术选型。

1 一句话说清"网站部署"

网站部署,就是把写在你自己电脑上的代码,变成一台7×24 小时运行在互联网上的服务器里正在执行的服务——让全世界任何地方的任何人都能访问它。

听起来简单?但实际上它包含了一整条链路:

💻 开发 📦 构建 ☁️ 服务器 🔗 DNS ⚡ CDN 👤 用户

任何一个环节出问题,用户就访问不了你的网站。这就是为什么要系统性理解部署——而不是只会把文件传上去就完事。

2 三种主流部署方式

目前最常用的部署方式可以归为三大类。它们不是在"谁更好"的竞争关系,而是在复杂度、灵活性、运维成本三个维度上的不同取舍:

部署方式典型场景运维成本灵活度适合谁
传统手工部署 一台云服务器,SSH 上去手动配 Nginx、MySQL、跑应用 ⭐⭐⭐ 中 ⭐⭐⭐⭐⭐ 极高 想深入理解底层原理的开发者
容器化部署(Docker) 用 Docker 打包应用和依赖,一条命令启动全部服务 ⭐⭐ 较低 ⭐⭐⭐⭐ 高 需要环境一致性和快速迁移的团队
自动化部署(CI/CD + PaaS) Git push 后自动构建、测试、部署到服务器或云平台 ⭐ 低 ⭐⭐⭐ 中 追求效率、减少人为失误的团队
🍳 一个类比:三种做饭方式

传统手工部署 = 从种菜开始自己做一顿饭。最灵活(想放多少盐放多少),但每一步都得亲力亲为。
Docker 部署 = 用料理包。环境全都封装好了,加热即食,但口味是定好的。
CI/CD + PaaS = 点外卖。你把需求(代码)交出去,等吃就行。最省事,但也最不灵活。

3 选服务器:你要做的第一个决策

部署的第一步是选一台服务器。对初中级开发者来说,有一个清晰的优先级:

📌 团队或个人项目

首选:云服务器(VPS)——阿里云 ECS、腾讯云 CVM、华为云 HECS、AWS EC2、DigitalOcean Droplet 等。
性价比高,弹性扩展,控制台操作方便。入门配置(1核 2G)月费约 50~100 元(新人首年有优惠)。

📌 学习与实验

本地虚拟机——VirtualBox / VMware 安装 Ubuntu Server,零成本练习。
或用云厂商的"按量付费"模式,用完即停。

📌 追求极致简化

PaaS 平台——Vercel、Railway、Fly.io 等。把代码一推就行了。
但代价是灵活度有限,不适合定制需求。

4 域名与 DNS:用户怎么找到你的网站

用户在你的浏览器输入 https://example.com,发生了什么?

简单来说:

  1. 浏览器向 DNS 服务器查询 example.com 对应的 IP 地址
  2. DNS 返回 A 记录指向的 IP(比如 123.123.123.123
  3. 浏览器向该 IP 发起 HTTP 请求
  4. 服务器上的 Web 服务(Nginx)接收请求并返回网页

与部署相关的 DNS 核心概念:

记录类型作用示例
A 记录域名 → IPv4 地址@123.123.123.123
AAAA 记录域名 → IPv6 地址@2001:db8::1
CNAME 记录域名 → 另一个域名wwwexample.com
MX 记录域名 → 邮件服务器@mail.example.com
💡 常见误区:买了一台服务器,配好域名,发现还是访问不了——很可能是 DNS 没生效(DNS 缓存更新通常需要几分钟到 48 小时)。改完 DNS 后可以用 dig example.comGoogle DNS Check 验证解析状态。

5 部署拓扑:从单机到集群

对刚入门来说,大部分项目从 单体单机 开始就够了。但随着规模增长,部署拓扑会逐渐复杂化:

阶段一:单机部署

一台服务器上运行 Web 服务 + 数据库 + 应用。最常见、最便宜的方案。
✅ 适合:个人项目、小团队 MVP
❌ 问题:单点故障(服务器宕机=网站挂了)、升级要停机

阶段二:前后端分离部署

前端静态文件(HTML/CSS/JS)部署到 CDN 或对象存储;后端 API 部署在服务器上,用 Nginx 反向代理。
✅ 适合:前后端分离架构的项目

阶段三:多服务器 + 负载均衡

两台以上的应用服务器 + 一个负载均衡器分发流量,数据库独立部署。
✅ 适合:需要高可用和水平扩展的生产环境

6 部署流程全景:从代码到上线

无论你用哪种方式部署,完整流程大致如下。这也是本课程 5 节课将带你走过的路线:

  1. 准备服务器 —— 选购云服务器、操作系统初始化、SSH 配置 ← 第二课
  2. 安装运行时环境 —— Node.js/Python/Java、数据库、Web 服务器 ← 第二课
  3. 配置 Web 服务器 —— Nginx 反向代理、HTTPS 证书 ← 第二课
  4. 部署应用 —— 上传/拉取代码、安装依赖、启动服务 ← 第二、三课
  5. 容器化(可选) —— 编写 Dockerfile、Compose 编排 ← 第三课
  6. 自动化流水线 —— GitHub Actions 自动构建和部署 ← 第四课
  7. 安全加固 —— 防火墙、SSH 安全、备份策略、监控 ← 第五课

7 基础安全意识:从一开始就做对

不要在学完所有东西后才考虑安全——从第一天起就要有安全意识。以下是四条铁律,后面的课会逐一展开:

#原则为什么重要
1🔑 禁用密码登录,使用 SSH 密钥密码可以被暴力破解。SSH 密钥使用 2048 位以上的 RSA 或 Ed25519 加密,安全等级高出几个数量级。
2🧱 最小权限防火墙只开放必要的端口(22、80、443),其他一律关闭。数据库端口(3306、5432)绝对不对公网开放。
3🔒 HTTPS 不是可选项没有 HTTPS,数据明文传输。Let's Encrypt 提供免费证书,没有理由不启用。
4📦 定期备份"什么时候开始备份?"——在丢数据之前。3-2-1 备份原则:3 副本、2 介质、1 份异地。

8 小测验

Q1: 用户输入域名访问网站时,第一步发生的是什么?

Q2: 以下对 3-2-1 备份原则的描述,哪项是正确的?

Q3: 你的数据库部署在云服务器上,以下哪项是正确做法?

📖 推荐官方文档

📌 第二课预告

第二课:传统云服务器手工部署

从购买一台云服务器开始,SSH 连上去,配置 Nginx 反向代理,部署一个 Web 应用,配置 HTTPS——亲手走完一套完整的手工部署流程。