← 返回博客

仓库适配与迁移启动记录

把 Astro 仓库映射到服务器迁移阶段,记录双目标构建、容器边界和后续自动化条件。

2026-09-12 约 4 分钟读完

补记于 2026-09-12

本文目录 跳到想读的章节
  1. 已识别的工程入口
  2. 第一组 双目标构建
  3. 第二组 静态容器与私有入口
  4. 第三组 自动发布工作流
  5. 服务器信息取得情况

本文把实施方案映射到现有 blog-demo 项目,并保留迁移启动时的工程盘点。截至 2026 年 9 月 12 日,静态双目标构建、ECS 私有预发布、生产配置和正式 HTTPS 切流已经完成;自动发布与后端仍按后续阶段推进。不要把仓库重组、编辑器改造和数据库业务混入静态迁移。

已识别的工程入口

范围当前实现迁移处理
Astroastro.config.mjs,静态输出,package-lock.json 锁定 5.18.2保持根目录结构与锁文件,不迁移前端框架
运行时.github/workflows/deploy.yml 使用 Node 22 与 npm ci首批镜像和新工作流沿用兼容版本
站点路径SITE_BASE 默认 /,Pages 使用 /blog-demo/沿用变量名,不引入平行的 BASE_PATH
规范域名SITE_URL 控制 Astro site,缺省仍为 Pages 源站Pages 构建保留默认值;ECS 构建使用 https://www.doyouhang.live
旧链接配置含 cooking 到 food 的重定向验证两种 base 下的跳转结果
搜索scripts/index-search.mjsscripts/site-base.mjs每个构建目标单独生成 Pagefind 索引
字体prebuild 调用 scripts/build-fonts.mjs容器构建保留字体源及依赖,运行镜像只带产物
发布deploy.yml 支持 main 推送、手动及交易日定时重建第一批改动保持旧 Pages 发布可用
行情工作流抓取行情后构建,失败可回退已有数据ECS 后续发布仍需定时内容更新,不把旧数据当新数据
Studiostudio/server.mjs,本地 4331 端口,含内容和 Git 操作保留本地用途,不打包或开放为公网 API
验证tests/run.mjs 启动 preview;另有 Studio、集合和视觉测试构建与测试使用同一 SITE_BASE,写入型检查顺序运行

以上表格记录当前工程入口。阶段三、四的构建、浏览器、容器、公网和 Pages Actions 验收结果见搭建与切流记录;临时日志和端口探测原始输出不写入长期项目约定。

第一组 双目标构建

涉及 astro.config.mjs、已有路径工具、tests/smoke.mjs 及相应配置测试。只有定位到实际路径问题时才修改页面或组件;站内链接继续使用 import.meta.env.BASE_URL

  • 为 Astro site 增加 SITE_URL 输入,默认保留现有 Pages 地址。拒绝无效 URL,并明确需要绝对 HTTP 或 HTTPS URL。
  • 沿用 SITE_BASE,Pages 为 /blog-demo/,ECS 为 /;不得改掉 deploy.yml 的 Pages 参数。
  • 增加回归覆盖:未设置 SITE_URL 时仍使用 Pages 域名;指定新域名时 sitemap、RSS 与 canonical 使用新值;两种 base 的资源、搜索结果与旧重定向可访问。
  • 每个目标运行完整 npm run build 并独立验证;前一次 dist 不得混入后一次发布。不要直接编辑 dist 或生成的 CHANGELOG.md。
  • 校验 diff 后单独提交“配置与测试”这一组,与文档、内容修改分开。

本机验证应依次执行;命令输出保存到任务临时日志并保留原始退出码:

SITE_BASE=/blog-demo/ npm run check
SITE_BASE=/blog-demo/ npm run build
SITE_BASE=/blog-demo/ npm run test
SITE_BASE=/ npm run check
SITE_BASE=/ npm run build
SITE_BASE=/ npm run test

SITE_URL 功能实现后,根路径那一组再使用验证用域名检查产物中的绝对 URL;实际 ECS 域名不能凭空填写。若仅改配置且无视觉差异,按影响运行路径与搜索回归;有 UI 变化时补充视觉比较,有 Studio 变化时补充独立 Studio 测试。集合测试目前内部固定 /blog-demo/,不能用它单独证明根路径兼容。

第二组 静态容器与私有入口

在第一组通过后新增 infra/docker/web.Dockerfileinfra/nginx/staging.confinfra/compose.yamlinfra/compose.staging.yaml.dockerignore;暂不新增 API 或数据库空壳。

  • 构建使用 npm ci 与 npm run build;仅 dist 进入运行镜像,排除 Studio、Git 元数据、密钥、文档和本地工具。
  • 基础 Compose 不含 ports;预发布只发布 127.0.0.1:8080:80,检查最终合并配置。
  • Nginx 正确提供静态深层路由、404、哈希资源与 Pagefind 文件;不采用通用 SPA fallback。
  • 在目标 ECS 核实架构、内存、磁盘、Docker 和镜像源可达性;检查现有端口占用,保留已有服务。
  • 先做服务器 localhost 检查,再做 SSH Tunnel 浏览器验证;阶段二期间从外网确认 8080 不可达。

第三组 自动发布工作流

该组对应主方案阶段七,尚未实施。当前生产发布采用本机构建与校验、归档传输、ECS 导入镜像和固定发布目录的受控手工流程;deploy.yml 继续负责 Pages。自动化前仍需验证不可变镜像摘要、配置匹配、并发锁、失败保留当前版本和回滚。

CI 与部署端分别防并发;不能为 GitHub 托管 runner 把 ECS SSH 向任意来源开放。推荐出站拉取发布清单,具体仓库选型以 ECS 的可达性和权限验证为准。行情刷新职责需明确保留,未来切停 Pages 时不能一起丢失。

正式静态入口已经上线。后端和 PostgreSQL 继续按照主方案的后续阶段实施;首个动态业务尚未确定时,不部署公网写入口。

服务器信息取得情况

  • 域名、规范域名策略、ICP备案和阿里云接入状态已经确认;公安备案尚未办理。
  • ECS 系统、CPU 架构、内存、磁盘、公网 IPv4、现有服务和计划端口已经盘点;未确认 IPv6,因此不发布 AAAA。
  • SSH 连接方式可用;密钥和实际连接参数只保存在安全配置中,不写入本目录。
  • 确定 ECS 可稳定拉取的镜像仓库、只读凭据和备份位置;完成前继续使用已校验的受控镜像传输。
  • 明确首个真实动态业务、身份与权限要求,以及可接受的恢复点和恢复时长。

未完成项不阻塞当前纯静态站,但会阻塞自动发布或后端阶段的完成声明。

读到这里,谢谢你的时间。

如果还想继续读下去,
新的文章和闪念会送进 RSS。

订阅这本档案 ↗