Initial commit: rdgen with GitHub/Gitea dual build backend

This commit is contained in:
naeeo
2026-09-29 19:56:02 +08:00
commit a3686a49d4
103 changed files with 20007 additions and 0 deletions
+50
View File
@@ -0,0 +1,50 @@
#!/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 "$@"