简·相册(Simple Gallery)是一款基于 Flask + SQLite + ffmpeg 构建的轻量级多用户私有相册系统。支持图片/视频上传、在线预览、文件夹分类管理,Docker 一键部署于家庭 NAS,让家庭记忆私有化、安全化。
| 项目 | 要求 |
|---|---|
| 操作系统 | Linux(NAS / VPS / 树莓派),推荐绿联 NAS 等 Docker 兼容设备 |
| Docker | 20.10+ |
| Docker Compose | v2+ |
| 端口 | 5003(可自定义) |
| 存储空间 | 根据实际使用量,建议预留充足空间存放图片和视频 |
mkdir -p /your-path/simple-gallery
cd /your-path/simple-gallery
在项目目录下创建 docker-compose.yml 文件,内容如下:
services:
gallery:
image: your-registry/simple-gallery:latest
container_name: simple-gallery
ports:
- "5003:5003"
volumes:
- ./uploads:/app/uploads
- ./data:/app/data
- ./icon.png:/app/icon.png
environment:
- DEFAULT_PASS=${DEFAULT_PASS:-admin123}
- SECRET_KEY=${SECRET_KEY:-}
restart: always
your-registry/simple-gallery:latest 替换为实际的镜像地址。
在项目目录下放置一个 icon.png(180×180px),用作 PWA 图标。如无特殊需求,可使用任意纯色 PNG。
sudo docker compose up -d
浏览器打开 http://你的NAS-IP:5003,使用默认管理员账号登录:
| 用户名 | admin |
|---|---|
| 密码 | admin123(建议首次登录后修改) |
| 变量名 | 说明 | 默认值 |
|---|---|---|
DEFAULT_PASS | 首次启动时创建 admin 用户的密码 | admin123 |
SECRET_KEY | Flask 会话加密密钥 | 随机生成 |
DEFAULT_PASS,并设置一个固定的 SECRET_KEY 以保证重启后用户会话不丢失。
修改环境变量后,重新启动容器:
sudo docker compose down
sudo docker compose up -d
支持的文件格式:
| 类型 | 格式 |
|---|---|
| 图片 | PNG / JPG / JPEG / GIF / WebP / BMP / HEIC / HEIF |
| 视频 | MP4 / MOV / AVI / MKV / 3GP / WMV / FLV / WebM |
管理员除了具备普通用户的所有功能外,还可通过管理面板进行:
sudo docker compose ps
# 实时查看
sudo docker compose logs -f
# 查看最近 100 条
sudo docker compose logs --tail=100
sudo docker restart simple-gallery
# 停止
sudo docker compose down
# 启动
sudo docker compose up -d
sudo docker compose down
sudo docker compose pull # 拉取最新镜像
sudo docker compose up -d
如忘记管理员密码,可删除数据库文件后重启容器(系统将自动重建并创建默认管理员):
sudo docker compose down
sudo rm -rf ./data/users.db
sudo docker compose up -d
./data 目录。
定期备份以下两个目录即可:
# 打包备份
tar -czf simple-gallery-backup-$(date +%Y%m%d).tar.gz ./data ./uploads
# 先停止容器
sudo docker compose down
# 解压恢复
tar -xzf simple-gallery-backup-20260701.tar.gz
# 重新启动
sudo docker compose up -d
docker exec -it simple-gallery ffmpeg -version 验证。client_max_body_size 参数。在 Nginx 配置中添加以下内容:
location /gallery {
proxy_pass http://127.0.0.1:5003;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
client_max_body_size 500m;
}
docker-compose.yml 中左侧端口号(如 "8080:5003"),然后重启容器。simple-gallery/
├── docker-compose.yml
├── icon.png # PWA 图标
├── uploads/ # 用户上传文件(自动生成)
│ └── 用户名/
│ └── 文件夹名/
│ ├── uuid.mp4
│ └── uuid.mp4.thumb.jpg
├── data/
│ └── users.db # 用户数据库(自动生成)
└── tmp/ # ZIP 临时文件(自动生成)