Initial commit: rdgen with GitHub/Gitea dual build backend
This commit is contained in:
@@ -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 "$@"
|
||||
Reference in New Issue
Block a user