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 可稳定拉取的镜像仓库、只读凭据和备份位置;完成前继续使用已校验的受控镜像传输。
- 明确首个真实动态业务、身份与权限要求,以及可接受的恢复点和恢复时长。
未完成项不阻塞当前纯静态站,但会阻塞自动发布或后端阶段的完成声明。