Files
OJ2/docker/.env.example
T
xuyueandClaude Opus 5.5 625bd49801
Deploy / deploy (push) Canceled after 0s
chore(部署): 服务器的数据库和 Redis 改由 OJ2 自己起,不用再改 OJDeploy 下的 compose;附一次性搬家脚本
compose.debian.yml 去掉外接形态,postgres / redis 固定由本栈起(PostgreSQL 18、Redis 8)。
docker/move-db-into-oj2.sh 把服务器上旧栈的 16 / 7 倒进来:先编镜像、确认机房已断开、
备份、恢复时剥掉 dump 里的 md5 口令(18 只认 SCRAM)、核对行数和网络登录,最后交给 deploy.sh。

生产库口令原来是默认的 onlinejudge(超级用户、5445 对公网开着),脚本要求换成强口令才执行。

本机按线上「之前」的状态完整演练过:停机到恢复 36 秒,行数一致,登录态保住,提交照常判题。

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-13 21:10:09 +08:00

77 lines
3.3 KiB
Bash
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.
# 部署用的环境变量。拷成 .env(服务器)或 .env.school(机房)后填。
#
# cp docker/.env.example docker/.env
#
# 仓库里不留任何真实密钥。带 `:?` 的变量没设置时 docker compose 会直接报错退出,
# 不会静默起一个用弱默认值的服务。
# 数据库口令。机房那套连的是服务器的库,两边必须一致。
# 这个账号是超级用户、5445 对公网开着(机房要连),必须是强口令,自己生成:
# openssl rand -hex 32
# 它只在库第一次初始化时生效,之后改这里不会改库里的口令 —— 要换得进库 ALTER ROLE。
POSTGRES_PASSWORD=
# 判题机 token。后端和判题机容器读的是同一个变量,自己生成:
# openssl rand -hex 32
OJ2_JUDGE_TOKEN=
# Redis 口令。会话存在 Redis 里,能连上它就能伪造任意用户(包括超管)的登录态,
# 所以必须设。它会拼进 REDIS_URL,只能用 URL 安全的字符,自己生成:
# openssl rand -hex 32
# 服务器上本栈的 oj-redis 直接用它。
# 机房的 redis 不发布端口,只在 compose 网络里,不需要设。
REDIS_PASSWORD=
# 判题并发。受判题沙箱能力限制,不是越大越好。
# 服务器 2,机房机器宽裕可以给 4。
JUDGE_CONCURRENCY=2
# 试运行(运行例子 / 自己输入 / 后台生成测试点)同时占判题沙箱几路,和上面那个叠加。
# 不设时服务器 2、机房 4。
# TRIAL_CONCURRENCY=2
# DeepSeek key,用于题解 AI 分析。留空则 AI 功能不可用(其余功能不受影响)。
AI_KEY=
# AI 提示走两段式(先诊断、再生成)。填 1 打开,留空为关。
# 服务器和机房共用一个库、各有各的 .env —— 两边要一起开关,不然 ai_hint 里两种口径的数据混在一起。
AI_HINT_DIAGNOSE=
# --- 数据在哪 ---
#
# DATA_DIR 是所有数据卷的根(库、redis、测试点、上传的图片、判题机日志)。
# **不设的话默认是 `../data`,也就是 `OJ2/data` —— 不是部署目录的 `data/`。**
# 服务器上写成:
#
# DATA_DIR=/root/OJDeploy/data
#
# 不设它就等于开一套空数据:空库(站点没有用户没有题)、没有测试点、题面图片 404。
DATA_DIR=
# --- 并行试跑(oj2.xuyue.cc)才需要 ---
#
# 新站和旧站同时跑的时候,这两个必须设,否则会跟旧栈抢资源。
#
# 对外端口。旧 backend 占着 8080(机房 81),新栈换一个,NPM 那边把
# oj2.xuyue.cc 指到这个端口。**NPM 的记录要打开 Websockets Support**,
# 否则学生那边「判题中…」永远不动。
WEB_PORT=
# 判题机的运行状态目录。不设的话是 `$DATA_DIR/judge_server`,和旧判题机同一份 ——
# 试跑期间两个 judger 都在跑,必须分开,例如:
#
# JUDGE_STATE_DIR=/root/OJDeploy/data/judge_server_oj2
#
# 建完记得 `mkdir -p .../{log,run}`。
# `test_case` 和 `public/upload` 仍然共享,那是**故意的** —— 测试点和题面图片
# 两边必须看到同一份。
JUDGE_STATE_DIR=
# --- 只有机房那套需要 ---
# 机房走 http 直连 IP,没有 TLS,必须 false,否则 Cookie 发不回来。
COOKIE_SECURE=false
# 机房没有本地库,连服务器的 5445。不填时默认指向服务器(默认值在 compose.school.yml 里),
# 换服务器才要填。服务器那套不读这两个。
DB_HOST=
DB_PORT=