把静态站迁到自建 VPS 的完整踩坑记录

把长期跑在托管平台的静态站迁到自建 VPS,用 Nginx 直接托管构建产物并在本机跑 certbot 签发证书。关键做法是先用 rsync 把 dist 同步到 /var/www,再单独建站点配置,避免改动默认 server 块;证书续期改为 systemd timer 触发,并在 Nginx 配置里预留 /.well-known/acme-challenge 路径,防止 webroot 校验被重定向规则拦截。踩的坑主要有三个:一是 DNS 的 A 记录改完后本地仍命中旧 IP,排查后确认是递归缓存未过期,用公共解析器验证才定位;二是权限问题,rsync 后文件属主是 root,Nginx worker 读不到,加 --chown 参数解决;三是忘记放行 80 端口,certbot 一直超时。结论是自建托管成本可控、可控性更强,但每次变更都要把 DNS、权限、防火墙三件事逐条过一遍,做成检查清单最省心。

把长期跑在托管平台的静态站迁到自建 VPS,用 Nginx 直接托管构建产物并在本机跑 certbot 签发证书。关键做法是先用 rsync 把 dist 同步到 /var/www,再单独建站点配置,避免改动默认 server 块;证书续期改为 systemd timer 触发,并在 Nginx 配置里预留 /.well-known/acme-challenge 路径,防止 webroot 校验被重定向规则拦截。踩的坑主要有三个:一是 DNS 的 A 记录改完后本地仍命中旧 IP,排查后确认是递归缓存未过期,用公共解析器验证才定位;二是权限问题,rsync 后文件属主是 root,Nginx worker 读不到,加 --chown 参数解决;三是忘记放行 80 端口,certbot 一直超时。结论是自建托管成本可控、可控性更强,但每次变更都要把 DNS、权限、防火墙三件事逐条过一遍,做成检查清单最省心。

相关实践 →