Files
rdgen/docker-entrypoint.sh
T

51 lines
2.1 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.
#!/bin/sh
# rdgen 容器启动入口:修正挂载卷属主 -> 数据库迁移 -> 可选创建初始管理员 -> 降权启动
set -e
DATA_DIRS="/opt/rdgen/exe /opt/rdgen/png /opt/rdgen/temp_zips /opt/rdgen/data"
# 以 root 启动时,把宿主机挂载进来的数据目录属主改为运行用户
for d in $DATA_DIRS; do
if [ -d "$d" ]; then
chown -R appuser:appuser "$d" 2>/dev/null || true
fi
done
# 数据库迁移(SQLite 文件位于持久化的 data 目录)
# 迁移前先冷拷贝一份兜底(防迁移异常),存放在 data/backups;
# 轮转策略统一由维护进程按后台「保留份数」设置处理,这里不删除旧备份。
DB_FILE="/opt/rdgen/data/db.sqlite3"
BACKUP_DIR="/opt/rdgen/data/backups"
if [ -f "$DB_FILE" ]; then
mkdir -p "$BACKUP_DIR"
cp "$DB_FILE" "$BACKUP_DIR/db-$(date +%Y%m%d-%H%M%S).sqlite3" 2>/dev/null || true
fi
su-exec appuser python manage.py migrate --noinput
# 启动定时维护守护进程(清理过期构建任务/临时文件、每日备份数据库)。
# 单实例后台常驻,每小时醒来检查一次;日志写入持久化数据卷。
su-exec appuser sh -c 'python manage.py maintenance --loop >> /opt/rdgen/data/maintenance.log 2>&1 &'
# 可选:首次启动时自动创建超级管理员(已存在同名用户则跳过)
if [ -n "$DJANGO_SUPERUSER_USERNAME" ] && [ -n "$DJANGO_SUPERUSER_PASSWORD" ]; then
export DJANGO_SUPERUSER_USERNAME DJANGO_SUPERUSER_PASSWORD DJANGO_SUPERUSER_EMAIL
su-exec appuser python manage.py shell <<'PY'
import os
from django.contrib.auth import get_user_model
User = get_user_model()
name = os.environ.get("DJANGO_SUPERUSER_USERNAME")
password = os.environ.get("DJANGO_SUPERUSER_PASSWORD")
email = os.environ.get("DJANGO_SUPERUSER_EMAIL", "")
if name and password and not User.objects.filter(username=name).exists():
User.objects.create_superuser(username=name, email=email, password=password)
print(f"[rdgen] 已创建初始管理员账号:{name}")
else:
print("[rdgen] 管理员账号已存在或未配置,跳过创建")
PY
fi
# 降权运行业务进程
exec su-exec appuser "$@"