huty f3bd3f68a5
Some checks failed
CI — Docker Build & Push / Build & Push Image (push) Failing after 10m15s
新增文件夹功能
2026-04-23 15:45:28 +09:00
2026-04-23 12:58:11 +09:00
2026-04-23 15:45:28 +09:00
2026-04-23 14:18:24 +09:00

个人资料库 (Personal Resource Library)

基于 Flask + MySQL 的个人多媒体资料管理系统。支持文本、图片、音频、视频的上传、URL 下载、磁力下载及在线预览。

Demo 地址: https://prl.hty1024.com

功能特性

功能 说明
权限管理 管理员 / 普通用户两级权限,登录保护所有页面
资源管理 文本、图片、音频、视频四类资源
本地上传 拖拽或点击上传,带实时进度条
URL 下载 后台异步下载远程文件,实时轮询进度
磁力下载 调用 aria2c 在后台下载磁力链接资源
在线预览 文本高亮 / 图片查看 / HTML5 音视频播放器
安全 bcrypt 加盐哈希密码、CSRF 防护、SQL 注入防护、XSS 防护

快速开始

1. 本地开发

环境要求: Python 3.10+、MySQL 8.0+、(可选)aria2c

# 安装依赖
pip install -r requirements.txt

# 配置环境
cp .env.example .env
# 编辑 .env设置 DATABASE_URL 和 SECRET_KEY

# 初始化数据库
python init_db.py
# 自定义管理员python init_db.py --admin-user admin --admin-pass YourPass123

# 启动
python run.py

访问 http://localhost:5000,默认管理员:用户名 admin,密码 Admin@123456


2. Docker 部署(一键脚本)

适用于 Ubuntu / Debian / CentOS / RHEL / Alpine / Arch 等主流 Linux 发行版

git clone <仓库地址>
cd ai-app-database
bash scripts/deploy.sh

脚本会引导完成所有配置,支持两种部署模式:

模式 说明
新建 MySQL(默认) 用 Docker 启动 MySQL适合全新服务器
使用已有 MySQL 连接外部数据库,适合已有数据库的场景

更新服务:

bash scripts/update.sh
# 支持参数:--yes跳过确认、--tag <镜像标签>

3. 手动 Docker Compose 部署

方式 A新建 MySQL完整栈

cp .env.docker.example .env.docker
# 编辑 .env.docker设置密码和 SECRET_KEY
docker compose --env-file .env.docker up -d
# 含 Nginxdocker compose --env-file .env.docker --profile nginx up -d

方式 B外置 MySQL

cp .env.external-db.example .env.external-db
# 编辑 .env.external-db填写 DATABASE_URL 等
docker compose -f docker-compose.external-db.yml --env-file .env.external-db up -d

CI/CD 自动化

Gitea Actions 工作流

工作流 触发条件 说明
ci.yml push 到 main / master / develop 构建镜像并推送至 Gitea 镜像仓库
release.yml push v* tag如 v1.2.3 构建正式版镜像,生成多级标签
deploy-demo.yml CI 完成后自动触发 / 手动触发 部署到 Demo 环境self-hosted runner

镜像标签规则

触发 生成标签
push main :latest:sha-<短commit>
push develop :develop:sha-<短commit>
push v1.2.3 :1.2.3:1.2:1:latest
push v1.2.3-rc1 :1.2.3-rc1(不推送 :latest

配置 Secrets

在 Gitea → 仓库 → 设置 → Secrets 中添加:

Secret 名称 用途 备注
REGISTRY_TOKEN 推送 / 拉取镜像 需要 package:write 权限
DEMO_SECRET_KEY Flask SECRET_KEY 随机字符串≥32 位
DEMO_ADMIN_PASS Demo 管理员密码 首次部署后可修改

注意: Gitea 禁止以 GITEA_GITHUB_ 开头的 Secret 名称。


Demo 环境

项目 配置
访问地址 https://prl.hty1024.com
部署方式 Docker + 外置 MySQL + Caddy 反向代理
运行位置 Gitea runner 同一服务器self-hosted
自动更新 push 到 main 分支后CI 成功即自动部署

Caddy 配置

Demo 环境使用外置 Caddy 提供反向代理和自动 TLS。

1. 在主 Caddyfile 中启用 sites 目录导入:

# /etc/caddy/Caddyfile
{
    email your@email.com
}

import /etc/caddy/sites/*.caddy

2. 复制站点配置:

sudo mkdir -p /etc/caddy/sites
sudo cp docker/caddy/prl.hty1024.com.caddy /etc/caddy/sites/
sudo systemctl reload caddy

Caddy 会自动申请并续期 Let's Encrypt TLS 证书。


项目结构

.
├── app/
│   ├── models/          # 数据库模型 (User, Resource, SystemSetting)
│   ├── routes/          # 路由蓝图 (auth, admin, resources, main, errors)
│   ├── utils/           # 工具模块 (decorators, file_handler, downloader)
│   ├── static/          # 静态文件 (CSS, JS)
│   │   └── uploads/     # 用户上传文件目录(自动创建)
│   └── templates/       # Jinja2 模板
├── docker/
│   ├── entrypoint.sh    # 容器入口脚本等待DB、初始化、启动
│   ├── nginx.conf       # Nginx 反向代理配置(可选)
│   └── caddy/
│       └── prl.hty1024.com.caddy  # Demo 环境 Caddy 站点配置
├── scripts/
│   ├── deploy.sh        # Linux 一键部署脚本
│   └── update.sh        # 一键更新脚本(含自动回滚)
├── .gitea/workflows/
│   ├── ci.yml           # CI构建并推送镜像
│   ├── release.yml      # Release正式版镜像
│   └── deploy-demo.yml  # Demo 环境自动部署
├── docker-compose.yml             # 完整栈(含 MySQL
├── docker-compose.external-db.yml # 外置数据库模式
├── .env.docker.example            # 完整栈环境变量模板
├── .env.external-db.example       # 外置 DB 环境变量模板
├── Dockerfile
├── config.py
├── init_db.py           # 数据库初始化脚本
├── run.py               # 本地开发启动入口
└── requirements.txt

安全设计

安全措施 实现方式
密码存储 Flask-Bcryptbcrypt 自动加盐哈希)
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

  • Linuxapt install aria2 / yum install aria2
  • macOSbrew install aria2
  • Windows:从 aria2 Releases 下载并加入 PATH
Description
No description provided
Readme 215 KiB
Languages
HTML 41.4%
Python 32.3%
Shell 18.8%
CSS 3.7%
JavaScript 2.6%
Other 1.2%