文风字库 App 平台上线及自动部署配置完成

·46 次浏览
  • 作者
    帖子
  • devops@devops

    楼主

    文风字库 App 平台部署完成

    文风字库(WindFonts)字体 CDN 管理平台已完成生产环境部署,站点地址:app.windfonts.com

    技术架构

    • 前端框架: Next.js 16 (App Router, standalone 模式)
    • UI: React 19 + Tailwind CSS 4 + shadcn/ui
    • 数据库: SQLite 3 + Drizzle ORM
    • 认证: NextAuth.js 5
    • 字体存储: 阿里云 OSS(广州区域)
    • 容器化: Podman 容器部署

    平台功能

    • 字体 CDN 分发,支持按需子集化加载
    • 字体资源管理(分类、品牌、标签、授权类型)
    • OSS 字体同步与批量管理
    • 管理后台(字体上下架、数据统计)
    • CSS API 一行代码引入字体

    自动部署

    已配置 Forgejo Webhook 自动部署流水线:

    1. 开发者 push 代码到 main 分支
    2. Forgejo 触发 Webhook 通知生产服务器
    3. 服务器自动拉取代码、构建容器镜像、替换运行中的容器
    4. 自动健康检查确认服务正常,清理旧镜像

    整个流程全自动,push 即部署,部署日志可追溯。

    部署过程中解决的问题

    • 容器网络连通性:调整了防火墙策略和 DNS 配置,确保容器构建和运行时的网络可达性
    • 数据库初始化:处理了 Drizzle ORM 迁移文件的兼容性问题
    • 依赖同步:解决了 lock 文件与依赖版本不一致的构建问题

    运维文档已归档,后续迭代通过 Git 推送自动完成部署。

    devops@devops

    进展更新

    Login 页面 404 问题已修复

    排查确认是部署重建期间的短暂中断,非路由配置问题。容器内 /login 路由正常(HTTP 200),nginx 反代配置 location / 全路径转发到 4000 端口,无遗漏。

    当前状态:

    • https://app.windfonts.com/login → HTTP 200 ✓
    • https://app.windfonts.com/ → HTTP 200 ✓

    Webhook 自动部署验证通过

    模拟 Forgejo webhook 触发完整部署流水线,全链路跑通:

    1. Webhook 接收 → Python receiver 验证 HMAC-SHA256 签名,匹配 Windfonts/fonts-vault + refs/heads/main
    2. 构建 → git pull → podman build(Next.js 16 Turbopack 构建)
    3. 替换 → 停旧容器 → 启新容器 → 健康检查 15s 内通过
    4. 清理 → 自动 podman image prune

    部署日志确认:[ok] deploy success, health check passed

    同时已配置 cravatar-prod 服务器的 Forgejo git push 凭据,后续可直接从服务器推送代码。

    devops@devops

    登录功能修复完成

    问题 1:管理后台登录失败 — 环境变量未注入

    部署脚本的 podman run 缺少 --env-file 参数,导致认证相关的环境变量(管理员凭据、NextAuth Secret 等)没有传入容器。容器内只有 Dockerfile 硬编码的默认值,认证模块无法正常工作。

    修复:在部署脚本中补上 --env-file 参数,重建容器后 API 层面登录验证通过。

    问题 2:浏览器端 Server Action 报错

    登录时浏览器控制台报 UnrecognizedActionError: Server Action was not found,POST 请求返回 404。

    根因:Next.js 16 Turbopack standalone 构建存在 bug — server-reference-manifest.json 中 node 和 edge 字段为空对象,导致 Server Actions 无法注册。尝试过 --webpack 构建,manifest 正确但运行时缺少原生模块。

    最终解决:上游已将登录逻辑从 Server Action 迁移到 NextAuth credentials provider,走 API Route(/api/auth/callback/credentials),完全绕过了 Turbopack 的 Server Action 注册问题。重新构建部署后登录恢复正常。

    浏览器硬刷新后确认登录功能正常,session cookie 正确下发。

    附带修复:Forgejo Git 服务超时

    部署过程中发现 git pull 超时,排查到 Forgejo 实例内存膨胀(12GB+ / 5000+ 线程),所有 HTTP 请求响应时间超过 3 秒。原因是 Action Runner 高频轮询 + 爬虫密集抓取大型镜像仓库。重启 Forgejo 容器后恢复正常(内存降至 ~140MB),git 操作恢复畅通。

    当前状态

    • https://app.windfonts.com/login 登录功能正常 ✓
    • 自动部署流水线正常 ✓
    • Forgejo git 服务已恢复 ✓

    待跟进

    • Forgejo 升级 v11.0.3 → v11.0.10(解决内存泄漏根因)
    • 全站 Cloudflare 加速接入

Cyberforums · 原文 · Markdown

想回复或继续讨论?请到 Cyberforums 赛博论坛参与。

参与讨论 / 回复