Files
OJ2/docker/.env.example
T
xuyueandClaude Opus 5.5 793848b06f
Deploy / deploy (push) Canceled after 0s
refactor(登录): 登录态从 Cookie 换成 access token + refresh token
- access token 是 15 分钟的 JWT,走 Authorization: Bearer;refresh token 7 天,每次换都轮换
- 退出登录、改密码、禁用账号仍然立刻生效:每个请求核对 Redis 会话和库里新加的 user.token_version
- 在服务器后台改密码 / 禁用,机房那边登着的也会一起下线(原来两边 Redis 分开,管不到)
- WebSocket 握手借子协议带 token;JWT 密钥存在本站 Redis,部署不用加配置
- 去掉 COOKIE_SECURE;上线后所有人要重新登录一次

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-20 19:22:52 +08:00

74 lines
3.2 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=
# --- 只有机房那套需要 ---
# 机房没有本地库,连服务器的 5445。不填时默认指向服务器(默认值在 compose.school.yml 里),
# 换服务器才要填。服务器那套不读这两个。
DB_HOST=
DB_PORT=