2026-09-27 18:34:19 +08:00
|
|
|
|
# 班级小助手 · Docker 单容器部署(SQLite + 数据卷)
|
|
|
|
|
|
#
|
|
|
|
|
|
# 适用:云服务器 / 与别的服务共用一台机器。相比 deploy/docker-compose.yml(MySQL 变体)
|
|
|
|
|
|
# 少跑一个数据库容器,内存占用小很多;数据落在 Docker 卷 classhelper-data 里。
|
|
|
|
|
|
#
|
|
|
|
|
|
# 使用:
|
|
|
|
|
|
# 1) cp deploy/.env.sqlite.example deploy/.env.sqlite 并填 JWT_SECRET / 管理员密码
|
|
|
|
|
|
# (生成密钥:node -e "console.log(require('crypto').randomBytes(48).toString('hex'))")
|
|
|
|
|
|
# 2) docker compose -f deploy/docker-compose.sqlite.yml --env-file deploy/.env.sqlite up -d --build
|
|
|
|
|
|
# 3) 访问:http://<服务器IP>:${SERVER_PORT}/
|
|
|
|
|
|
#
|
|
|
|
|
|
# 首次启动(AUTO_MIGRATE=true)会自动执行 prisma/migrations 里的建表语句并创建管理员账号,
|
|
|
|
|
|
# 见 packages/server/src/lib/db-bootstrap.ts("Docker 挂载空数据卷"就是它的目标场景之一)。
|
|
|
|
|
|
#
|
|
|
|
|
|
# 备份:docker run --rm -v classhelper-sqlite_classhelper-data:/data -v "$PWD":/backup alpine \
|
|
|
|
|
|
# tar czf /backup/classhelper-db.tar.gz -C /data .
|
|
|
|
|
|
|
|
|
|
|
|
name: classhelper-sqlite
|
|
|
|
|
|
|
|
|
|
|
|
services:
|
|
|
|
|
|
server:
|
|
|
|
|
|
build:
|
|
|
|
|
|
context: ..
|
|
|
|
|
|
dockerfile: deploy/Dockerfile
|
|
|
|
|
|
target: runtime
|
2026-10-05 20:05:39 +08:00
|
|
|
|
image: classhelper-server:${APP_VERSION:-1.1.1}
|
2026-09-27 18:34:19 +08:00
|
|
|
|
restart: unless-stopped
|
|
|
|
|
|
environment:
|
|
|
|
|
|
NODE_ENV: production
|
|
|
|
|
|
HOST: 0.0.0.0
|
|
|
|
|
|
PORT: 4000
|
|
|
|
|
|
DATABASE_PROVIDER: sqlite
|
|
|
|
|
|
# 必须写绝对路径:容器里 serverRoot 是 /app/server,相对路径会解析到别处
|
|
|
|
|
|
DATABASE_URL: file:/app/data/classhelper.db
|
|
|
|
|
|
# 首启动自动建表 + 建管理员;生产自检会拒绝 dev.db 与过短的 JWT_SECRET
|
|
|
|
|
|
AUTO_MIGRATE: 'true'
|
|
|
|
|
|
STARTUP_DB_CHECK: 'true'
|
|
|
|
|
|
JWT_SECRET: ${JWT_SECRET:?请在 deploy/.env.sqlite 中设置(≥32 位随机串)}
|
|
|
|
|
|
JWT_EXPIRES_IN: ${JWT_EXPIRES_IN:-7d}
|
|
|
|
|
|
CORS_ORIGIN: ${CORS_ORIGIN:-*}
|
|
|
|
|
|
TRUST_PROXY: '1'
|
|
|
|
|
|
RATE_LIMIT_ENABLED: 'true'
|
|
|
|
|
|
LOG_LEVEL: ${LOG_LEVEL:-info}
|
|
|
|
|
|
TERM_START_DATE: ${TERM_START_DATE:-}
|
|
|
|
|
|
INITIAL_ADMIN_USERNAME: ${INITIAL_ADMIN_USERNAME:-admin}
|
|
|
|
|
|
INITIAL_ADMIN_PASSWORD: ${INITIAL_ADMIN_PASSWORD:-admin123}
|
2026-10-05 16:39:38 +08:00
|
|
|
|
|
2026-09-27 18:34:19 +08:00
|
|
|
|
DEFAULT_CLASS_PASSWORD: ${DEFAULT_CLASS_PASSWORD:-123456}
|
|
|
|
|
|
DEFAULT_TEACHER_PASSWORD: ${DEFAULT_TEACHER_PASSWORD:-123456}
|
|
|
|
|
|
ports:
|
|
|
|
|
|
- '${SERVER_PORT:-4000}:4000'
|
|
|
|
|
|
volumes:
|
|
|
|
|
|
- classhelper-data:/app/data
|
|
|
|
|
|
|
|
|
|
|
|
volumes:
|
|
|
|
|
|
classhelper-data:
|