Files
OJ2/.dockerignore
T
xuyueandClaude Opus 5 6356643cc9
Deploy / deploy (push) Has been cancelled
ci(部署): 部署走 GitHub Actions,产物挪到 runner 上编
服务器性能差,镜像 builder 阶段(1238 个包的 bun install + bun compile +
vite build)首次约 5 分钟,光前端就 160s。改成在 runner 上编好 dist/oj2-api
和 apps/web/dist,rsync 过去,服务器那边只剩几条 COPY。

服务器自己编的能力没有砍掉。Dockerfile 顶部加了全局 ARG ARTIFACTS:

  build(默认)    builder 阶段自己编,只要有 docker 就能手动部署
  prebuilt         用构建上下文里现成的产物,builder 不进构建图

实现是两个 scratch 阶段归一成 /artifacts/ 布局,再用变量阶段名
FROM artifacts-${ARTIFACTS} 选一个,运行时阶段不关心产物是谁编的。

deploy.sh 加 --prebuilt:产物缺失在自检就 die;顺带检测 buildx —— 没装的话
compose 会退回 classic builder,那个不看依赖图、所有阶段挨个跑,产物白编
(结果正确但不省时间),黄字提醒不阻断。

.dockerignore 末尾放行两个产物路径,必须在 dist/ 那些规则之后,
dockerignore 是最后一条匹配说了算。

顺手删掉 apps/web/.github/ —— 从 ojnext 抄来的残留,路径不对(GitHub 只认
仓库根的 .github/workflows/)从来没跑过,内容也是 ojnext 的。

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-08-25 18:30:22 -06:00

41 lines
1.1 KiB
Plaintext

# 构建上下文是仓库根,这里把不该进去的挡掉。
#
# data/ 尤其重要:测试用例和上传文件可以有几十 GB,而且 judge_server/run 下
# 是判题沙箱以别的 uid 建的目录,docker 连 stat 都做不了,不排除的话构建直接失败。
data/
dist/
node_modules/
**/node_modules/
.git/
.github/
# 本地产物与缓存
**/dist/
**/.vite/
**/*.log
# 密钥绝不进镜像层
.env
.env.*
docker/.env
docker/.env.*
!.env.example
!docker/.env.example
# 前端 dist 由构建阶段自己生成,本地那份不要带进去污染
apps/web/dist/
# —— 例外:ARTIFACTS=prebuilt 时,产物本身就是构建输入 ——
#
# 这几条必须放在文件最后:dockerignore 是**最后一条匹配的规则说了算**,
# 写在上面那些 dist 规则前面等于没写。
#
# ARTIFACTS=build(默认,服务器手动部署走的那条)时它们只是让上下文多传
# 几十 MB,镜像里用不到;本地根本没编过的话这两个路径不存在,也不影响。
!dist/oj2-api
!apps/web/dist
!apps/web/dist/**