Files
OJ2/.dockerignore
yuetsh 6356643cc9
Some checks failed
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
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 构建上下文是仓库根,这里把不该进去的挡掉。
#
# 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/**