Note: 本仓库已重命名为 yohaku-deploy-action(原名为
shiroi-deploy-action)。GitHub 会自动处理旧链接的重定向,原有 fork 和引用不受影响。
这是一个利用 GitHub Action 去构建私有版本站点并部署到远程服务器的工作流。
这里的项目关系现在更准确地说是:
- Yohaku 是当前设计语言与视觉体系已经完全重构后的闭源完整实现。
- Shiro 是更早期的开源来源项目。
Shiroi更接近 Yohaku 在大改版之前的历史阶段或兼容称呼;如果你需要旧设计风格,可以切换到Shiroi对应的历史版本。
开源版本通常提供了预构建的 Docker 镜像或者编译产物可直接使用,但是当前私有完整实现并没有提供。
因为 Next.js build 需要大量内存,很多服务器并吃不消这样的开销。
因此这里提供利用 GitHub Action 去完成构建然后推送到服务器。
你可以使用定时任务去定时更新 Yohaku,或部署旧风格的 Shiroi 历史版本。
- 仓库重命名:
shiroi-deploy-action→yohaku-deploy-action。 - PR #17 将默认源码仓库从
innei-dev/shiroi修改为innei-dev/Yohaku,以匹配当前主力项目。如果你在部署旧版 Shiroi,请将SOURCE_REPO改回innei-dev/shiroi。 - 工作流已通用化:源码仓库、构建命令、产物路径均可通过环境变量覆盖,详见下节「配置项」。
开始之前,你的服务器首先需要安装 Node.js, npm, pnpm, pm2, sharp。
关于 sharp 的安装,你可以使用
npm i -g sharpsharp 不是必须的,但是在运行过程中会出现报错。参考:https://nextjs.org/docs/messages/sharp-missing-in-production
在你的服务器家目录,新建 yohaku 的目录,然后新建 .env 填写你的变量。
# Env from your private Yohaku/Shiroi repo .env.template
BASE_URL=
NEXT_PUBLIC_API_URL=
NEXT_PUBLIC_GATEWAY_URL=
NEXT_PUBLIC_CLERK_PUBLISHABLE_KEY=
## Clerk
CLERK_SECRET_KEY=
NEXT_PUBLIC_CLERK_SIGN_IN_URL=/sign-in
NEXT_PUBLIC_CLERK_SIGN_UP_URL=/sign-up
NEXT_PUBLIC_CLERK_AFTER_SIGN_IN_URL=/
NEXT_PUBLIC_CLERK_AFTER_SIGN_UP_URL=/
TMDB_API_KEY=
GH_TOKEN=
Fork 此项目,然后你需要填写下面的信息。
如果你需要部署旧版 Shiroi,可直接回退到以下历史 commit,或参考当时的配置自行修改:
| Commit | 说明 | 适用场景 |
|---|---|---|
bc07cfa |
PR #17 之前最后一个 Shiroi 版本。默认源码仓库为 innei-dev/shiroi,部署目录 ~/shiro,PM2 应用名 Shiroi,构建命令为 sh ./ci-release-build.sh。 |
推荐:如果你只想直接使用旧版 Shiroi 的完整配置。 |
80466cf |
standalone + PM2 部署流程修复后的版本。引入了 pm2/ecosystem.config.js 模板,部署路径对齐为 standalone/apps/web。 |
如果你需要 standalone 部署模式的修复版本。 |
d495fef |
最初加入 rollback.sh 的版本。 |
如果你想看最早的部署脚本实现。 |
直接切换到 Shiroi 最后一个可用版本:
git clone https://github.com/innei-dev/yohaku-deploy-action.git
cd yohaku-deploy-action
git checkout bc07cfa工作流支持以下环境变量(在 .github/workflows/deploy.yml 的 env 段修改,或通过 GitHub Variables 注入):
| 变量名 | 默认值 | 说明 |
|---|---|---|
SOURCE_REPO |
innei-dev/Yohaku |
私有源码仓库(格式:owner/repo) |
BUILD_COMMAND |
pnpm --filter @yohaku/web build:ci |
构建命令。 workflow 会在构建后自动执行 standalone 打包与 zip;如果你的项目结构不同,可修改此命令 |
STANDALONE_SUBPATH |
standalone/apps/web |
构建产物中 standalone 包的相对路径。Yohaku 与旧版 Shiroi 若结构不同,请按需调整 |
如果你部署的是旧版 Shiroi(monorepo 结构为 apps/web),通常保持默认即可;若你的仓库结构不同(例如单仓库直接输出到 .next/standalone),请修改 STANDALONE_SUBPATH。
工作流在 GitHub Actions 里执行 next build 时,会通过仓库 Secrets 注入 BASE_URL、NEXT_PUBLIC_API_URL 与 NEXT_PUBLIC_GATEWAY_URL,须与服务器 ~/yohaku/.env(及私有仓库 Dockerfile / 模板)一致。
BASE_URL:站点对外根 URL(无尾部斜杠为宜),例如https://example.com。与私有镜像构建阶段一致:Dockerfile中常用ARG BASE_URL,并令NEXT_PUBLIC_GATEWAY_URL=${BASE_URL}、NEXT_PUBLIC_API_URL=${BASE_URL}/api/v2。NEXT_PUBLIC_*:直接参与next build与客户端 bundle;若启用 ISR,构建期/再验证会依赖正确端点,不能只依赖部署机.env而忽略 Actions。
在仓库 Settings → Secrets and variables → Actions 中新增:
BASE_URLNEXT_PUBLIC_API_URLNEXT_PUBLIC_GATEWAY_URL
HOST服务器地址USER服务器用户名PASSWORD服务器密码PORT服务器 SSH 端口KEY服务器 SSH Key(可选,密码 key 二选一)GH_PAT可访问当前私有源码仓库的 Github TokenBASE_URL、NEXT_PUBLIC_API_URL、NEXT_PUBLIC_GATEWAY_URL供 CI 构建注入(见上一节;需与服务器.env一致)
- 你的账号可以访问当前私有源码仓库(Yohaku 或你正在使用的对应私有仓库)。
- 进入 tokens - Personal access tokens - Tokens (classic) - Generate new token - Generate new token (classic)
为了让 PM2 在服务器重启之后能够还原进程。可以使用:
pm2 startup
pm2 save