浅念
|
250d4355b9
|
build(deploy): production images, compose stacks and 1panel guide
P5-prep Task 1(docs/plans/2026-09-21-P5-准备件.md):
- docker/server.Dockerfile:单镜像 photo-live-server 多角色(api-cn/api-ov/
worker/sync/migrate-deploy/seed-admin,entrypoint.sh 分发;migrate-deploy
支持 cn|ov|all 区域参数)。三阶段:全量 install(锁文件冻结)→ prisma
generate 双库 + 逐包构建;--prod 依赖层;runtime=node:20-alpine+openssl/curl
+ 全局 prisma@5.22.0(对齐锁文件)+ 双库 client 镜像内重建(db-cn 落 pnpm
store .prisma、db-ov 落包内 generated/)。sharp 走 musl 预编译验证通过。
- docker/web.Dockerfile + infra/deploy/nginx.conf.template:photo-live-web
(nginx:alpine + envsubst 模板)。viewer(/,history 回退) + admin(/admin/,
hash 路由) + /v1 反代 API_UPSTREAM(含 /v1/realtime WS 升级)+
/assets/、/admin/assets/、/embed/v1/ immutable 长缓存(admin assets 的
alias 前缀剥除坑已实测修复)。VITE_* 为构建期参数(VIEWER_BASE/
EMBED_ORIGIN 随域名构建传入)。
- infra/deploy/docker-compose.cn.yml / -ov.yml:cn=api-cn+worker+sync+web,
ov=api-ov+web-ov(核实架构:sync 仅 cn 侧,inbox/emergency 内嵌 api-ov,
无 ov 侧 sync 进程);健康检查 /v1/health、unless-stopped、json-file
10m×3、外部 1panel-network 复用 1Panel MySQL/Redis、SERVER_IMAGE/
WEB_IMAGE 环境变量化镜像 tag(回滚杠杆)。
- .env.production.example-cn/-ov:生产变量全量清单(cn 25 键/ov 24 键,
DB/Redis/OSS/SYNC/AUTH/限速/域名分组注释,源自 services+packages
process.env 全量审计);.gitignore 放行 example,真实 .env.production-*
永不入库。
- infra/deploy/README-1Panel.md:镜像导入双路径(save tar 导入 / 仓库 pull)、
MySQL 建库授权 SQL(utf8mb4_0900_bin,<8.0.30 回退 utf8mb4_bin——D12)、
Redis 连接、1Panel 编排、OpenResty 反代+证书、migrate-deploy 一次性容器、
首次部署顺序(DB→迁移→ov 栈→cn 栈→seed→冒烟)。
- 根 package.json pnpm.onlyBuiltDependencies 增补 sharp/prisma/@prisma/
engines/@prisma/client(镜像构建所需 install 脚本白名单)。
本地验证:两镜像构建成功(server 988MB / web 97.7MB);compose config 校验
通过;server 镜像内逐服务 require(sharp/argon2/双 Prisma client/bullmq/
ioredis)与双引擎 so.node、migrate-deploy 角色、无 .env 泄漏均实测;web 镜像
容器实测路由(viewer 回退/admin 子路径/assets 与 embed immutable/WS 代理路径
502 语义)全通过。未起真实栈(无真实 DB,符合准备件边界)。
Co-Authored-By: Claude Code <noreply@anthropic.com>
|
2026-09-21 01:39:55 +08:00 |
|
浅念
|
65726702f3
|
feat(sync): cn event coverage, bootstrap and outbox sender
Co-Authored-By: Claude Code <noreply@anthropic.com>
|
2026-09-18 15:21:41 +08:00 |
|
浅念
|
3d6e9ce175
|
feat(ov): ov schema, entry skeleton and compose profile
P2 Task 2 ov 数据层:
- compose ov profile:mysql-ov(mysql:8.4,127.0.0.1:3309,库级
utf8mb4_0900_bin)+ redis-ov(6381),cn 侧默认 up 不受影响
(3307/3308 已被其它本机项目占用,端口决策 3309)
- @photo/db-ov:9 表 schema(albums_ov/photos_ov 副本、sync_inbox/
sync_state 同步账本(水位行同表标志位)、like_batches/album_stats/
visit_sessions/visit_requests 互动域、outbox_stat_events 回传队列);
迁移 20260918060102_init_ov 走固化校对手决流程,information_schema
复核全部业务表/列 utf8mb4_0900_bin(_prisma_migrations 同 cn 先例
保持 unicode_ci)
- generator 独立 output(包内 generated/):pnpm 将两包 @prisma/client
提升为同一 store 实例,默认 .prisma/client 输出会被双 schema 互相
覆盖,ov 客户端独立产出经 src/index.ts 转出口
- ov 入口骨架:main-ov.ts(PORT_OV 默认 8081)+ app-ov.module.ts
(仅管线骨架 + /v1/health,feature modules 后续任务装配);logger
装配选项抽取至 shared/logger-options.ts 供 cn/ov 双入口共用(行为
不变,P1 套件守护)
- test/reset-ov.ts:ov 库 truncate-if-exists 隔离工具(无 MinIO 清理)
- 根脚本:db:generate 双库齐跑,新增 db-ov:migrate/db-ov:generate/dev:ov
Co-Authored-By: Claude Code <noreply@anthropic.com>
|
2026-09-18 14:11:41 +08:00 |
|
浅念
|
f9cb72ed06
|
feat(viewer): vite vue3 scaffold with routing and i18n
- apps/viewer (@photo/viewer): Vite 5 + Vue 3.4 + TS 最小骨架(无 Pinia/UI 库)
- router: /a/:token 活动页 + /a/:token/p/:photoId 单图深链(复用活动页组件)
- i18n: vue-i18n 9,zh-CN/en 词条,localStorage(viewer.locale) 持久 +
navigator.language 检测兜底 zh-CN;顶栏语言切换组件;文案全量走 i18n
- api client: 类型化 fetch 封装(契约生成类型直连),错误信封 → ApiError,
错误码 → i18n key 映射表(src/api/errors.ts)
- scripts: dev/build/preview/test(vitest 10 例)/test:e2e(Playwright 冒烟,
webServer 自拉 dev)/lint/vue-tsc 全部接入 turbo
- root: +@playwright/test、+eslint-plugin-vue(flat config 收敛到 apps/**/*.vue)、
pnpm.onlyBuiltDependencies 放行 esbuild
Co-Authored-By: Claude Code <noreply@anthropic.com>
|
2026-09-18 09:12:45 +08:00 |
|
浅念
|
7d250ec342
|
feat(api): cn-app skeleton, toolchain, env loading convention
Co-Authored-By: Claude Code <noreply@anthropic.com>
|
2026-09-17 19:14:41 +08:00 |
|
浅念
|
1dae00eaef
|
feat(contracts): p1a endpoint contracts
Co-Authored-By: Claude Code <noreply@anthropic.com>
|
2026-09-17 17:31:11 +08:00 |
|
浅念
|
538fdd46dd
|
chore(infra): cn-side mysql/redis/minio compose
Co-Authored-By: Claude Code <noreply@anthropic.com>
|
2026-09-17 16:46:40 +08:00 |
|
浅念
|
68a7d6a6d4
|
chore: pnpm workspace and turbo pipeline
Co-Authored-By: Claude Code <noreply@anthropic.com>
|
2026-09-17 16:24:12 +08:00 |
|