Sign inSign up

mobufan/fan-shop

By mobufan

•Updated 12 days ago

Docker的容器管理平台,一键部署撰写文件、管理、备份恢复、仓库管理等。

Image
0

1.4K

mobufan/fan-shop repository overview

⁠Fan Shop (非凡商店)

一个基于 Docker 的容器管理平台,支持一键部署 Compose 文件、容器管理、备份恢复、仓库管理等实用功能。

⁠功能特性

  • 📦 容器管理 - 实时查看容器状态,支持启动/停止/重启/删除容器,查看容器日志;配置全局域名/IP后,容器名称可点击跳转至访问地址
  • 🚀 一键部署 - 通过 Docker Compose 快速部署应用,支持实时日志输出、时间戳与镜像拉取进度条;慢网环境下使用空闲超时避免部署中断;同时兼容 Docker Compose v1 与 v2
  • 🤖 AI 对话 - 独立页面对接 OpenAI 兼容接口,支持连续聊天、完整上下文和完整回复,聊天记录自动保存并可切换历史对话,可复制单条消息及代码;不会执行命令、修改文件或部署
  • 📚 仓库管理 - 支持 Compose 与 Scripts 两种 Git 仓库:Compose 扫描 YML 用于部署,Scripts 扫描 .sh 并持久化保存;支持确认后删除仓库记录,保留本地文件和已部署容器
  • 💾 备份恢复 - 容器完整备份(镜像+配置+数据卷),支持一键恢复和文件上传恢复;备份文件时间戳使用 UTC+8 时区
  • 🖼️ 镜像管理 - 查看、拉取、删除本地镜像,支持导入 Docker .tar 镜像包和导出单个镜像,检测 Docker Hub 最新版本
  • 📊 仪表盘 - 实时统计容器数量、备份状态等关键数据;展示宿主机系统信息(CPU、内存、磁盘、系统版本、网络);展示 Docker/Docker Compose 版本信息;测试 GitHub 和 Docker Hub 连接性
  • 🔐 用户管理 - 支持多用户注册登录、bcrypt 密码存储、可撤销会话与登录失败限流
  • 📝 操作日志 - 完整记录系统操作日志,支持按类型筛选查看
  • ⚙️ 系统设置 - 代理配置、全局域名/IP配置、Docker加速源等系统参数管理
  • 💡 容器推荐 - 推荐热门容器应用,一键部署,配套教程链接
  • 💻 终端访问 - 内置 Web 终端,支持连接宿主主机 Linux 终端

⁠系统要求

  • Docker 20.10+
  • Docker Compose 2.0+
  • 浏览器(Chrome、Firefox、Edge 等现代浏览器)

⁠快速开始

⁠方式一:飞牛 fnOS FPK 安装(推荐一)

适用于飞牛 fnOS,安装和运行由应用中心管理:

  1. 从 GitHub Releases 下载 fan-shop-2.1.4.fpk。
  2. 打开飞牛 fnOS 的「应用中心」,选择「手动安装」。
  3. 选择下载的 .fpk 文件并按向导完成安装。
  4. 在安装向导中设置访问端口,以及数据、仓库、脚本、备份、日志和镜像目录。
  5. 安装完成后,从飞牛 fnOS 桌面或应用中心打开「非凡商店」,应用会在浏览器中访问配置的端口。

卸载时可以选择保留数据,或删除安装时配置的全部自定义目录。建议升级或重装前先保留重要数据备份。

⁠方式二:一键部署脚本(推荐二)

复制命令即可一键部署

if [ -f /usr/bin/curl ]; then curl -sSO https://raw.githubusercontent.com/meimolihan/fan-shop/main/Scripts/install.sh; else wget -O install.sh https://raw.githubusercontent.com/meimolihan/fan-shop/main/Scripts/install.sh; fi && bash install.sh && rm -f install.sh
⁠方式三:Compose 部署
# 1. 克隆项目
git clone https://github.com/meimolihan/fan-shop.git
cd fan-shop

# 2. 启动服务(从 Docker Hub 拉取镜像)
docker compose up -d

# 3. 访问应用
# 打开浏览器访问:http://localhost:8000
⁠方式四:Docker Run 部署
# 创建必要目录
mkdir -p ./backend/data ./backend/repos ./backend/scripts ./backend/backup ./backend/logs ./backend/image

# 启动容器
docker run -d \
  --name fan-shop \
  -p 8000:8001 \
  -v ./backend/data:/app/data \
  -v ./backend/repos:/app/repos \
  -v ./backend/scripts:/app/scripts \
  -v ./backend/backup:/app/backup \
  -v ./backend/logs:/app/logs \
  -v ./backend/image:/app/image \
  -v /var/run/docker.sock:/var/run/docker.sock \
  -v /:/host:rw \
  -v /etc/docker:/etc/docker:rw \
  -v /etc/passwd:/etc/passwd:ro \
  -v /etc/group:/etc/group:ro \
  -e PYTHONUNBUFFERED=1 \
  --privileged \
  --restart unless-stopped \
  mobufan/fan-shop:v2.1.4

# 访问应用
# 打开浏览器访问:http://localhost:8000
⁠卷映射说明

目录映射用于在宿主机持久化应用数据。即使不映射这些目录,应用也可以启动;但容器被删除或重建后,未映射目录中的数据会丢失。

宿主机映射容器目录用途不映射的影响
./backend/data/app/data用户、登录会话、AI 聊天记录、系统设置、数据库及仓库 Git 缓存所有应用数据会随容器重建丢失
./backend/repos/app/repos已同步 Compose 仓库文件,以及在容器部署页创建的 repos/local 自定义 YML部署文件会丢失
./backend/scripts/app/scripts更新与 Compose 升级脚本,以及 Scripts 仓库同步的 .sh 脚本宿主机无法直接使用生成或同步的脚本
./backend/backup/app/backup容器备份文件备份文件会丢失
./backend/logs/app/logs操作日志实体文件日志文件会丢失
./backend/image/app/image导入及导出的 Docker .tar 镜像包镜像包会丢失
⁠特殊映射

以下是 Docker 管理和宿主机功能所需的特殊映射:

映射用途可否省略
/var/run/docker.sock:/var/run/docker.sock管理宿主机 Docker 容器、镜像与网络不可省略;省略后 Docker 管理功能不可用
/:/host:rw、/etc/docker:/etc/docker:rw获取宿主机信息、更新 Docker 配置及重启 Docker可省略,但宿主机操作和 Docker 加速源功能受限
/etc/passwd:/etc/passwd:ro、/etc/group:/etc/group:ro识别宿主机用户与组权限可省略,但终端与权限识别可能受限
⁠默认账号
  • 默认管理员账号:admin
  • 初始管理员密码:运行日志查看
  • 首次登录必须修改管理员密码

⁠仓库管理指南

⁠仓库目录与数据流

所有仓库的内容都存放在 meimolihan/fan-shop 仓库顶层目录,与程序代码同仓,标签同步发布。应用在「仓库管理」页点「同步」时,会从 GitHub 拉取对应目录,导出到运行时目录:

仓库源目录(fan-shop 顶层)local_path运行时导出(容器 /app ↔ 宿主 backend)自动镜像宿主机
飞牛容器仓库fnOS/fnOS/app/repos/fnOS ↔ backend/repos/fnOS/vol1/1000/Docker/<应用>/docker-compose.yml
绿联新系统容器仓库UgreenNew/UgreenNew/app/repos/UgreenNew ↔ backend/repos/UgreenNew无
绿联旧系统容器仓库Ugreen(Abandoned)/Ugreen(Abandoned)/app/repos/Ugreen(Abandoned) ↔ backend/repos/Ugreen(Abandoned)无
极空间容器仓库ZSpace/ZSpace/app/repos/ZSpace ↔ backend/repos/ZSpace无
脚本仓库Scripts/(.sh)Scripts/app/scripts ↔ backend/scripts无

说明:源码目录一律使用扁平 <应用名>.yml;同步导出时会自动重构为 <应用>/docker-compose.yml 子目录供部署使用。因此源代码是扁平的、运行时目录是嵌套的,属正常现象。

⁠添加 Compose 文件(飞牛 / 绿联新 / 绿联旧 / 极空间)
  1. 在对应顶层目录下添加扁平 <应用名>.yml(一个应用一个文件,不要建子目录),YAML 为标准 Docker Compose 格式;
  2. 提交并推送到 meimolihan/fan-shop 的 main 分支;
  3. 在「仓库管理」页点该仓库的「同步」,导出后自动重构为 <应用>/docker-compose.yml 并出现在部署页;
  4. 飞牛仓库同步后还会自动镜像到宿主机 /vol1/1000/Docker/<应用>/docker-compose.yml。若该目录被删除,UI 会显示「未同步」,再次同步会自动重建目录并镜像。
# 在本仓库检出目录下操作
cd fan-shop

cat > fnOS/dufs-zh.yml <<'EOF'
services:
  dufs-zh:
    image: mobufan/dufs-zh:latest
    container_name: dufs-zh
    restart: always
    ports:
      - "5000:5000"
    volumes:
      - /vol2/1000/file:/data
EOF

git add fnOS/dufs-zh.yml
git commit -m "feat: 新增 dufs-zh 应用模板"
git push origin main
⁠添加脚本(脚本仓库)
  1. 在 Scripts/ 顶层添加 <名称>.sh(UTF-8 编码,首行 #!/bin/bash,建议 chmod +x);
  2. 提交推送到 main 分支;
  3. 在「仓库管理」页点「同步」,脚本即导出到 /app/scripts(宿主 backend/scripts/)。
⁠脚本仓库的具体使用方法

同步:「仓库管理」→「脚本仓库」→「同步」。成功后可在仓库页浏览/查看脚本内容。

脚本存放位置(同步后两者是同一目录):

  • 容器内:/app/scripts
  • 宿主机:/vol1/1000/compose/fan-shop/backend/scripts/

执行方法(UI 只提供浏览,不提供执行入口;需在 fnOS 宿主机终端执行):

sudo -i
bash /vol1/1000/compose/fan-shop/backend/scripts/dc_inst_halo.sh      # 一键安装 Halo
bash /vol1/1000/compose/fan-shop/backend/scripts/docker_ps_list.sh    # 查看 Docker 容器列表
bash /vol1/1000/compose/fan-shop/backend/scripts/compose_up_all.sh    # 批量启动全部 Compose 项目

脚本分类速查:

前缀用途
dc_inst_*.sh一键安装常见应用(halo、emby、xunlei、fan-shop、uptime-kuma 等)
docker_*.shDocker 管理:容器/镜像/卷/网络/端口/登录/安装卸载
compose_*.shCompose 批处理:全部 up / update / down / purge / 备份恢复
fnos_disk_* / smb_* / nginx* / fail2ban*fnOS 磁盘挂载、SMB、Nginx、防火墙、系统工具
git_*.shGit 项目批量操作(clone / pull / push / tag 等)
pve_*.shProxmox VE 相关(虚拟机/LXC/网络/存储)
lx_*.shLinux 系统信息与运维辅助(磁盘、核数、网络、用户、定时任务等)
install.sh一键部署 fan-shop 自身(Scripts/install.sh)

应用自动生成的脚本(无需通过仓库添加,由应用在更新/升级时生成到 /app/scripts):

  • update_app.sh:检测到新版本时生成,用于一键升级 fan-shop 应用本身
  • upgrade_docker_compose_to_v2.sh:用于将 Docker Compose v1 迁移到 v2

安全提示:脚本以 root 权限在宿主机执行,请先查看内容、只运行来源可信的脚本。

⁠常见问题
  • 添加文件后重新构建镜像/重启,UI 数量没变? 重启不会重新导出内容,必须在该仓库页点「同步」,它才会从 GitHub 重新拉取、导出、重构并镜像。
  • 为什么源码是扁平文件、运行目录是子目录? 这是导出的自动重构行为:源码统一 <应用名>.yml,导出后变成 <应用>/docker-compose.yml,两者配套。
  • 飞牛仓库 UI 显示「未同步」,但文件都在? 说明宿主机 /vol1/1000/Docker 目录缺失(被手动删除或系统清理);点一次「同步」即可自动重建并镜像。

⁠项目结构

fan-shop/
├── Dockerfile              # Docker 镜像构建文件
├── docker-compose.yml      # Docker Compose 运行配置(直接拉取发布镜像)
├── backend/
│   ├── app/
│   │   ├── main.py        # FastAPI 应用入口
│   │   ├── routes.py      # API 路由
│   │   ├── services.py    # 业务逻辑
│   │   ├── database.py    # 数据库操作
│   │   ├── version.py     # 版本信息
│   │   ├── logger.py      # 日志服务
│   │   ├── schemas.py     # 数据模型
│   │   └── terminal.py    # 终端服务
│   ├── data/              # 运行时数据与用户配置
│   ├── repos.json         # 内置仓库初始化配置
│   ├── recommend.json     # 内置推荐容器初始化配置
│   └── requirements.txt   # Python 依赖
└── frontend/
    └── src/
        ├── images/        # 图片资源
        ├── components/    # 公共组件
        │   ├── sidebar/   # 侧边栏组件
        │   └── common/    # 页面认证、请求与用户信息公共逻辑
        └── pages/         # 页面组件
            ├── login/     # 登录页面
            ├── register/  # 注册页面
            ├── forgot/    # 找回密码
            ├── dashboard/ # 仪表盘
            ├── container/ # 容器管理
            ├── image/     # 镜像管理
            ├── deploy/    # 应用部署
            ├── backup/    # 备份恢复
            ├── logs/      # 操作日志
            ├── terminal/  # 终端管理
            ├── settings/  # 系统设置
            ├── recommend/ # 推荐应用
            └── repository/# 仓库管理

⁠技术栈

  • 后端: FastAPI + SQLite + Docker SDK
  • 前端: 原生 HTML/CSS/JavaScript
  • 容器: Docker + Docker Compose

⁠版本信息

版本日期更新内容
v2.1.42026-09-01修复多服务 Compose 在简易模式下端口字段使用相同序号而相互覆盖的问题,端口参数改为按“服务名称 + 端口序号”独立绑定,同一文件中的多个服务和多个端口可分别显示、修改与保存。
v2.1.32026-09-01新增“本地仓库”,Compose 文件持久化到 repos/local,支持新建、重命名、编辑和直接部署;修复连续创建文件后列表丢失、仓库选择状态及部署卡片显示问题;新增独立的 OpenAI 兼容接口配置与 AI 对话页面,支持完整上下文、全量回复、思考过程折叠、代码块复制、聊天记录持久化和历史对话切换;新增全局悬浮 AI 对话窗口,并统一桌面端、侧边栏和仪表盘入口;从系统设置中拆分独立用户管理页面,管理员可创建用户、修改自身或普通用户的用户名和密码、删除普通用户;支持头像上传及默认公共头像,新增最后登录时间记录;仓库管理支持删除仓库记录;系统设置配置卡片支持默认收起和按需展开;修复 IPv4/IPv6 导致端口映射重复的问题,支持多端口展示;配置全局域名或 IP 后,为每个 TCP 映射生成独立访问入口。
v2.1.22026-08-30初始 admin 账号首次登录强制修改密码,改密前限制业务 API、终端及注册与密码重置授权;改密后撤销全部旧会话并要求重新登录;兼容旧版账号迁移,已有 admin 管理员升级后需更新一次密码;管理员密码校验实时读取数据库,避免旧密码缓存继续生效;修复忘记密码页面误报成功。
v2.1.12026-08-29新增局域网 Apprise API 通知:支持 /notify 与完整通知端点、测试通知,并可选择部署、仓库、镜像、备份和 Docker 重启通知;仓库与推荐容器仅以 JSON 为唯一初始化来源,移除旧数据库及初始化入口;首次启动自动将镜像内置 JSON 写入空的运行时数据目录;仓库同步时间改为记录并持久化真实 UTC+8 完成时间,重启后仍可正确显示;统一认证页面 API 配置。
v2.1.02026-08-28仓库管理支持 Compose 与 Scripts 两种仓库类型;Compose 仓库仅将所选 local_path 导出到 repos 映射目录,Scripts 仓库仅将选中的 .sh 脚本导出到 scripts 映射目录,Git 缓存保存在 data 中;Scripts 不会出现在容器部署来源中。
v2.0.92026-08-27检查更新后自动反推 scripts 挂载对应的宿主机绝对路径;提示用户先执行 sudo -i,再提供唯一的一行更新命令;修复更新脚本生成接口未返回脚本路径的问题;镜像管理新增 Docker .tar 包导入与镜像导出。
v2.0.82026-08-27完成会话鉴权、bcrypt 密码迁移、管理员 API 与 WebSocket 权限校验;统一数据库事务与前端公共认证/请求逻辑;部署页改用 YAML 解析器并拆分部署流和网络模块;Docker 加速源增加重启恢复检测与回滚;新增 Ruff、ESLint、CI 和回归测试;新增前端缓存清理;修复登录 422、管理员添加用户、仪表盘快捷跳转、部署页仓库筛选/加载、Compose 文件宿主机映射路径解析及普通用户仪表盘权限显示问题。
v2.0.72026-08-22Docker 加速源保存后支持自动重启宿主机 Docker 服务;修复部署页高级模式无法保存和部署的问题;修复卷挂载路径包含连字符时显示被截断的问题;
v2.0.62026-08-20仪表盘逻辑及UI优化;Docker Compose 自动生成脚本,并提供运行指令;容器部署页面新增「网络管理」;Compose 部署新增 name: doublestack-shop 统一 Compose 项目名;容器日志获取修复并支持倒序显示;
v2.0.52026-08-20仓库策略更新;仓库管理新增「未同步」状态与筛选;修复仓库UI问题;设置页面新增 GitHub 项目地址;
v2.0.42026-08-19容器部署日志改为实时推送,新增时间戳与进度条;部署超时改为空闲超时,解决慢网环境下误判失败;
v2.0.32026-07-06优化代理配置逻辑;优化默认仓库初始化,服务启动不再阻塞;优化仓库拉取可靠性;优化UI界面;
v2.0.22026-06-28修复备份文件时间戳时区问题(统一使用UTC+8);新增默认仓库配置(飞牛容器仓库、绿联新系统容器仓库、绿联旧系统容器仓库、极空间容器仓库);修复多仓库文件列表重复问题;新增全局域名/IP配置功能(设置界面配置,容器名称可点击跳转);新增仪表盘宿主机系统信息展示(CPU使用率、内存使用、磁盘空间、系统版本、网络信息);新增仪表盘 Docker 环境信息展示(Docker/Docker Compose 版本);修复多个界面样式和API错误问题;
v2.0.12026-06-28新增 Docker 容器备份功能:修复容器备份恢复功能:修复数据卷打包路径映射问题;修复恢复时数据卷写入失败问题;备份前自动停止容器确保数据一致性;恢复前清空旧数据确保纯净恢复;
v2.0.02026-06-27新增 Docker 加速源管理功能(支持增删改查、拖拽排序);统一操作日志类别中文显示;优化设置页面功能;
v1.0 版本历史更新内容
版本日期更新内容
v1.0.192026-06-07修复数据库问题;修复项目时区问题;新增更多日志记录
v1.0.182026-06-07新增操作日志详情功能:部署成功日志支持查看详情,展示完整的镜像拉取、容器启动等详细日志;优化部署日志记录,修复日志类型错误;修复日志显示顺序问题
v1.0.172026-06-07修复UI一致性问题:优化区域布局;修复容器详情运行时间、端口映射和创建时间显示问题;修复运行中容器无法打开详情弹窗的问题
v1.0.162026-05-12新增容器推荐页面:展示常用容器模板,支持一键跳转到部署页面和查看使用教程
v1.0.152026-05-12修复 f-string 中 awk $1 $2 变量转义问题,解决脚本语法错误
v1.0.142026-05-12修复更新脚本端口解析逻辑,使用 awk/sed 替代 cut 避免分隔符错误;修复旧镜像清理使用正确的 IMAGE_NAME 变量
v1.0.132026-05-12新增容器代理配置功能:支持配置 HTTP/HTTPS 代理,部署容器时自动应用代理环境变量
v1.0.122026-05-12新增仪表盘连接性模块:测试 GitHub 和 Docker Hub 的网络连通性,显示连接状态和延迟时间
v1.0.112026-05-11新增镜像管理功能:支持删除本地镜像、支持从DockerHub搜索并拉取镜像、支持通过镜像名直接拉取;优化侧边栏菜单顺序
v1.0.102026-05-11新增自动更新脚本功能:检测到新版本时自动生成更新脚本;更新脚本支持通过Docker Hub拉取最新镜像;自动获取当前容器配置(网络、端口、挂载目录);支持删除旧容器和清理旧镜像
v1.0.92026-05-11新增终端功能:支持连接宿主主机Linux终端;修复密码生成规则;统一所有页面侧边栏组件;修复终端页面布局一致性问题;修复终端横向滚动问题
v1.0.82026-05-11修复注册页面API路径问题,统一登录/注册/忘记密码页面样式
v1.0.72026-05-09问题修复及UI优化
v1.0.02026-05-09初始版本

⁠许可证

MIT License

⁠联系方式

Tag summary

Content type

Image

Digest

sha256:8d7b4185b…

Size

249.5 MB

Last updated

12 days ago

docker pull mobufan/fan-shop