前言

这个站就是用本文的流程部署的。整条链路很简单:

本地写 Markdown → astro build 构建静态文件 → rsync 推送服务器 → Nginx 对外服务

没有数据库、没有后端进程,2C2G 的服务器跑起来毫无压力。

第一步:本地构建

npm run build

产物在 dist/ 目录,就是一堆 HTML/CSS/JS 静态文件。本站 20 来个页面加起来不到 1 MB。

第二步:rsync 推送

比 scp 好的地方是增量同步,只传变化的文件:

rsync -avz --delete dist/ root@服务器IP:/var/www/hengjiu/

--delete 会把服务器上已经不存在于本地的旧文件删掉,保持两边一致。

第三步:Nginx 托管

/etc/nginx/conf.d/hengjiu.conf

server {
    listen 80;
    server_name 服务器IP或域名;
    root /var/www/hengjiu;
    index index.html;

    location / {
        try_files $uri $uri/ /index.html;
    }
}

改完检查语法再重载:

nginx -t && systemctl reload nginx

踩过的坑

  1. 403 Forbidden:文件权限没问题但就是 403,是 SELinux 上下文不对,用 restorecon -Rv /var/www/hengjiu 修复
  2. 网页打不开:firewalld 和阿里云安全组是两层,80/443 端口两边都要放行
  3. 构建产物不对:一定要确认 dist/ 根目录下有 index.html,如果是 client/server/ 两个子目录说明构建配置带了 SSR 适配器

总结

静态站部署一次配好之后,日常更新就一条命令的事。下一步计划把域名和 HTTPS 配上,流程会再写一篇。