Files
wait4xandGLM-5.3 cef648db9a fix(exif): 构建 EXIF 提取全线复活——拦截式 loader + 数据仓清障
- 根因双层:①包装层 post-load 的 store.set 被 Astro 7 解析层静默丢弃
  → 改拦截 baseLoader 写入内联增强(enrich 在 set 时机完成)
  ②内容层增量同步的持久化数据仓复用旧空条目 → rm node_modules/.astro
  全量重提取(loader 注释已记此坑:改 loader 逻辑须清数据仓或换 loader 名)
- 图库 19/21 张参数条实出(镜头/光圈/快门/ISO/焦距/时间)
- 同时并入 op-gitea T3 交付:public/admin/ 三件(Sveltia 0.252 pinned
  自托管)+ gitea [cors] 台账;其发现的 title omit 坑已在 config 修正

验证: build 28 页;dist/gallery data-exif 19 条含 ISO;E2E 30/30 PASS
      (staging 29 html)

Spec: 2026-10-25_add-terminal-books-admin

Co-authored-by: GLM-5.3
2026-10-25 13:46:56 +08:00
..

gitea 部署(博客代码托管)

博客重建方案中的自建 git 托管后端:容器只绑 127.0.0.1:13020,公网经 nginx 反代为 https://git.wait4x.online/。本目录是入库快照,宿主实际运行位置为 ~/docker_apps/gitea/。

文件与同步方向

文件 作用
docker-compose.yml 容器编排(gitea/gitea:28.2.0,UID/GID 1000,restart unless-stopped)
app.ini 首启种子配置;密钥(SECRET_KEY/INTERNAL_TOKEN 等)由首启自动生成
nginx-git.wait4x.online.conf nginx 接入草稿,未安装(proxy 头写法对齐主站 halo vhost)

改动流程:先改本目录 → 拷贝到 ~/docker_apps/gitea/ → docker compose up -d。 运行时 app.ini 在宿主 data/gitea/conf/app.ini,含首启生成的密钥, 严禁用本目录快照回覆盖(密钥丢失 = 加密数据不可解密)。

初始化凭据(仅初始化用)

  • 管理员:wait4x;初始密码与 API token 一并存宿主 ~/docker_apps/gitea/init-credentials.txt (0600,不入库——本仓库将公开,凭据不进 git 历史),首登修改后删除该文件敏感行
  • API token(scopes=all)存宿主 ~/docker_apps/gitea/init-credentials.txt(0600,不入库), 供后续 webhook/CI 用,可随时在 gitea UI 撤销重建

管理命令速查(均在宿主 ~/docker_apps/gitea/ 下执行)

# 建用户(关注册实例,账号只能这样建)
docker compose exec -u git gitea gitea admin user create --username <u> --email <e>@wait4x.online --random-password
# 建私有空仓(token 从 init-credentials.txt 取)
curl -X POST http://127.0.0.1:13020/api/v1/user/repos \
  -H "Authorization: token <TOKEN>" -H 'Content-Type: application/json' \
  -d '{"name":"<repo>","private":true,"auto_init":false}'
# 生成新 token
docker compose exec -u git gitea gitea admin user generate-access-token --username <u> --scopes all --raw
# 改密(含管理员自救)
docker compose exec -u git gitea gitea admin user change-password -u <u> -p <新密码>

数据备份

全部状态在宿主 ~/docker_apps/gitea/data/:sqlite(gitea/gitea.db)、 裸仓(git/repositories/)、LFS 与附件(gitea/data/)。 sqlite 直接热拷贝会撕裂,备份前 docker compose down 或用 sqlite3 .backup; 升级前必须先备份。

升级

改 compose 里镜像 tag → docker compose pull → up -d(首启自动迁移 schema,不可降级)。

已知坑

  • [cors] 段已启用(2026-10-25,Sveltia CMS 试水):ALLOW_DOMAIN = https://wait4x.online(试水期的本地源已于收尾移除);HEADERS 必须含 Authorization(token 认证跨源必需,默认仅 Content-Type,User-Agent)。依据:docs.gitea.com config-cheat-sheet#cors

  • 不要开 REQUIRE_SIGNIN_VIEW:它会把匿名 /api/v1/version 一并 403, 而验收与健康检查都裸 curl 该端点;私有性靠 private 仓 + DISABLE_REGISTRATION 保证。

  • nginx 的 client_max_body_size 100M(git push 大 pack)与 app.ini FILE_MAX_SIZE=50(网页上传单文件)是两条独立限制,别混为一谈。

  • vhost 草稿未带 websocket Upgrade 头(与 halo 写法一致);若日后 Actions 实时日志 异常,参照 dpanel vhost 补 Upgrade 头——全局 map $connection_upgrade 已在 default 里定义,新 vhost 直接引用即可,勿重复定义。

  • SSH 通道整体关闭(不映射 22 + DISABLE_SSH=true),克隆统一走 https。

  • DNS/ESA 解析 git.wait4x.online 尚未配置,nginx 接入由运维会话统一执行, 本目录草稿不自行生效。

运行时变更台账(2026-10-25,Phase 4)

  • data/gitea/conf/app.ini 追加 [webhook] ALLOWED_HOST_LIST = 172.22.0.1—— gitea 28 出站 egress 策略默认拦私网地址(废弃名 ALLOWLIST 无效), 此项放行 webhook 回连宿主接收器(172.22.0.1:13021);改后需 restart gitea