从 Wagtail 迁移到 Astro(四):上线
· 约 7 分钟阅读
Last updated on

从 Wagtail 迁移到 Astro(四):上线

作者: Alex Xiang


本文是「Wagtail 迁移 Astro」系列的第四篇,说明如何把 Astro 构建好的静态站点部署到线上,并兼顾备案与访问方式。

一、本地构建

在项目根目录执行:

cd astro-site
pnpm build

默认会生成 静态站点dist/ 目录,包含:

  • 所有页面的 index.html
  • 静态资源(JS/CSS/字体等)
  • 若有 public/ 下的文件(如图片、favicon),也会被拷贝到 dist/ 对应路径

构建完成后,可在本地用 pnpm preview 预览,确认无 404、资源加载正常。


二、部署到服务器

2.1 上传方式

常见做法有两种:

  • rsync / scp:把 dist/ 整个同步到服务器某个目录(如 /work/zicode-astro),用脚本或 Makefile 封装一条命令。
  • CI/CD:在 Git 仓库里配置 GitHub Actions / GitLab CI,在 push 后自动执行 pnpm build,再把 dist/ 上传到服务器或对象存储。

本站采用 部署脚本 + SFTP/SCP:在项目里维护一个 scripts/deploy_astro.py,读取配置(服务器地址、目标路径、认证方式),将本地 dist/ 上传到远程目录。

2.2 目录与 Web 根路径

  • 服务器上指定一个目录作为「Astro 站点根路径」,例如 /work/zicode-astro
  • Nginx(或其它 Web 服务器)将该目录设为 root,并配置 try_filesfallback,使 /blog/xxx/ 这类路径能正确返回对应的 index.html(SPA/静态路由友好配置)。

示例(仅作参考):

root /work/zicode-astro;
index index.html;
location / {
    try_files $uri $uri/ $uri/index.html =404;
}

这样 /blog/wagtail-to-astro-1-why/ 会对应 dist/blog/wagtail-to-astro-1-why/index.html。若 Astro 配置了 trailingSlash: 'always',生成的目录结构即带 index.html,与上述配置匹配。

2.3 权限与属主

确保 Web 进程(如 www-datanginx 用户)对该目录有读权限;若通过 SSH 上传,上传后可用 chown 调整属主。


三、备案与 HTTPS

3.1 备案号

若站点部署在国内且使用国内机房,需完成 ICP 备案。备案通过后,在页脚等处展示备案号,并链接到工信部查询页,例如:

本站已在 Footer 组件中加入该链接。

3.2 HTTPS

建议全站使用 HTTPS

  • 用 Nginx 配置 SSL(如 Let’s Encrypt 证书),将 HTTP 重定向到 HTTPS。
  • Astro 构建出的页面中的链接若为相对路径,无需修改;若配置了 site 或 canonical,确保为 https:// 开头。

四、发布流程小结

  1. 本地(或 CI)执行 pnpm build
  2. dist/ 上传到服务器目标目录。
  3. 确认 Nginx 指向该目录,且 try_files 配置正确。
  4. 检查备案号与 HTTPS,必要时做 301 从旧 Wagtail 地址到新 Astro 地址。

注意事项:首次上线前建议在服务器上手动执行一次 chmod -R o+r(或把目录属主交给 Web 用户),避免因权限导致 403。若使用 CI/CD,确保流水线有权限写入目标目录或通过 SSH 密钥上传。完成以上步骤,Astro 版博客即可对外提供服务。

本系列文章(一)为什么迁移与选型 · (二)迁移的几个阶段 · (三)添加新文章 · (四)上线(本文) · (五)数据同步与脚本化 · (六)主题与功能打磨