从零到上线:一个静态站的完整 checklist

这篇是本站的「总纲」。前面每篇都是某个环节的展开,这里给出顺序——建站最容易出问题的不是某个技术点,而是漏了某一步。

阶段一:域名(第 1 天)

  • 选定后缀,对比续费价(不是首年价)
  • 选注册商:服务器在境内 → 考虑境内注册商便于备案;在境外 → Cloudflare Registrar 省心
  • 开启 WHOIS 隐私、注册锁、自动续费
  • DNS 托管到 Cloudflare,改 NS 记录并验证生效
  • 配 CAA 记录,开启 DNSSEC(去注册商填 DS)
bash
dig +short NS www.bzii.cn
dig +short CAA www.bzii.cn
dig +short DS www.bzii.cn

阶段二:服务器(第 1~2 天)

  • 选机房:用户在国内就选亚洲节点(新加坡/东京),别迷信美西
  • 系统更新 + 装基础工具
  • 建普通用户 + 配置 SSH 密钥(先验证新窗口能登录
  • 改 SSH 端口、禁 root、禁密码登录
  • ufw 只放行 22(改后的)/80/443,安全组同步放行
  • 装 fail2ban
  • 时区、hostname、swap(小内存机器)
  • 打系统盘快照

阶段三:Web 服务(第 2 天)

  • 装 Nginx,写站点配置(root + try_files
  • nginx -t 通过并软链到 sites-enabled
  • 上传站点文件,chown -R www-data:www-data
  • 签 Let's Encrypt 证书(certbot --nginx
  • 确认 certbot.timer 在跑,加 reload hook
  • 80 → 443 跳转,www → 根域(或反过来,选一个)
bash
sudo nginx -t
systemctl status certbot.timer
curl -sI http://www.bzii.cn | grep -i location

阶段四:加速与安全(第 3 天)

  • Cloudflare 开橙色云,加密模式设为 Full (Strict)
  • 开启 Always Use HTTPS、Brotli、HTTP/3
  • 缓存规则:静态资源长缓存,HTML 不缓存
  • 源站防火墙只放行 Cloudflare IP 段
  • Nginx 配 real_ip_header CF-Connecting-IP(日志才准)
  • 安全头:nosniff / X-Frame-Options / Referrer-Policy(HSTS 最后加)

阶段五:自动化与备份(第 3~4 天)

  • 代码推到 Git 远程仓库(这就是第一份备份)
  • 配 GitHub Actions 自动部署(或用 rsync 脚本)
  • 写备份脚本:文件 + 配置 + 数据库
  • systemd timer / cron 定时执行,日志落盘
  • 异地同步一份(另一台机器或对象存储)
  • 做一次恢复演练

阶段六:上线后巡检(每周 / 每月)

  • 磁盘、内存、负载(df -h / free -h / uptime
  • 服务状态(nginx / ssh / fail2ban)
  • 证书剩余天数 < 30 天要留意
  • 站点可用性探测(HTTP 200 + 耗时)
  • 看一眼 error.log 有没有异常
bash
curl -o /dev/null -s -w "%{http_code} %{time_total}s\n" https://www.bzii.cn
tail -50 /var/log/nginx/error.log

阶段七:持续优化(有空再做)

  • 图片转 WebP、加 loading="lazy"、声明尺寸
  • Lighthouse 跑分,Performance ≥ 90
  • 加 RSS / sitemap.xml
  • 日志轮转确认生效

我踩过的坑(按痛感排序)

  1. 改 SSH 配置没留后路,把自己锁在门外 → 每次改前先开一个新窗口验证;
  2. 只改 ufw 不改安全组(或反过来)→ 端口死活不通;
  3. 证书只配 cert.pem 没配 fullchain → 手机上报不安全;
  4. CDN 缓存了 HTML → 发了新版用户看不到,以为没生效;
  5. 备份脚本从没恢复过 → 真出事时才发现文件格式不对;
  6. 忘了域名续费 → 进赎回期,多花几百块。

按顺序走完这份清单,一个静态站就「正经上线」了。剩下的事情只有一件:持续写内容

站点是给人看的,不是给机器看的。技术细节搞定了,就该回到内容本身了。