一、先把「自建 VPS」这件事的两条路分清楚

在动手之前必须先分清一件事:中文语境里的「自建 VPS」至少指两种完全不同的东西,走错路会浪费大量时间。
第一种是买一台 VPS 自己配置。 你从服务商那里买一台虚拟服务器,拿到独立 IP 和 root 权限,然后自己装系统、配环境、部署业务。服务器是别人的物理机器,你分到的是一块虚拟资源。这是绝大多数人搜索「自建VPS教程」时真正想做的事。
第二种是用自己手上的硬件搭一台服务器。 你可能有一台闲置台式机、一台旧笔记本、一台 NAS,甚至一台旧手机,装上 Linux、跑虚拟化、对外提供 web 服务。这条路没有月租,但电费、带宽、公网 IP 都要你自己解决。
两条路的差别是结构性的,下面这张表把关键项逐条摊开:
| 对比项 | 买 VPS 自己配置 | 自有硬件搭服务器 |
|---|---|---|
| 一次性成本 | 0 | 硬件购置成本,一次性支出 |
| 周期性成本 | 每月付费 | 电费、宽带月租 |
| 起步速度 | 付款后十几分钟可用 | 装系统、装虚拟化、调试,至少一个周末 |
| 公网 IP | 商家分配独立 IPv4 | 需单独申请,通常是额外月费 |
| 端口速率 | 500 到 10000 Mbps | 受限于家宽上行 |
| 断电风险 | 商家机房供电保障 | 家里停电即中断 |
| 硬件维护 | 商家负责 | 自己负责,含换盘、排查故障 |
| 适用人群 | 绝大多数人 | 有闲置硬件且懂运维的人 |
从这张表能看出一条关键结论:第二条路的瓶颈几乎永远是「上行带宽」和「公网 IP」,而不是 CPU 和内存。 家宽的上行速度通常是下行的几分之一,很多人家里 500M 宽带上行只有 30M。用家宽做网站服务器意味着对外服务能力被上行卡死,因为所有访客的请求都要从你家里推出去。这是物理限制,不是调优能解决的问题。
如果手上没有闲置硬件,或者不懂 Linux 与网络运维,买 VPS 是唯一合理的选择。 所谓「自建更省钱」,在没有闲置硬件的前提下并不成立——你要付出的学习成本和时间远超省下的钱。
如果确实有闲置硬件,第二条路有一道硬门槛:这台机器必须能被公网访问到。 这需要三样东西同时具备:一个公网 IP、开放入站流量的方式(多数家庭宽带默认屏蔽入站)、以及路由器上的端口映射。这三样在家用宽带上往往要额外付费或额外配置。
最后一条现实约束是 IP 信誉。 家庭宽带的 IP 段往往已被各类爬虫与邮件垃圾源使用多年,用它对外提供服务时容易在别处被判定为滥用源。而 VPS 分配的 IP 通常来自专门的商用网段。这是 IP 段使用历史的客观事实,不是对商家的评价。
二、两条路的成本换算:把配置折算成可比的数字

这一步是本篇的第一个决策依据。讨论「自建」而不算钱,讨论的就只是感觉。 下面所有数字取自渠道商品库快照(数据时间 2026-11-10 09:40),以商家页面当日显示为准。
先看租用一档真实 VPS 的月成本。 商品库里最便宜的一档是 RosCloud-01,19.99 美元/月,含 2 vCPU、1 GB 内存、20 GB 硬盘、500 Mbps 端口、1024 GB 月流量,折合每 GB 内存 19.99 美元、每 GB 硬盘 0.999 美元、每 TB 流量 19.99 美元。这个数字本身就是结论:低月价的机器,单位成本高得离谱,因为你为 1 GB 内存付了 19.99 美元。
把这条产品线往上翻,单位成本是持续下降的:
| 档位 | 月价(美元) | 内存 | 硬盘 | 月流量 | 每 GB 内存 | 每 GB 硬盘 | 每 TB 流量 |
|---|---|---|---|---|---|---|---|
| RosCloud-01 | 19.99 | 1 GB | 20 GB | 1024 GB | 19.99 | 0.999 | 19.99 |
| RosCloud-02 | 29.99 | 2 GB | 40 GB | 2048 GB | 14.99 | 0.750 | 14.995 |
| RosCloud-03 | 39.99 | 4 GB | 80 GB | 3072 GB | 10.00 | 0.500 | 13.33 |
| RosCloud-04 | 49.99 | 8 GB | 160 GB | 4096 GB | 6.25 | 0.312 | 12.498 |
| RosCloud-05 | 59.99 | 16 GB | 240 GB | 5120 GB | 3.75 | 0.250 | 11.998 |
| RosCloud-06 | 69.99 | 24 GB | 320 GB | 6144 GB | 2.92 | 0.219 | 11.665 |
把这条曲线读透:从最低档升到最高档,月价涨了 3.5 倍,但每 GB 内存的花费降到只有原来的七分之一。 这说明在这条产品线里,低档位卖的是「低门槛进入」,不是「高性价比」。如果你确定要跑起来,直接从 RosCloud-03(4 GB 内存、每 GB 内存 10.00 美元)起步,比从 RosCloud-01 起步再升级更省事也更划算,因为重新部署的时间成本通常高于多付的那点差价。
再看另一条产品线,它把「年付」这个变量摊到了桌面上。 sixtynet 全部机型按年付费,折算成月价后单位成本是另一个量级:
| 机型 | 年付(美元) | 折月(美元) | 配置 | 每 GB 内存 | 每 TB 流量 | 端口 |
|---|---|---|---|---|---|---|
| LAX-STARTER | 200 | 16.67 | 2C / 2 GB / 40 GB | 8.33 | 3.413 | 2000 Mbps |
| LAX-MICRO | 400 | 33.33 | 4C / 4 GB / 80 GB | 8.33 | 3.413 | 4000 Mbps |
| LAX-Storage-500G | 400 | 33.33 | 4C / 4 GB / 500 GB | 8.33 | 3.413 | 10000 Mbps |
| LAX-MEDIUM | 800 | 66.67 | 8C / 8 GB / 160 GB | 8.33 | 3.413 | 10000 Mbps |
| LAX-Storage-1TB | 700 | 58.33 | 8C / 8 GB / 1000 GB | 7.29 | 3.982 | 10000 Mbps |
| LAX-LARGE | 1600 | 133.33 | 8C / 16 GB / 320 GB | 8.33 | 3.413 | 10000 Mbps |
三个数字值得单独拎出来:
第一,折月 16.67 美元的 LAX-STARTER,比 RosCloud-01 的 19.99 美元还便宜,而且每 GB 内存只有 8.33 美元、每 TB 流量只有 3.413 美元。 后者是 RosCloud-01 的两倍多。这说明「月付」和「年付」不只是付款方式不同,单位成本差距可能超过一倍。
第二,硬盘单价出现了断崖式差异。 LAX-Storage-500G 的硬盘单价是每 GB 0.067 美元,1 TB 盘(LAX-Storage-1TB)是每 GB 0.058 美元,而同一家同为 8C 8 GB 内存的 LAX-MEDIUM 是每 GB 0.417 美元。换算成 1 TB 硬盘的购置成本:LAX-Storage-1TB 约 59.73 美元,LAX-LARGE 约 426.67 美元。 差价七倍以上。这不是配置强弱问题,是产品线定位问题:Storage 系列就是专门做存储的。
第三,第三条产品线云途的计费方式完全不同。 云途全部机型按月付费,价格在 350 到 1500 美元/月之间,但每一档都写明了超额流量的重置价,这是前两条产品线都没有的条款:
| 机型 | 月价(美元) | 内存 | 硬盘 | 月流量 | 每 GB 内存 | 超额重置价 |
|---|---|---|---|---|---|---|
| 云途 HK.DS.M | 350 | 32 GB | 480 GB SSD | 10000 GB | 10.94 | 200 |
| 云途 DS.ES.F | 399 | 32 GB | 800 GB SSD | 10000 GB | 12.47 | 200 |
| 云途 DS.ES.C | 700 | 64 GB | 800 GB SSD | 40000 GB | 10.94 | 500 |
| 云途 HK.DS.P | 750 | 64 GB | 1024 GB SSD | 40000 GB | 11.72 | 500 |
| 云途 HK.DS.S | 800 | 128 GB | 6000 GB SAS HDD | 40000 GB | 6.25 | 500 |
| 云途 DS.ES.B | 1500 | 256 GB | 1920 GB SSD | 30000 GB | 5.86 | 450 |
云途的流量单价换算出来是每 TB 17.92 到 51.2 美元,比 sixtynet 的 3.413 美元高出五到十五倍。 但这不能只看单价:云途的重置价机制意味着超出部分按重置价计费。以云途 HK.DS.S 为例,超额 1 TB 约需 12.80 美元,低于它标称的每 TB 20.48 美元标准价。 这就是「超额重置」条款的实际含义——流量用超了不一定更贵,也可能更便宜,取决于档位。
最后是第二条路线的成本模型。 假设你有一台闲置机器,一次性硬件投入 800 美元,按 3 年摊销,每月折合 22.22 美元。这个数字比 LAX-STARTER 的折月 16.67 美元高,比 LAX-MICRO 的 33.33 美元低。 也就是说,在「已有 800 美元闲置硬件」这个前提成立时,自建一台机器每月的成本,恰好落在一台中档 VPS 的价格区间里,并没有便宜到可以忽略运维。
更关键的是自建路线还有一笔隐性账单:电费和带宽。 一台常开的台式机按 300W 功率算,一天 24 小时满载是 7.2 度电;即便实际功耗只有 150W,一天也是 3.6 度电,一个月按 108 度算。再加上一条家宽月租,这笔支出会进一步把自建的成本推高。结论是:如果你已经付过硬件的钱且机器闲置,自建的边际成本确实低;但如果你需要额外购置硬件,两年内的总成本通常高于直接租一台 VPS。
三、第一步:选系统,选对版本而不是选最新

系统选型这一步定了,后面所有教程的命令都跟着定了,所以值得一次想清楚。
主流选择是三个:Ubuntu Server、Debian、Rocky/AlmaLinux(CentOS 替代)。三者的定位完全不同。
Ubuntu Server 是新手最常遇到的,因为绝大多数 VPS 商家默认装它。它的优点是文档多、社区大、软件源新;缺点是 LTS 版本两年才发一次大版本,安全更新节奏慢于滚动发布的版本。 如果你跟着的教程是 Ubuntu 的,命令和 Debian 基本通用,但要注意包名差异,比如用 apt 而非 dnf。
Debian 更保守也更稳。 它以「不崩」为第一目标,版本更新慢但每一版都很可靠。如果你要跑的是长期在线的服务,Debian 的稳定性收益是实在的。
Rocky Linux 和 AlmaLinux 是 RHEL 系的社区重建版,和以前的 CentOS 命令几乎完全一致。如果你的业务环境是企业软件,尤其是需要特定 RHEL 生态的工具,这是对的选择,但对纯建站来说社区文档量不如 Debian 系。
版本选择上有个高频误区:新手往往选「最新版」。实际上更稳妥的做法是选那个教程针对的版本,而不是选最新版本。 教程里写 Ubuntu 22.04 的命令,你装了 24.04,差异会消耗你大量时间。
确认当前系统的版本和基本信息:
cat /etc/os-release
uname -a
hostnamectl
装好系统后第一件事是更新。这一步很多教程会跳过,导致后面装软件时各种版本对不上。
# Debian / Ubuntu 系
apt update && apt upgrade -y
# RHEL 系(Rocky / AlmaLinux / CentOS)
dnf update -y
关于内核版本要不要自己升:多数情况下不需要。 发行版的安全更新已经包含内核补丁,自己编译内核是运维里最容易出事的操作之一。只有在你明确知道某个 CVE 需要更新版本内核、并且愿意承担升级失败无法启动的风险时,才考虑 kernel-ml 之类的方案。
四、第二步:拿到机器后必须先做的五件事加固

这一步不能拖。商家交付的机器默认配置是「通用能开机」的状态,不是「适合公网使用」的状态。从拿到 IP 到对外开站点之间,至少要做这五件事。
第一件事:新建普通用户并给 sudo 权限。 日常操作用普通账号,root 只用于权限变更。
adduser deploy
usermod -aG sudo deploy
第二件事:改 SSH 配置前必须先保持当前会话不断开。 这是新手最常见的翻车点。
sudo cp /etc/ssh/sshd_config /etc/ssh/sshd_config.bak
sudo sed -i 's/#\?PermitRootLogin.*/PermitRootLogin no/' /etc/ssh/sshd_config
sudo sed -i 's/#\?PasswordAuthentication.*/PasswordAuthentication no/' /etc/ssh/sshd_config
sudo sshd -t && sudo systemctl reload ssh
sudo sshd -t 这一步不能省。 配置写错了直接 systemctl restart ssh,服务起不来,你就彻底失去这台机器了,因为密码登录已关、密钥可能还没配好。先验证再重载,语法有问题它会报错但不影响现有连接。
第三件事:配置防火墙。 默认只放行 SSH、HTTP、HTTPS 三个端口。
# Debian / Ubuntu 系
sudo ufw default deny incoming
sudo ufw default allow outgoing
sudo ufw allow 22/tcp
sudo ufw allow 80/tcp
sudo ufw allow 443/tcp
sudo ufw enable
# RHEL 系
sudo firewall-cmd --permanent --add-service=http
sudo firewall-cmd --permanent --add-service=https
sudo firewall-cmd --permanent --add-service=ssh
sudo firewall-cmd --reload
第四件事:装 fail2ban 或同类防爆破工具。 SSH 密钥登录不是万无一失的——很多扫描器会直接开始尝试公钥,fail2ban 能把这类尝试在累积到一定次数后自动封禁。
sudo apt install -y fail2ban
sudo systemctl enable --now fail2ban
sudo fail2ban-client status sshd
第五件事:检查是否有异常登录记录和定时任务。 交付的机器应该是干净的,但确认一下成本很低。
sudo last -a | head -20
sudo crontab -l
ls -la /etc/cron.d/
sudo ss -tulnp
这五件事做完,你的机器才算「可以对外服务」。 顺序不要变:先建用户、再改 SSH、最后才是关密码登录。反过来做,你会在改完 SSH 的瞬间断开连接。
五、第三步:把配置换算成能承载多少访问量

买机器最容易犯的错,是按「感觉」选配置。正确的做法是把自己的访问量算出来,再倒推需要多少内存、硬盘和流量。 这一节用商品库里的真实参数做换算。
先说流量。 商品库里每一档都标注了月流量额度,这直接决定你的带宽成本。假设你的站点平均每次访问传输 500 KB,那么 1 GB 流量大约对应 2048 次访问。
| 机型 | 月流量额度 | 按 500 KB/次折算的月访问量 |
|---|---|---|
| RosCloud-01 | 1024 GB | 约 210 万次 |
| LAX-STARTER | 5000 GB | 约 1024 万次 |
| LAX-MICRO | 10000 GB | 约 2048 万次 |
| LAX-MEDIUM | 20000 GB | 约 4096 万次 |
| LAX-LARGE | 40000 GB | 约 8192 万次 |
| 云途 HK.DS.S | 40000 GB | 约 8192 万次 |
这张表说明一个常被忽略的事实:对绝大多数中小站点,流量额度根本不是瓶颈。 一个日均 1 万 PV、页面 200 KB 的站点,一个月大约消耗 600 GB 流量,RosCloud-01 的 1024 GB 都用不满。真正会先耗尽流量的是下载站、图床、视频和 API 转发类业务。
再说内存。 经验换算:一台跑 Nginx + PHP-FPM + MySQL 的站点,每个活跃 PHP 进程大约占 50 到 80 MB 内存,MySQL 基础占用约 300 到 500 MB,操作系统本身约 200 MB。按这个模型算:
| 站点规模 | 建议内存 | 对应机型 |
|---|---|---|
| 个人博客,日均 500 PV | 2 GB | LAX-STARTER(2 GB)/ RosCloud-02(2 GB) |
| 小型企业站,日均 5000 PV | 4 GB | LAX-MICRO(4 GB)/ RosCloud-03(4 GB) |
| 论坛或带后台的站,日均 2 万 PV | 8 GB | LAX-MEDIUM(8 GB)/ RosCloud-05(16 GB) |
| 电商或多个站点,日均 10 万 PV | 16 GB | LAX-LARGE(16 GB)/ 云途 DS.ES.B(256 GB) |
换算成钱:日均 5000 PV 的小型企业站,最低需要 4 GB 内存,最便宜的选项是 LAX-MICRO,折月 33.33 美元,每 GB 内存 8.33 美元。 如果你打算用三年,年付是 400 美元。
最后说硬盘。 系统加数据库加日志加备份副本,一个 4 GB 内存的小站建议至少 80 GB。但如果你有大量静态文件或用户上传,硬盘需求会远超内存需求——这时应该看 Storage 系列:LAX-Storage-500G 是同样的 4C 4 GB 内存,多了 420 GB 硬盘,硬盘单价每 GB 0.067 美元。
这里有一个真实的取舍:同样的 33.33 美元月价,LAX-MICRO 给 80 GB 盘,LAX-Storage-500G 给 500 GB 盘。如果你的瓶颈是存储而不是内存,Storage 系列的单位性价比高得多;但如果你需要跑数据库和处理大量并发请求,80 GB 配 4 GB 内存的组合更均衡。
六、第四步:验收标准写成数字,不要写成「感觉还行」

这是本篇最实用的一节。买完机器后不要凭感觉判断「好像挺快的」,而要跑一遍具体的测试,用明确的数字判断这台机器是否达标。下面这组阈值可以直接照抄执行。
阈值一:网络往返延迟。 连续测试 10 次取中位数。
ping -c 10 your-domain.com
判定标准:国内主要线路到香港节点,丢包率应为 0%,延迟中位数低于 80 ms;到美国西海岸节点,延迟中位数低于 200 ms。超过这个数说明线路绕远或负载偏高。
阈值二:首字节响应时间。 这是访客真正感受到的速度。
curl -o /dev/null -s -w "TTFB: %{time_starttransfer}s\n" https://your-domain.com/
判定标准:TTFB 小于 0.3 秒(300 ms)为合格,小于 0.15 秒为优秀,超过 1 秒说明后端有瓶颈需要查。 这个数字要连测三次取最差值,而不是取最好的一次——最好值反映的是缓存命中时的表现,最差值才反映真实访客的体验。
阈值三:1 MB 文件下载耗时。 用一个真实的静态文件测试,排除本地回环的干扰。
curl -o /dev/null -s -w "size: %{size_download} bytes, time: %{time_total}s\n" https://your-domain.com/test-1mb.bin
判定标准:1 MB 下载耗时小于 2 秒为合格。 这等于要求实际吞吐量高于 500 KB/s。注意:端口标称 500 Mbps 不等于实际能达到 500 Mbps,端口速率是上限不是保底。
阈值四:内存谷值。 这是判断配置是否够用的硬指标。
free -m
判定标准:上线后观察一个完整业务周期(建议 24 小时),内存占用谷值低于 15%。 谷值而不是峰值才是关键——峰值短暂冲高没关系,如果谷值就占了 40%,说明这个配置对你的业务是勉强的,应该在下一周期升档而不是硬扛。
阈值五:磁盘 I/O 响应。 云途 HK.DS.S 用的是 SAS HDD,而其他多数机型是 SSD 或 NVMe,这个差异会体现在这个指标上。
dd if=/dev/zero of=/tmp/testfile bs=1M count=1024 oflag=direct
dd if=/tmp/testfile of=/dev/null bs=1M iflag=direct
判定标准:写入和读取的平均速度低于 100 MB/s 应视为不达标。 对数据库站点,SSD 与机械盘的差距不是「快一点」,而是数量级。
阈值六:CPU 负载。
uptime
判定标准:1 分钟负载值持续高于 vCPU 核数,说明算力不足。 需要说明的是,商品库里云途系列只标注了 CPU 型号(如 6248 × 1、8259CL × 2),没有给出 vCPU 核数,所以这一项只能按实际核数自行设定阈值。
把这六项跑完填进一张表,你的验收就完成了:
| 验收项 | 合格阈值 | 实测值 | 是否达标 |
|---|---|---|---|
| 网络延迟 | 低于 80 ms(港)/ 200 ms(美西) | 待填 | 待填 |
| TTFB | 低于 300 ms | 待填 | 待填 |
| 1 MB 下载 | 低于 2 秒 | 待填 | 待填 |
| 内存谷值 | 低于 15% | 待填 | 待填 |
| 磁盘 I/O | 高于 100 MB/s | 待填 | 待填 |
| CPU 负载 | 低于 vCPU 核数 | 待填 | 待填 |
任何一个指标不达标,就要在续费周期前解决,而不是「先凑合用着」。 因为按月付的机器随时可以换,按年付的机器一旦不满意,中途退出的成本通常远高于一开始选对。
七、第五步:装 Web 服务与运行环境

环境安装有两条主流路线:PHP-FPM 加 Nginx,或者 Node.js 直接跑。选哪条取决于你要做什么,但无论哪条,装完都要做同样的三件事。
先用 Nginx 反代,这是最常见的组合:
sudo apt install -y nginx
sudo systemctl enable --now nginx
sudo nano /etc/nginx/sites-available/your-domain
站点配置的骨架是这样的:
server {
listen 80;
server_name your-domain.com www.your-domain.com;
root /var/www/your-domain/public;
index index.php index.html;
location / {
try_files $uri $uri/ /index.php?$query_string;
}
location ~ \.php$ {
include snippets/fastcgi-php.conf;
fastcgi_pass unix:/run/php/php8.2-fpm.sock;
}
location ~ /\. {
deny all;
}
}
这段配置里有两个要点值得展开。
第一个要点是 location ~ /\. 这条规则。 它禁止访问以点开头的路径,这是防目录遍历的基本手段。缺了这条规则,别人可以通过访问 /.git/config 拿到你的源码和配置,这是真实发生过无数次的安全事故。**如果有 .env 文件,同样应该被这条规则挡住。
第二个要点是 fastcgi_pass 那行。 版本号必须和实际安装的 PHP 版本一致。常见报错是 502 Bad Gateway,原因几乎都是 socket 路径不对。 确认路径:
ls -l /run/php/
第二个常见报错是 413 Request Entity Too Large。 这是上传大小超限,改 PHP 配置:
sudo nano /etc/php/8.2/fpm/php.ini
# 找到并修改这两项
upload_max_filesize = 64M
post_max_size = 64M
sudo systemctl restart php8.2-fpm
第三个常见报错是 Permission denied(日志里 403)。 目录权限问题,标准解法是让 Web 服务用户能读取代码目录:
sudo chown -R www-data:www-data /var/www/your-domain
sudo find /var/www/your-domain -type d -exec chmod 755 {} \;
sudo find /var/www/your-domain -type f -exec chmod 644 {} \;
另一个反复出现的错误是 nginx: [emerg] mkdir() "/var/log/nginx/xxx" failed (2: No such file or directory)。 这是日志目录不存在,手动建出来即可。
如果你走 Node.js 路线,注意两个差异。 第一,Node 进程需要常驻管理,用 pm2 或 systemd 托管;第二,Node 应用默认自己监听端口,要用 Nginx 反代时记得让应用监听 127.0.0.1 而不是 0.0.0.0,否则会绕过 Nginx 直接对外暴露。
# pm2 托管示例
npm install -g pm2
pm2 start app.js --name myapp
pm2 save
pm2 startup
八、第六步:数据库怎么装才安全

数据库是自建 VPS 里最常出事的一环。三个默认设置必须改:不监听公网、用 socket 连接、给应用单独建账号。
安装并初始化:
sudo apt install -y mysql-server
sudo systemctl enable --now mysql
sudo mysql_secure_installation
mysql_secure_installation 会问几个问题,关键的两项是:是否禁止 root 用密码从远程登录(选 Yes),以及是否删除匿名用户(选 Yes)。
改绑定地址。默认 MySQL 监听 127.0.0.1,Ubuntu 上这个配置在单独文件里:
sudo nano /etc/mysql/mysql.conf.d/mysqld.cnf
# 确认 [mysqld] 段下这一行
bind-address = 127.0.0.1
sudo systemctl restart mysql
验证有没有真的改成功:
sudo ss -tulnp | grep mysql
如果输出里出现 0.0.0.0:3306,说明还在对公网监听,必须回去改。 这是最直接的验证方式,不要靠猜。
建一个专供应用使用的账号,不要用 root 跑应用:
CREATE DATABASE yourdb CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
CREATE USER 'yourapp'@'localhost' IDENTIFIED BY 'strong-password';
GRANT SELECT, INSERT, UPDATE, DELETE ON yourdb.* TO 'yourapp'@'localhost';
FLUSH PRIVILEGES;
注意授权语句里只给了 SELECT、INSERT、UPDATE、DELETE,没有给 DROP 和 ALTER。 应用账号通常不需要改表结构权限,权限收窄后即使应用被拿下,破坏面也小得多。
两个高频报错要认识:
报错一:ERROR 1045 (28000): Access denied for user。原因基本是密码错或 host 不匹配。注意 localhost 和 127.0.0.1 在 MySQL 的授权表里是两套独立的记录,一个能用另一个不能用是常见现象。统一用 localhost 并通过 socket 连接最省事。
报错二:应用报 SQLSTATE[HY000] [2002] Connection refused。 这是 PHP 侧没走到 socket。要在数据库配置里把 host 设成 localhost 而不是 127.0.0.1,前提是 PHP-FPM 和 MySQL 在同一台机器上。
关于数据库备份,一定要用逻辑备份而不是直接复制数据目录:
mysqldump -u yourapp -p yourdb | gzip > /backup/yourdb-$(date +%F).sql.gz
物理复制数据目录在数据库运行时是不安全的,可能拿到不一致的快照。
九、第七步:域名解析和 HTTPS 证书

这一节有两个高频报错,几乎所有人都会撞一次,所以单独写清楚。
第一步是加解析记录。 在 DNS 服务商处添加 A 记录,把域名指向服务器 IP。注意加完记录后需要等 TTL 过期才能生效,这条 TTL 通常是 600 秒或更长。
验证解析是否生效:
dig your-domain.com +short
# 或
nslookup your-domain.com
如果返回的 IP 不是你的服务器,说明要么解析没加对,要么本地 DNS 缓存了旧记录。 这时可以换一个公共 DNS 验证:
dig @8.8.8.8 your-domain.com +short
第二步是签发证书。用 Let's Encrypt 的 certbot 是最省事的做法:
sudo apt install -y certbot python3-certbot-nginx
sudo certbot --nginx -d your-domain.com -d www.your-domain.com
certbot 会自动改 Nginx 配置并配置续期定时器。验证续期是否正常:
sudo certbot renew --dry-run
这一步值得做,因为证书过期是自建站最常见的事故之一。
接下来是三个必须认识的报错。
报错一:Timeout during connect (acme_v2) 或 Some challenges have failed。 这几乎总是 DNS 解析还没生效,或者 80 端口没放行。用这个命令确认 80 端口从公网可达:
curl -I http://your-domain.com
如果 curl 返回 404 或连接超时,问题在防火墙或解析,不在 certbot。
报错二:Too many certificates already issued for this exact set of identifiers。 Let's Encrypt 对同一组域名每周有签发次数上限,测试阶段反复签发容易触发。解决办法是加 --dry-run 先做演练,正式签发一次就好。
报错三:证书装好了但浏览器仍提示不安全。 检查 Nginx 是否真的加载了新证书并重启过:
sudo nginx -t && sudo systemctl reload nginx
echo | openssl s_client -connect your-domain.com:443 2>/dev/null | openssl x509 -noout -dates
最后一条命令会打印证书的有效期,把它和当前日期对比,就知道证书是不是新的。
另一个常见误区是只配了 443 没配 80 的跳转。 建议在 Nginx 里把 80 端口全部重定向到 443,这样证书续期的 HTTP-01 验证也能正常进行:
server {
listen 80;
server_name your-domain.com www.your-domain.com;
return 301 https://$host$request_uri;
}
按你的情况,下一步该看哪家
上面讲的是判断标准,但多数人最后还是想问一句「那我该买谁」。按你的实际情况对照下面几条,直接去看对应的机型页比继续比价更快:
- 只想搭个站、预算优先:先看价格最低那档够不够用,别为用不上的配置付钱。看 iwebfusion 当前机型与价格
- 做跨境或店群、需要多 IP:优先看 IP 类型与换 IP 政策,别只看配置。看 racknerd 当前机型与价格
- 主要访客在国内、在意打开速度:先确认回程线路,再谈配置。看 cloudcone 当前机型与价格
- 只是开发测试、临时用:按小时或月付,用完就删,别买年付。看 digitalocean 当前机型与价格
价格与库存以商家页面当日显示为准,下单前建议先确认退款窗口与是否支持按月付费。
十、第八步:部署上线后的必查项

代码上传完不等于上线成功。下面这些项目逐条检查,全部通过才算真的上线。
第一,检查服务是否正常响应:
curl -I https://your-domain.com/
# 期望 HTTP/2 200
第二,检查静态资源是否 404。 页面能打开但 CSS、JS 全 404,通常是 root 路径配错或文件没上传对位置。
第三,检查 Nginx 错误日志:
sudo tail -50 /var/log/nginx/error.log
第四,检查应用日志。 PHP 的错误日志通常在 /var/log/php8.2-fpm.log,Node 应用的日志在 pm2 里看:
pm2 logs --lines 50
第五,确认目录权限与安全头。 上传目录要禁止执行脚本,这是防 webshell 的关键一环:
location ~* ^/uploads/.*\.(php|phtml|php3|php5|php7)$ {
deny all;
}
第六,配置基础安全响应头:
add_header X-Frame-Options "SAMEORIGIN" always;
add_header X-Content-Type-Options "nosniff" always;
add_header Referrer-Policy "strict-origin-when-cross-origin" always;
第七,做一次外部视角的检查。 用命令行工具从外部请求自己的站点,模拟真实访客:
curl -s -o /dev/null -w "TTFB: %{time_starttransfer}s\n" https://your-domain.com/
这一步和在本机测的结果可能完全不同,因为本机测试绕过了公网链路。
第八,确认备份任务真的在跑。 不要只配置了就认为安全,实际跑一次并确认文件落地:
sudo ls -lh /backup/
sudo crontab -l
最后一条经验:改完任何配置,先 nginx -t 再 reload。 这一条能避免绝大多数「改完配置网站就白了」的夜晚。
十一、上线之后的运维节奏:哪些事必须每天做

机器交付不是结束,是开始。很多自建站死在第三个月而不是第一天,原因都是没人管。 下面这份清单可以直接照着排进 crontab。
第一件:磁盘空间监控。 磁盘写满是网站挂掉最常见的原因之一,而且通常毫无征兆。
df -h
du -sh /var/log/* 2>/dev/null | sort -h | tail -5
把这条做成每日任务,超过 85% 就报警:
0 3 * * * /usr/bin/df -h / | awk 'NR==2 {gsub("%","",$5); if ($5+0 > 85) mail -s "disk alert" [email protected]}' | /usr/bin/tee -a /var/log/disk_check.log
第二件:日志轮转。 不配 logrotate,访问日志会慢慢吃掉整个硬盘。Debian 系默认装好了,检查一下即可:
ls /etc/logrotate.d/
sudo logrotate -d /etc/logrotate.conf
第三件:内存与负载趋势。 单看某一时刻的数字没有意义,要看的是谷值的长期趋势。用 sysstat 记录历史:
sudo apt install -y sysstat
sudo sed -i 's/ENABLED="false"/ENABLED="true"/' /etc/default/sysstat
sudo systemctl enable --now sysstat
装好后可以用 sar 回看任意时间点的历史数据,这比临时加监控脚本有用得多:
sar -r # 内存使用历史
sar -u # CPU 使用历史
sar -n DEV # 网络流量历史
第四件:自动更新包。 把人工任务变成系统任务,才能真正避免补丁积压。
sudo apt install -y unattended-upgrades
sudo dpkg-reconfigure -plow unattended-upgrades
第五件:备份校验。 备份最可怕的状态不是「没备份」,而是「以为备份了但其实是空的」。所以要定期验证:
sudo gzip -t /backup/yourdb-$(date +%F).sql.gz && echo "备份文件完整"
第六件:重启与内核升级窗口。 内核升级后需要重启才生效,但重启意味着中断。把重启安排在流量最低的时段,并且在重启前确认服务能自启动:
sudo systemctl list-unit-files --state=enabled | grep -E 'nginx|php|mysql'
这六件事排进定时任务,你的机器就能稳定跑很久。 需要提醒的是,这些都属于「维护成本」的一部分——这也是为什么第二节说自建路线要算上隐性账单:省下的租金,会以你花在运维上的时间形式还回来。
十二、什么情况下不该走「自建」这条路

这一节按公开事实说明每条路线的不适用场景,并给出替代方案。这里讨论的是机房位置、线路类型、计费方式、IP 资源这些客观条件,不是对任何商家的评价。
场景一:你的主要访客在国内,且对首屏速度敏感。这时不该选只有 500 Mbps 端口、且位于俄罗斯的 RosCloud 系列。 理由是公开可见的参数:商品库标注 RosCloud 系列 tags 为「俄罗斯」,端口速率为 500 Mbps。俄罗斯机房到国内访客的路径需要经过更长的地理距离,光纤距离本身就会把往返延迟推高,这是物理路径问题,不是配置问题。
替代方案:选机房位于香港的机型。 商品库中云途 HK.DS.P 是 64 GB 内存、1024 GB SSD、2000 Mbps 端口、40000 GB 月流量,折月 750 美元,每 GB 内存 11.72 美元。端口从 500 Mbps 提升到 2000 Mbps、机房从俄罗斯换成香港,这两项都是公开参数,选前者更稳妥。
场景二:你的业务需要大流量但不需要大内存。这时不该按内存单价挑机器。 RosCloud-06 的每 TB 流量是 11.665 美元,而 LAX-STARTER 是 3.413 美元。如果你的业务每月消耗 10 TB 以上流量,这个差距会被放大成每月超过 82 美元的差额。
替代方案:按流量单价选。 LAX-MEDIUM 是 8C 8 GB 内存、20000 GB 月流量、10000 Mbps 端口,折月 66.67 美元,每 TB 流量 3.413 美元。注意它的流量单价低到和 LAX-STARTER 完全一样,但月流量额度是四倍。
场景三:你的主要诉求是存储。这时不该选普通机型再加硬盘。 RosCloud-06 硬盘单价每 GB 0.219 美元,LAX-Storage-1TB 是每 GB 0.058 美元,差近四倍;换算成 1 TB 硬盘,前者约 223.97 美元,后者约 59.73 美元。
替代方案:直接选 Storage 系列。 LAX-Storage-1TB 是 8C 8 GB 内存、1000 GB 硬盘、15000 GB 月流量、10000 Mbps 端口,年付 700 美元,折月 58.33 美元。
场景四:你需要的是固定 IP 且访客来自境外特定地区。 商品库中有一款 sixtynet 的 Los Angeles China Unicom-Premium,年付 2500 美元、折月 208.33 美元、端口 100 Mbps,但该条目在商品库中没有填写内存、硬盘和流量参数。没有流量额度就意味着无法算清成本,端口只有 100 Mbps 也远低于其他机型的 2000 到 10000 Mbps。 如果你的业务依赖稳定的大带宽出口,这类机型不匹配。
替代方案:选标注了完整流量额度、端口速率达 10000 Mbps 的 LAX 系列机型,例如 LAX-MEDIUM 或 LAX-LARGE,参数齐全,成本可算。
场景五:你需要的是住宅 IP。 sixtynet 的 Residential 系列在价格上明显高于同配置 LAX 系列:STARTER 档 Residential 是折月 21.67 美元、每 GB 内存 10.83 美元,LAX 是折月 16.67 美元、每 GB 内存 8.33 美元;MICRO 档 Residential 是 38.33 美元、9.58 美元,LAX 是 33.33 美元、8.33 美元。差价是确定的:同等配置下 Residential 每月多付 5 到 6 美元。
替代方案:如果业务并不强制要求住宅 IP,就选 LAX 系列,把这 5 美元省下来。 只有当目标站点确实按 IP 类型做限制时,这笔差价才值得付。
场景六:你需要一个有明确超额流量计费规则的机房。 云途系列是唯一在商品库里写明了超额重置价的:HK.DS.M 是 200 美元、DS.ES.F 是 200 美元、DS.ES.C 是 500 美元、HK.DS.P 是 500 美元、HK.DS.S 是 500 美元、DS.ES.D 是 500 美元、HK.DS.B 是 500 美元、DS.ES.A 是 500 美元、DS.ES.B 是 450 美元。这种条款对流量可预测的业务是优势——你能提前算出超额成本;对流量完全不可预测的业务则需要留足缓冲。
替代方案:如果你的流量波动很大,选流量额度与业务峰值匹配的固定档位,把超额条款当作保险而不是日常。 比如按峰值 40 TB 选云途 DS.ES.C(40000 GB 额度),或者选 LAX-MEDIUM(20000 GB)配合 LAX-LARGE(40000 GB)的额度梯度。
场景七:你用的是 SAS 机械盘且要求高 I/O。 云途 HK.DS.S 的 disk_type 字段明确标注为 SAS HDD,其他多数机型标注 SSD 或 NVMe。机械盘的随机写性能与 SSD 差一个数量级,磁盘 I/O 那项验收(低于 100 MB/s 为不达标)大概率过不了。
替代方案:需要大内存又需要 SSD 时,看云途 DS.ES.D(128 GB 内存、800 GB SSD、折月 900 美元、库存 1 台)或云途 HK.DS.P(64 GB 内存、1024 GB SSD、折月 750 美元、库存 5 台)。
场景八:你只有一台闲置机器,且没有额外公网 IP。 前面说过,第二条路的硬门槛是必须能被公网访问到。
替代方案:先按第一条路买一台最低档的 VPS 跑起来,同时把闲置机器作为内网节点或备份机接入,两周后再决定要不要彻底转成自建。
十三、按你的情况,该买哪一档

上面把判断标准、算账、阈值、缺陷都摆完了,现在给结论。下面按四类人分,每类给到具体商家和具体档位。
第一类:个人博客、小站、纯练手,月预算 20 美元以内。 直接选 LAX-STARTER(年付 200 美元,折月 16.67 美元)。它是商品库里折月价最低的机型,2 vCPU、2 GB 内存、40 GB NVMe SSD、2000 Mbps 端口、5000 GB 月流量,每 GB 内存 8.33 美元、每 TB 流量 3.413 美元。这比 RosCloud-01 的 19.99 美元更便宜,单位成本还只有它的五分之一左右。 验收按第六节的六项跑,内存谷值低于 15%。
第二类:企业官网、小型电商,日均 5000 到 2 万 PV,需要长期稳定运行。 选 LAX-MEDIUM(年付 800 美元,折月 66.67 美元)。8 vCPU、8 GB 内存、160 GB NVMe SSD、10000 Mbps 端口、20000 GB 月流量,每 TB 流量仍是 3.413 美元。这一步的价值在于:流量额度从 5000 GB 提到 20000 GB,端口从 2000 Mbps 提到 10000 Mbps,价格只涨了 50 美元,流量额度涨了四倍。 年付前先按月付跑一个周期验证,达标再转年付。
第三类:需要大内存跑数据库或缓存,或需要大硬盘做存储。 分两种情况:需要大内存,选云途 DS.ES.B(折月 1500 美元,256 GB 内存、1920 GB SSD、2000 Mbps 端口、30000 GB 月流量),它是商品库里每 GB 内存最便宜的机型,5.86 美元;需要大硬盘,选 LAX-Storage-1TB(年付 700 美元,折月 58.33 美元,8C 8 GB 内存、1000 GB 硬盘、15000 GB 月流量、10000 Mbps 端口),每 GB 硬盘 0.058 美元,是商品库中硬盘单价最低的档位。注意云途的库存字段显示 DS.ES.B 当前为 0 台、HK.DS.P 为 5 台、DS.ES.C 为 1 台,下单前需要确认库存。
第四类:访客主要在国内,且要求首屏快。 选机房在香港、端口 2000 Mbps 的 云途 HK.DS.P(折月 750 美元,64 GB 内存、1024 GB SSD、40000 GB 月流量,库存 5 台)。为什么不是更便宜的香港档 HK.DS.M(350 美元)?因为 HK.DS.M 只有 1000 Mbps 端口、10000 GB 月流量,且库存字段为 0。 同时把 RosCloud 系列排除在外,理由见第十二节场景一。
如果你的需求超出了以上四类,还有两条通用建议。 第一,首年一律先按月付一个周期,把第六节六项验收跑完,确认达标再转年付——年付的折扣是用一年期的承诺换来的,承诺之前应该先验证。第二,付款前确认三件事:是否支持按月付、是否有退款窗口、流量超额是按重置价计费还是直接限速。这三条在商品库字段里都查不到,必须在商家页面确认。
最后一句话总结:自建VPS 教程的正确执行顺序是「先算账、再选系统、再做加固、再跑验收」。 顺序反了,就是先花钱再发现问题。

喜欢
高兴
鬼脸
呵呵
无聊
伤心