ac8c49edc752de4506d29d1054a343a05d4d7b7b
CI — Docker Build & Push / Build & Push Image (push) Waiting to run
scripts/deploy.sh — 一键部署:
- 自动检测发行版(Ubuntu/Debian/CentOS/RHEL/Rocky/AlmaLinux/
Fedora/Alpine/Arch/Manjaro/openSUSE)并安装 Docker + Compose
- 兼容 Docker Compose v1(docker-compose)和 v2(docker compose)
- 支持两种部署模式:新建 MySQL / 现有 MySQL
- 支持镜像来源:Gitea 仓库拉取 / 本地构建
- 交互式配置:端口、密钥、管理员账号、MySQL 密码等
- 自动生成加密随机 SECRET_KEY
- 可选启用 Nginx 反向代理(--profile nginx)
- 启动后执行健康检查,访问 /auth/login 验证
scripts/update.sh — 一键更新:
- 读取 .deploy-state 恢复上次部署配置,无需重新输入参数
- 更新前自动备份当前镜像标签(rollback-<时间戳>)
- 拉取新镜像时对比摘要,无变化时提示可跳过
- 健康检查失败时自动回滚至备份标签并重启服务
- 自动清理旧备份镜像(仅保留最近 3 个)
- 支持 --yes 免交互、--tag 指定目标标签
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
个人资料库 (Personal Resource Library)
基于 Flask + MySQL 的个人多媒体资料管理系统。支持文本、图片、音频、视频的上传、URL 下载、磁力下载及在线预览。
功能特性
| 功能 | 说明 |
|---|---|
| 权限管理 | 管理员 / 普通用户两级权限,登录保护所有页面 |
| 资源管理 | 文本、图片、音频、视频四类资源 |
| 本地上传 | 拖拽或点击上传,带实时进度条 |
| URL 下载 | 后台异步下载远程文件,实时轮询进度 |
| 磁力下载 | 调用 aria2c 在后台下载磁力链接资源 |
| 在线预览 | 文本高亮/图片查看/HTML5 音视频播放器 |
| 安全 | bcrypt 加盐哈希密码、CSRF 防护、SQL 注入防护、XSS 防护 |
快速开始
1. 环境准备
- Python 3.10+
- MySQL 8.0+
- (可选)aria2c — 用于磁力下载
2. 安装依赖
pip install -r requirements.txt
3. 配置数据库
创建 MySQL 数据库:
CREATE DATABASE resource_library CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
复制并修改环境配置:
cp .env.example .env
编辑 .env:
SECRET_KEY=your-random-secret-key
DATABASE_URL=mysql+pymysql://root:yourpassword@localhost:3306/resource_library
4. 初始化数据库
python init_db.py
# 自定义管理员账号:
# python init_db.py --admin-user admin --admin-pass YourPass123 --admin-email admin@example.com
5. 启动服务
python run.py
访问 http://localhost:5000,使用默认管理员账号登录:
- 用户名:
admin - 密码:
Admin@123456
项目结构
.
├── app/
│ ├── models/ # 数据库模型 (User, Resource, SystemSetting)
│ ├── routes/ # 路由蓝图 (auth, admin, resources, main)
│ ├── utils/ # 工具模块 (decorators, file_handler, downloader)
│ ├── static/ # 静态文件 (CSS, JS, 上传文件)
│ │ └── uploads/ # 用户上传文件目录(自动创建)
│ └── templates/ # Jinja2 模板
├── config.py # 配置类
├── init_db.py # 数据库初始化脚本
├── run.py # 启动入口
└── requirements.txt
安全设计
| 安全措施 | 实现方式 |
|---|---|
| 密码存储 | Flask-Bcrypt(bcrypt 自动加盐哈希) |
| CSRF 防护 | Flask-WTF CSRFProtect,所有 POST 请求验证 token |
| 权限控制 | Flask-Login @login_required + 自定义 @admin_required |
| SQL 注入 | SQLAlchemy ORM 参数化查询 |
| XSS 防护 | Jinja2 自动转义 HTML 输出 |
| 文件安全 | werkzeug.secure_filename + 扩展名白名单验证 |
| Session | HTTPOnly Cookie + SameSite=Lax |
磁力下载说明
磁力下载需要在服务器上安装 aria2c:
- Linux/macOS:
apt install aria2/brew install aria2 - Windows:从 aria2 Releases 下载并加入 PATH
Description