服务器——硬件篇
服务器是什么?
说白了,服务器就是一台24 小时开机、连着网的电脑。
它和你桌上的电脑没有本质区别——都有 CPU、内存、硬盘、网卡。区别在于:
- 服务器放在数据中心(机房),有稳定的电力和网络
- 服务器 24/7 运行,不关机(除非维护)
- 服务器有公网 IP,全世界都能通过互联网访问它
- 服务器通常没有显示器、键盘、鼠标——你通过网络远程操控它
- 服务器的硬件更注重稳定性和持久运行,而不是极致性能
数据中心长什么样?
如果你去参观一个数据中心(机房),你会看到一排排巨大的机柜,里面塞满了服务器。每台服务器大概是一个 pizza 盒子的大小(1U 或 2U 高度),水平插在机柜里。
机房里有:
- 恒温空调:服务器发热量巨大,需要持续散热
- UPS 不间断电源:停电时电池接管,保证服务器不断电
- 备用发电机:长时间停电时启动
- 多条网络线路:确保网络不中断
- 物理安全:门禁、监控、防火系统
你租的云服务器,就是这些机房里某台物理机器上的一个"虚拟隔间"。
物理服务器 vs 云服务器
物理服务器(独立服务器 / Dedicated Server)
真正的一台机器,放在机房里,所有资源都是你的。就像买了一套房——空间全是你的,但维护也是你的事。
- 优点:性能最好、资源独占、完全控制
- 缺点:价格贵(几百到几千元/月)、需要自己维护硬件、扩容麻烦(要换物理机器)
- 适合:大型网站、游戏服务器、有特殊硬件需求的场景
云服务器(VPS / Cloud Instance)
一台物理服务器通过虚拟化技术被分成多个"虚拟机",你租用其中一个。就像合租公寓——你有自己的房间(独立的操作系统和资源),但和别人共享一栋楼(物理硬件)。
- 优点:便宜、弹性伸缩(随时升降配置)、不用管硬件、按需付费
- 缺点:性能不如独立服务器(和别人共享物理资源)、极端情况下可能受"邻居"影响
- 适合:绝大部分场景,尤其是个人项目和中小型应用
你的 DigitalOcean 服务器就是云服务器(他们叫它 "Droplet")。
虚拟化是怎么工作的?
你可能好奇:一台物理机器怎么变成多台"虚拟机器"?
答案是Hypervisor(虚拟机管理程序)。它是一层软件,运行在物理硬件之上,负责把 CPU、内存、硬盘等资源分配给多个虚拟机。每个虚拟机都以为自己独占了一台完整的电脑,但实际上它们共享物理资源。
物理服务器(64核 CPU / 256GB 内存 / 4TB SSD)
├── Hypervisor(资源调度)
│ ├── 虚拟机 A(2核 / 2GB / 80GB)← 你的服务器
│ ├── 虚拟机 B(4核 / 8GB / 160GB)← 别人的服务器
│ ├── 虚拟机 C(2核 / 4GB / 80GB)← 另一个人的
│ └── ... 还有很多
这就是为什么云服务器便宜——一台几十万的物理服务器,可以分出几十个虚拟机来卖,每个只收几十块钱/月。
主流云服务商对比
| 服务商 | 特点 | 参考价格 | 优惠方案 |
|---|---|---|---|
| DigitalOcean | 简单易用,界面清爽,文档极好 | $18/月 | GitHub 学生包送 $200 额度(1年有效) |
| Vultr | 节点多(32个),性价比高 | $15/月 | 新用户注册送 $300 额度(30天有效) |
| AWS Lightsail | 亚马逊出品,功能丰富 | $20/月 | 新用户 3 个月免费试用 |
| 阿里云 | 国内访问快,中文文档全 | ¥40-60/月 | 新用户 ¥300 无门槛代金券;活动价低至 ¥99/年 |
| 腾讯云 | 类似阿里云,学生优惠力度大 | ¥50-70/月 | 学生认证低至 ¥65/年;新用户有代金券 |
| Cloudflare | CDN + Workers,边缘计算 | 免费起步 | 免费套餐足够个人使用 |
| Vercel / Netlify | 前端部署专用,零配置 | 免费 | 免费套餐含自定义域名和 HTTPS |
注:「参考价格」统一按 2 核 CPU / 2GB 内存 / 40-80GB SSD 的入门配置计算(Cloudflare 和 Vercel 为 Serverless/静态托管,无此配置)。优惠方案和价格信息截至 2026 年 5 月,具体以官网为准。
大一学生怎么选?
如果你的网站主要面向国内用户 → 阿里云/腾讯云(国内访问快,但需要备案)
如果面向全球或不想备案 → DigitalOcean / Vultr(新加坡节点对国内延迟也还行)
如果只是静态网站 → GitHub Pages / Cloudflare Pages / Vercel(免费!不需要服务器)
如果想学习云计算 → AWS 免费套餐(12个月免费,但要小心别踩坑产生费用)
对于大部分大一学生的个人项目,DigitalOcean 的 $6/月套餐(1核/1GB/25GB)就绑绑有余了。如果只是静态网站,直接用免费方案,一分钱不花。
操作系统:为什么几乎都是 Linux?
你可能好奇:服务器能装 Windows 或 macOS 吗?
技术上可以,但几乎没人这么做。 原因:
| Linux | Windows Server | macOS Server | |
|---|---|---|---|
| 价格 | 免费开源 | 需要授权费(几千元/年) | 只能跑在苹果硬件上 |
| 资源占用 | 极低(纯命令行约 200MB 内存) | 较高(GUI 吃 1-2GB 内存) | 不适用于服务器 |
| 稳定性 | 极好,可以连续运行几年不重启 | 还行,但系统更新经常要重启 | 苹果已放弃服务器市场 |
| 生态 | 所有服务器软件的首选平台 | 主要用于 .NET/SQL Server | 几乎没有服务器生态 |
| 远程管理 | SSH(纯文本,几KB流量) | 远程桌面(图形界面,吃带宽) | 不实用 |
| 安全性 | 开源,漏洞发现快修复快 | 闭源,依赖微软更新 | 不适用 |
| 社区 | 极其庞大,问题都能搜到答案 | 相对小 | 几乎没有 |
所以现实是:超过 96% 的公网服务器跑 Linux。剩下的大部分是 Windows Server(用于 .NET 应用和 Active Directory 企业环境)。macOS 服务器基本不存在。
Linux 发行版的选择
Linux 有很多"发行版"(Distribution),就像安卓有很多品牌的手机。服务器上最常用的:
| 发行版 | 特点 | 适合 |
|---|---|---|
| Ubuntu Server | 对新手友好,文档多,社区大 | 个人项目、学习 |
| Debian | Ubuntu 的"上游",更稳定保守 | 追求稳定的生产环境 |
| CentOS / Rocky Linux | Red Hat 系,企业常用 | 企业环境 |
| Alpine | 极其轻量(5MB),常用于 Docker | 容器化部署 |
本书后续所有操作都基于 Ubuntu Server。 如果你用 DigitalOcean 创建 Droplet,选择 Ubuntu 22.04 或 24.04 LTS(Long Term Support,长期支持版)就好。
为什么服务器没有图形界面?
准确说,Linux 可以装图形界面(GNOME、KDE 等),但服务器上故意不装。原因:
- 省内存:图形界面至少吃 500MB-1GB 内存。你的 2GB 服务器装了图形界面,可用内存直接砍半
- 省 CPU:图形渲染需要 CPU 资源,而服务器的 CPU 应该用来处理请求
- 没必要:服务器不需要"看"——你通过 SSH 命令行操作一切
- 安全:少一个组件 = 少一个潜在的安全漏洞
- 稳定:图形界面的 bug 不会影响服务器运行
所以服务器的交互方式就是:SSH 连接 → 命令行操作。一开始可能不习惯,但用几天就会发现命令行比图形界面高效得多——尤其是批量操作和自动化的时候。
命令行 vs 图形界面:一个例子
假设你要把 100 张图片重命名为 photo-001.jpg 到 photo-100.jpg:
图形界面:右键 → 重命名 → 输入新名字 → 重复 100 次(大约 30 分钟)
命令行:
i=1; for f in *.jpg; do mv "$f" "photo-$(printf '%03d' $i).jpg"; ((i++)); done
一行命令,1 秒完成。
这就是为什么运维工程师都用命令行——效率差距是数量级的。
CPU:核数怎么选?
CPU 核数决定了服务器能同时处理多少任务。一个核心在同一时刻只能执行一个线程的指令。
理解"核"的概念
- 1 核:同一时刻只能做一件事。但因为切换速度极快(微秒级),看起来像是同时做很多事
- 2 核:真正能同时做两件事
- 4 核:真正能同时做四件事
但这不意味着 1 核服务器只能服务 1 个用户。因为大部分时间 CPU 都在"等待"——等网络数据、等硬盘读写。在等待的时候,CPU 可以去处理其他请求。
一个 1 核服务器,跑 Nginx 提供静态文件,轻松应对每秒几千个请求。因为提供静态文件主要是 I/O 操作(读硬盘、发网络),CPU 几乎不怎么忙。
什么时候 CPU 会成为瓶颈?
- 加密/解密:HTTPS 握手需要 CPU 计算(但现代 CPU 有硬件加速,影响不大)
- 图片/视频处理:压缩、转码、缩放
- 复杂计算:AI 推理、数据分析、密码哈希
- 高并发下的后端逻辑:同时处理大量请求的业务代码
你的场景需要多少核?
| 用途 | 推荐核数 | 原因 |
|---|---|---|
| 纯静态网站(Nginx) | 1 核 | Nginx 极其轻量 |
| 个人博客 + 小型后端 | 1-2 核 | 日常访问量不大 |
| 中型 Web 应用(几百日活) | 2-4 核 | 需要同时处理多个请求 |
| 数据库服务器 | 4+ 核 | 复杂查询是 CPU 密集型 |
| AI 推理 / 视频转码 | 8+ 核或 GPU | 计算密集型任务 |
你的 DigitalOcean 2 核配置,对于个人主页 + 几个小项目来说完全够用。实际上,如果你只是托管静态网站,1 核都绑绑有余。
内存(RAM):最容易成为瓶颈的资源
内存是服务器上最容易不够用的资源。操作系统、Nginx、你的后端程序、数据库——都需要常驻内存。
各组件的典型内存占用
| 组件 | 典型内存占用 | 说明 |
|---|---|---|
| Ubuntu 系统本身 | 200-400 MB | 内核 + 系统服务 |
| Nginx | 10-50 MB | 极其轻量 |
| Node.js 应用(小型) | 50-150 MB | V8 引擎有基础开销 |
| Node.js 应用(中型) | 150-500 MB | 取决于数据量和依赖 |
| Python 应用(Flask) | 30-100 MB | 比 Node.js 轻一些 |
| PostgreSQL | 200-500 MB | 默认配置 |
| MySQL | 200-400 MB | 默认配置 |
| Redis | 10-100 MB | 取决于缓存数据量 |
| Docker | 50-100 MB | Docker daemon 本身 |
| 每个 Docker 容器 | 各不相同 | 取决于容器内的应用 |
算一笔账:2GB 够不够?
假设你的服务器跑这些东西:
- Ubuntu 系统:~300 MB
- Nginx:~30 MB
- 一个 Node.js 后端:~100 MB
- PostgreSQL 数据库:~300 MB
- 总计:~730 MB
2GB 内存还剩约 1.3GB 的余量,完全够用。
但如果你贪心,想同时跑:
- 系统:300 MB
- Nginx:30 MB
- 三个 Node.js 项目:300 MB
- PostgreSQL:300 MB
- Redis:50 MB
- Docker:100 MB
- 总计:~1080 MB
还是够的,但余量不多了。如果某个应用突然内存飙升(比如处理大文件),可能就吃紧了。
什么时候内存不够?
- 跑太多应用:每个应用都有基础内存开销
- 内存泄漏:程序 bug 导致内存越用越多,永远不释放
- 流量突增:每个并发连接都占一点内存,连接多了就吃紧
- 大文件处理:一次性把大文件读入内存
- 数据库查询大结果集:一次查询返回几万行数据
内存不够会怎样?
Linux 有一个叫 OOM Killer(Out of Memory Killer)的机制——当内存完全耗尽时,系统会强制杀掉占内存最多的进程来释放内存。
如果被杀的是你的后端程序 → 网站 API 挂了 如果被杀的是数据库 → 可能丢数据 如果被杀的是 Nginx → 整个网站都访问不了
所以内存要留有余量,不要把服务器塞得满满的。
Swap:内存不够时的"应急方案"
Linux 可以把一部分硬盘空间当作"虚拟内存"使用,叫做 Swap。当物理内存不够时,系统会把不常用的数据从内存"换出"到 Swap(硬盘上),腾出内存给急需的程序。
# 创建 2GB 的 Swap 文件
sudo fallocate -l 2G /swapfile
sudo chmod 600 /swapfile
sudo mkswap /swapfile
sudo swapon /swapfile
# 永久生效(写入 fstab)
echo '/swapfile none swap sw 0 0' | sudo tee -a /etc/fstab
Swap 的问题是:硬盘比内存慢几百倍。如果系统频繁使用 Swap,性能会急剧下降。Swap 只是"不至于崩溃"的保底方案,不能替代真正的内存。
实用建议
对于 2GB 内存的服务器,建议设置 1-2GB 的 Swap。这样即使偶尔内存吃紧,系统也不会直接 OOM Kill 你的进程。但如果你发现 Swap 经常被大量使用,说明该升级内存了。
硬盘:SSD 的选择
SSD vs HDD
| SSD(固态硬盘) | HDD(机械硬盘) | |
|---|---|---|
| 读取速度 | 500-7000 MB/s | 100-200 MB/s |
| 写入速度 | 500-5000 MB/s | 80-160 MB/s |
| 随机读写 | 极快(无寻道时间) | 慢(机械臂需要移动) |
| 价格 | 约 ¥0.5-1/GB | 约 ¥0.1-0.2/GB |
| 可靠性 | 无机械部件,不怕震动 | 有机械臂和盘片,怕震动 |
| 寿命 | 有写入次数限制(但很高) | 机械磨损 |
| 噪音 | 无 | 有(盘片旋转声) |
云服务器几乎都用 SSD,因为服务器对随机读写速度要求很高。想想看:
- 用户访问网页 → Nginx 从硬盘读取 HTML 文件
- 数据库查询 → 从硬盘读取数据
- 写日志 → 往硬盘写入
这些操作都是随机的(不是顺序读写一个大文件),SSD 在随机读写上比 HDD 快 100 倍以上。
NVMe SSD vs 普通 SSD
在 DigitalOcean 选择 Droplet 配置时,你会看到 CPU Options 里有 "Regular(Disk Type: SSD)" 和 "Premium(Disk Type: NVMe SSD)" 两种选项。它们的区别:
| 普通 SSD(SATA SSD) | NVMe SSD | |
|---|---|---|
| 接口 | SATA(和 HDD 共用的老接口) | NVMe(直连 PCIe 总线) |
| 顺序读取 | ~500 MB/s | 3000-7000 MB/s |
| 随机读写 | ~50,000 IOPS | ~500,000 IOPS |
| 延迟 | ~100 微秒 | ~10 微秒 |
| 价格 | 便宜一些 | 贵一些 |
简单说:NVMe SSD 比普通 SSD 快 5-10 倍,因为它绕过了 SATA 接口的瓶颈,直接通过 PCIe 通道和 CPU 通信。
对于个人项目,两者体感差异不大(你的网站文件才几十 MB,读取都是瞬间完成的)。但如果你跑数据库或者有大量并发读写,NVMe 的优势就明显了。DigitalOcean 的 Premium 套餐(NVMe)比 Regular 贵几美元/月,预算够的话选 Premium,不够的话 Regular 也完全够用。
80GB 够吗?
看你存什么:
| 内容 | 典型大小 |
|---|---|
| Ubuntu 系统 + 基础工具 | 3-5 GB |
| Nginx + Node.js + npm 包 | 1-3 GB |
| 你的网站代码(静态文件) | 10-100 MB |
| 数据库数据(小型项目) | 10-500 MB |
| 日志文件(累积) | 100 MB - 几 GB |
| Docker 镜像(如果用 Docker) | 每个 500MB-2GB |
| 系统更新缓存 | 1-3 GB |
对于个人项目,80GB 绰绰有余。你的静态网站可能总共才几十 MB。即使加上数据库和日志,用到 20GB 都难。
硬盘空间的隐形杀手
几个容易让硬盘悄悄变满的东西:
- 日志文件:Nginx、应用程序、系统日志会持续增长。设置 logrotate 自动轮转和清理
- Docker 镜像和容器:每个镜像几百 MB 到几 GB,旧镜像不清理会堆积
- apt 缓存:系统更新下载的包缓存。定期
sudo apt clean - npm 缓存:Node.js 项目的 node_modules 可以很大
- 数据库备份:如果你设置了自动备份但不清理旧备份
建议定期检查:df -h(查看硬盘使用情况)
带宽与流量
带宽是什么?
带宽是服务器网络连接的最大速度,决定了数据传输的上限。比如 1Gbps 带宽意味着理论上每秒能传输 1Gb(约 125MB)的数据。
为什么 1Gb = 125MB?
网络带宽用 bit(比特) 计量,文件大小用 Byte(字节) 计量。1 Byte = 8 bit。所以 1 Gbps ÷ 8 = 125 MB/s。这也是为什么你家 100Mbps 宽带下载速度只有约 12.5 MB/s——不是运营商骗你,是单位换算。
用水管类比:带宽就是水管的粗细。管子越粗,同一时刻能流过的水越多。
流量是什么?
流量是一段时间内实际传输的数据总量。比如 DigitalOcean 基础套餐每月包含 2TB 出站流量。
用水管类比:流量就是一个月总共用了多少水。
带宽 vs 流量:哪个更重要?
| 带宽 | 流量 | |
|---|---|---|
| 影响什么 | 同时访问时每个人的速度 | 一个月能服务多少次访问 |
| 类比 | 高速公路的车道数 | 一个月的总通行量 |
| 什么时候是瓶颈 | 突发高并发(很多人同时访问) | 持续高流量(每天大量访问) |
对于个人项目,两者都不太可能成为瓶颈。算一下:
你的个人主页大约 500KB(HTML + CSS + JS + 字体)。
- 2TB 月流量 = 2,000,000 MB
- 每次访问传输 500KB = 0.5MB
- 可以被访问 400 万次/月
除非你的网站突然上了热搜,否则流量永远不会成为问题。
入站流量 vs 出站流量
- 入站流量(Inbound):从外部到服务器的数据(用户上传文件、你 SSH 连接时输入的命令)
- 出站流量(Outbound):从服务器到外部的数据(用户下载网页、图片、API 响应)
大部分云服务商只计算出站流量,入站流量免费。因为 Web 服务器主要是"发送"数据给用户。
数据中心位置(Region)
选服务器时还要选"区域"——服务器物理上放在哪个城市的机房。
延迟(Latency)
数据在光纤中传输需要时间。虽然光速很快(约 20 万公里/秒在光纤中),但地球很大:
| 路线 | 单程延迟 | 往返延迟(RTT) |
|---|---|---|
| 同城 | 1-5 ms | 2-10 ms |
| 北京 → 上海 | 10-15 ms | 20-30 ms |
| 北京 → 新加坡 | 30-50 ms | 60-100 ms |
| 北京 → 东京 | 25-40 ms | 50-80 ms |
| 北京 → 美国西海岸 | 80-120 ms | 160-240 ms |
| 北京 → 欧洲 | 100-150 ms | 200-300 ms |
每次网页加载可能需要几十个请求(HTML、CSS、JS、图片等),每个请求都有一个 RTT。如果 RTT 是 200ms,加载一个有 20 个资源的页面,光网络延迟就可能超过 1 秒。
选择建议
- 用户主要在国内 → 选国内云(阿里云/腾讯云的北京、上海、深圳节点)
- 用户在东亚 → 新加坡、东京、香港节点
- 用户全球分布 → 选一个中心位置,或者用 CDN 加速
- 不确定 → 新加坡是个不错的折中(对中国、东南亚、澳洲延迟都不高)
关于"备案"
如果你用国内服务器(阿里云/腾讯云的中国大陆节点)+ 自己的域名,需要做 ICP 备案。这是中国法规要求,过程大约 1-3 周,需要提交身份证照片等材料。
如果你用海外服务器(DigitalOcean、Vultr、阿里云的海外节点等),则不需要备案。但国内用户访问海外服务器会有更高的延迟。
对于个人学习项目,用海外服务器(不备案)是最省事的选择。等你有正式的面向国内用户的项目时,再考虑备案。
怎么选配置?决策指南
决策流程图
你要部署什么?
│
├── 纯静态网站(HTML/CSS/JS)
│ ├── 方案 A:GitHub Pages / Vercel(免费,零运维)
│ └── 方案 B:最低配云服务器(1核/1GB/25GB,$4-6/月)
│
├── 静态网站 + 简单后端 API
│ └── 入门配置:1-2核 / 2GB / 50-80GB SSD($6-12/月)
│
├── 完整 Web 应用(后端 + 数据库 + 可能的文件存储)
│ └── 标准配置:2核 / 2-4GB / 80GB SSD($12-24/月)
│
├── 多个项目 / 中等流量 / Docker 部署
│ └── 进阶配置:2-4核 / 4-8GB / 160GB SSD($24-48/月)
│
└── 不确定 / 想留余量
└── 先买小的,不够再升级(云服务器升级只需几分钟)
你的 DigitalOcean 配置分析
2 核 CPU / 2GB 内存 / 80GB SSD——这是一个非常合理的"学生级入门"配置:
- 2 核:足够同时跑 Nginx + 后端程序 + 数据库,还有余力处理并发
- 2GB 内存:能舒服地跑系统 + Nginx + 一两个应用 + 小型数据库
- 80GB SSD:对于代码、数据库和日志绰绰有余
这个配置大约 $12/月(约 ¥85/月),性价比很好。它能覆盖你未来 1-2 年内可能的所有个人项目需求。
省钱技巧
- 静态网站不需要服务器:用 GitHub Pages、Cloudflare Pages、Vercel——全免费
- 先用最低配:$4-6/月的 1核/1GB 对于学习和小项目足够
- 学生优惠:GitHub Student Developer Pack 包含 DigitalOcean $200 额度
- 按需开关:不用的时候可以关机(DigitalOcean 关机不收 CPU 费用,但硬盘费照收)
- 年付优惠:很多服务商年付比月付便宜 10-20%
选配置的核心原则
先用小的,不够再升。 云服务器的好处就是可以随时升级配置(通常只需要几分钟的停机时间)。不要一开始就买很贵的配置"以防万一"——等真正遇到瓶颈再升级,既省钱又能让你理解"为什么需要更多资源"。
反过来,降级配置通常比较麻烦(可能需要迁移数据)。所以硬盘空间可以稍微选大一点,CPU 和内存选小的就好。
小结
服务器硬件选择其实没那么复杂,记住这几点:
- 操作系统:Ubuntu Server(别想了,就它)
- CPU:个人项目 1-2 核足够,CPU 很少是瓶颈
- 内存:2GB 是个好起点,4GB会更加充裕,内存是最容易不够的资源(太小的内存可能VSCode SSH都会频繁卡死)
- 硬盘:SSD(比 HDD 快 100 倍),80GB 对个人项目绰绰有余
- 带宽/流量:基础套餐包含的就够用,不用担心
- 区域:选离用户近的,不确定就选新加坡
- 原则:先小后大,按需升级
下一章,我们来看服务器的"软件"层面——怎么连上去、怎么配置 Nginx、怎么绑定域名、怎么上 HTTPS——让你的网站真正能被全世界访问。