blog-demo · 运维与踩坑

仓库适配与迁移启动记录

把 Astro 仓库映射到服务器迁移阶段,记录根路径生产构建、容器边界和版本制品条件。

状态
历史记录
最后核对
源码修订
e0d3baa2

仓库适配与迁移启动记录

本文把实施方案映射到现有 blog-demo 项目,并保留迁移启动时的工程盘点。截至 2026 年 9 月 12 日,ECS 私有预发布、生产配置和正式 HTTPS 切流已经完成,迁移以 v1.0.0 收口;GitHub Pages 退出维护。不要把仓库重组、编辑器改造和数据库业务混入静态迁移。

已识别的工程入口

范围 当前实现 迁移处理
Astro astro.config.mjs,静态输出,package-lock.json 锁定 5.18.2 保持根目录结构与锁文件,不迁移前端框架
运行时 CI 与 Release 使用 Node 22 与 npm ci 与生产镜像构建版本保持兼容
站点路径 正式站与日常本地开发均使用 / SITE_BASE 只保留给 Studio 隔离预览,不维护第二套生产路径
规范域名 SITE_URL 缺省为 https://www.doyouhang.live Release 显式使用同一值
旧链接 配置含 cooking 到 food 的重定向 验证根路径跳转结果
搜索 scripts/index-search.mjs 与 scripts/site-base.mjs 生产构建生成根路径 Pagefind 索引
字体 prebuild 调用 scripts/build-fonts.mjs 容器构建保留字体源及依赖,运行镜像只带产物
发布 ci.yml 处理普通提交,release.yml 处理稳定版本制品 Release 不连接 ECS,人工验收后部署
行情 手动抓取、核验并提交快照 进入明确版本,不在构建时临时抓取
Studio studio/server.mjs,本地 4331 端口,含内容和 Git 操作 保留本地用途,不打包或开放为公网 API
验证 tests/run.mjs 启动 preview;另有 Studio、集合和视觉测试 构建与测试使用同一 SITE_BASE,写入型检查顺序运行

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

第一组 根路径生产构建

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

  • 为 Astro site 增加 SITE_URL 输入,默认使用正式域名。拒绝无效 URL,并明确需要绝对 HTTP 或 HTTPS URL。
  • 生产固定 SITE_BASE=/;删除 Pages 构建、部署和项目路径验证。
  • 增加回归覆盖:默认与显式正式域名下,sitemap、RSS、canonical、资源、搜索结果与旧重定向均使用根路径。
  • 完整生产构建运行 npm run build。不要直接编辑 dist 或生成的 CHANGELOG.md。
  • 校验 diff 后单独提交“配置与测试”这一组,与文档、内容修改分开。

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

SITE_URL=https://www.doyouhang.live SITE_BASE=/ npm run check
SITE_URL=https://www.doyouhang.live SITE_BASE=/ npm run build
SITE_URL=https://www.doyouhang.live SITE_BASE=/ npm run test

若仅改配置且无视觉差异,按影响运行路径与搜索回归;有 UI 变化时补充视觉比较,有 Studio 变化时补充独立 Studio 测试。集合测试固定使用生产根路径。

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

在第一组通过后新增 infra/docker/web.Dockerfile、infra/nginx/staging.conf、infra/compose.yaml、infra/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 不可达。

第三组 自动发布工作流

该组对应主方案阶段七,版本制品部分已经实施:普通提交只跑轻量 CI,稳定 SemVer Release 才执行完整验证并生成不可变源码包、镜像包、发布清单与 SHA-256。GitHub Pages 工作流已删除。

Release 不持有 ECS SSH 或运行时密钥。当前继续采用人工下载、校验和部署制品的受控流程;自动部署需另行验证并发锁、失败保留当前版本与回滚。行情快照在本地核验后随版本提交。

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

服务器信息取得情况

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

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