太久没写文章了,要水两篇
把自己常用的Docker Compose文件做下存档,方便All in Boom炸了还能恢复。

2026/2/28更新

修改了一些Compose内容,全部改用了内建网络做了些区分,增加了环境变量的内容

以前用UnRaid的时候倒是没怎么在意这些,炸了一次后就感觉比较麻烦了。
转用Debian用Docker的时候一次性把要用到的都写了下来。

但是实际上要恢复的话,Docker的持久化数据备份也是必要的,
要是没有持久化数据的话,单用Docker存储卷,我也不知道要怎么保存下来。
以下所有的Docker Compose都做了持久化存储

环境变量

PUID=65534
PGID=65534
UMASK=002
TZ=Asia/Shanghai
请忽略没什么美感的命名

NetWork-Web

services:

  lucky:
    container_name: Net_Lucky  #容器名称
    image: gdy666/lucky:v2     #容器镜像
    network_mode: host         #容器网络模式:主机模式
    restart: always            #重启策略:总是重启
    volumes:
      - ./Lucky_file:/app/conf #配置文件持久化

  sun-panel:
    container_name: Net_SUN-Panel  #容器名称
    image: hslr/sun-panel          #容器镜像
    restart: always                #重启策略:总是重启
    networks:
      - ServiceNet                 #网络:ServiceNet
    ports:
      - 10001:3002                 #端口:10001(外部):3002(容器内部)
    volumes:
      - ./SUN-Panel_file:/app/conf #配置文件持久化

  homebox:
    container_name: Net_HomeBox #容器名称
    image: xgheaven/homebox     #容器镜像
    restart: always             #重启策略:总是重启
    networks:
      - ServiceNet              #网络:ServiceNet
    ports:
      - 10003:3300              #端口:10003(外部):3300(容器内部)

networks:             #网络
  ServiceNet:         #内部网络名称
    external: true    #使用外部已存在的网络
    name: ServiceNet  #外部网络名称

简要的说明:
Lucky:很好用的综合反向代理软件,包含反向代理,端口转发,DDNS,证书续签,还有网络唤醒,功能超级多。
Sun-Panel:一个网页主页/收藏页,可以比较容易的做出简约的主页。
HomeBox:测速软件,可能有用,总是有想知道自己战斗力的时候。


Remote-File

services:

  openlist:
    container_name: Fil_OpenList
    image: openlistteam/openlist:latest-aio
    restart: unless-stopped
    networks:
      - ServiceNet
    ports:
      - 10010:5244
    volumes:
      - ./OpenList_file:/opt/openlist/data
      - /mnt/share:/mnt/data #数据目录

  taosync:
    container_name: Fil_TaoSync
    image: dr34m/tao-sync:latest
    restart: unless-stopped
    networks:
      - ServiceNet
    ports:
      - 10011:8023
    volumes:
      - ./TaoSync_file:/app/data

  filebrowser:
    container_name: Fil_FileBrowser
    image: filebrowser/filebrowser
    restart: unless-stopped
    networks:
      - ServiceNet
    ports:
      - 10020:80
    volumes:
      - ./FileBrowser_file/config:/config
      - ./FileBrowser_file/database:/database
      - /mnt/share:/srv #数据目录

  qbittorrent:
    container_name: Fil_Qbittorrent
    image: lscr.io/linuxserver/qbittorrent
    restart: unless-stopped
    networks:
      - ServiceNet
    ports:
      - 10030:8080
      - 10031:6881/tcp
      - 10031:6881/udp
    volumes:
      - ./Qbittorrent_file:/config
      - /mnt/share/3_影视:/Media    #与ANI-RSS
      - /mnt/share/8_下载:/Download #下载目录

networks:
  ServiceNet:
    external: true
    name: ServiceNet

简要的说明:
OpenList:Alist出现数据危险后的后继者,可以把网盘全部合并在一起显示和使用,很强。
TaoSync:用于Alist/OpenList的同步/备份软件,可以选择OpenList里的源与目的地同步,用于将本地同步至网盘。
FileBrowser:老牌网页文件浏览器,最近停止功能性更新了,但还在维护,主要用于OpenList无法访问时的备份。
Qbittorrent:老牌种子下载器,没什么特别可以说的,就是个种子下载器。


User-Service

services:

  ani-rss:
    container_name: Usr_ANI-RSS
    image: wushuo894/ani-rss
    restart: unless-stopped
    networks:
      - ServiceNet
    ports:
      - 11010:7789
    volumes:
      - ./ANI-RSS_file:/config
      - /mnt/share/3_影视:/Media
    environment:
      - PORT=7789
      - CONFIG=/config

  suwayomi:
    container_name: Usr_Suwayomi
    image: ghcr.io/suwayomi/tachidesk
    restart: unless-stopped
    networks:
      - ServiceNet
    ports:
      - 11020:4567
    volumes:
      - ./Suwayomi_file:/home/suwayomi/.local/share/Tachidesk

  jellyfin:
    container_name: Usr_Jellyfin
    image: nyanmisaka/jellyfin
    restart: unless-stopped
    networks:
      - ServiceNet
    ports:
      - 11030:8096
    volumes:
      - ./Jellyfin_file/config:/config
      - ./Jellyfin_file/cache:/cache
      - ./Jellyfin_file/fonts:/usr/share/fonts
      - /mnt/share/3_影视:/media
    #devices:
      #- /dev/dri:/dev/dri

  immich-server:
    container_name: Usr_Immich_Server
    image: ghcr.io/immich-app/immich-server:release
    restart: unless-stopped
    networks:
      - ImmichNet
    #extends:
      #file: hwaccel.transcoding.yml
      #service: quicksync
    ports:
      - 11040:2283
    volumes:
      - /mnt/share/2_照片/immich:/data
      - /mnt/share/2_照片/外部图库:/import
      - /etc/localtime:/etc/localtime:ro
    environment:
      DB_PASSWORD: 数据库密码
    depends_on:
      - redis
      - database
    healthcheck:
      disable: false

  #immich-machine-learning:
    #container_name: Usr_Immich_Machine_Learning
    #image: ghcr.io/immich-app/immich-machine-learning:release
    #restart: always
    #networks:
      #- ImmichNet
    #extends:
      #file: hwaccel.ml.yml
      #service: openvino
    #volumes:
      #- ./Immich_file/model_cache:/cache
    #healthcheck:
      #disable: false

  redis:
    container_name: Usr_Immich_Redis
    image: docker.io/valkey/valkey:8-bookworm@sha256:fec42f399876eb6faf9e008570597741c87ff7662a54185593e74b09ce83d177
    restart: always
    networks:
      - ImmichNet
    healthcheck:
      test: redis-cli ping || exit 1

  database:
    container_name: Usr_Immich_Postgres
    image: ghcr.io/immich-app/postgres:14-vectorchord0.4.3-pgvectors0.2.0
    restart: always
    networks:
      - ImmichNet
    volumes:
      - ./Immich_file/postgres:/var/lib/postgresql/data
    environment:
      POSTGRES_PASSWORD: 数据库密码
      POSTGRES_USER: postgres
      POSTGRES_DB: immich
      POSTGRES_INITDB_ARGS: '--data-checksums'

  vaultwarden:
    container_name: Usr_VaultWarden
    image: vaultwarden/server:latest
    restart: unless-stopped
    networks:
      - ServiceNet
    ports:
      - 11050:80
    volumes:
      - ./VaultWarden_File:/data
    environment:
      - WEBSOCKET_ENABLED=true
      # - ADMIN_TOKEN=
      - SMTP_HOST=邮件服务器
      - SMTP_FROM=邮件发送人
      - SMTP_PORT=465
      - SMTP_SECURITY=starttls
      - SMTP_USERNAME=邮箱用户名
      - SMTP_PASSWORD=邮箱密码
      - DOMAIN=网站域名
      - SIGNUPS_ALLOWED=false
     
networks:
  ServiceNet:
    external: true
    name: ServiceNet
  ImmichNet:
    external: true
    name: ImmichNet

简要的说明:
ANI-RSS:番剧下载器,可以自动移动到你指定的文件夹,还可以在页面里调用播放器直接看,很爽。
Suwayomi:漫画服务器,需要配合拷贝漫画的拓展使用,相当与网页版的Tachiyomi/Mihon,当时装这个主要是苹果没有好用的漫画软件)
Jellyfin:经典影视服务器,需要自己搞影视的刮削数据,有些小众的很难整理好,暂时不想管了。
Immich-server:照片服务,手机上有APP,可以自动上传保存,相当于私有化的Google相册,还在频繁更新,挺好的。
Redis:Immich的附属服务
Database:Immich的附属服务
Immich-machine-learning:immch的机器学习服务器,但是我的PVE一调用显卡就崩,现在已经换成用游戏机的3070来跑了。
Vaultwarden:私有密码管理器,挺好用,但是和浏览器自动填充还有些细微的问题,Win7的chrome就没法正常用。


#!/bin/sh
set -eu

# 配置变量
MOUNT_POINT="/mnt/share"
COMPOSE_REMOTE="/opt/1panel/docker/compose/remote-file"
COMPOSE_USER="/opt/1panel/docker/compose/user-service"
REMOTE_SERVICES="openlist filebrowser qbittorrent"
USER_SERVICES="ani-rss jellyfin immich-server"

# 日志函数
log() {
  printf '[%s] %s\n' "$(date '+%F %T')" "$*"
}

# 1. 获取 NFS 服务端 IP
log "正在检测 NFS 挂载点 $MOUNT_POINT 的状态..."
SERVER_IP=$(findmnt -n -o SOURCE --target "$MOUNT_POINT" | awk -F: '{print $1}')

if [ -z "$SERVER_IP" ]; then
  log "错误:无法获取 NFS 服务端 IP,挂载点可能未正确挂载或已失效。"
  log "正在停止所有依赖服务..."
  (cd "$COMPOSE_REMOTE" && docker compose stop $REMOTE_SERVICES)
  (cd "$COMPOSE_USER"   && docker compose stop $USER_SERVICES)
  exit 1
fi

log "已获取 NFS 服务端 IP: $SERVER_IP"

# 2. 检查服务端网络可达性
log "正在检测 NFS 服务端 $SERVER_IP 的网络连通性..."
if ! ping -c 1 -W 3 "$SERVER_IP" > /dev/null 2>&1; then
  log "警告:NFS 服务端 $SERVER_IP 网络不可达。"
  log "正在停止所有依赖服务..."
  (cd "$COMPOSE_REMOTE" && docker compose stop $REMOTE_SERVICES)
  (cd "$COMPOSE_USER"   && docker compose stop $USER_SERVICES)
  exit 1
fi

log "NFS 服务端 $SERVER_IP 网络连通性正常。"

# 3. 使用 timeout 限制 mountpoint 的执行,检测挂载状态
log "正在检测挂载点 $MOUNT_POINT 的响应状态..."
if timeout 5s mountpoint -q "$MOUNT_POINT"; then
  log "NFS 挂载点 $MOUNT_POINT 状态正常。"
  exit 0
else
  # timeout 返回非零状态码,可能是超时(124)或 mountpoint 本身返回错误
  if [ $? -eq 124 ]; then
    log "错误:检测挂载点 $MOUNT_POINT 状态超时(5秒),NFS 服务可能无响应。"
  else
    log "错误:挂载点 $MOUNT_POINT 状态异常。"
  fi
  log "正在停止所有依赖服务..."
  (cd "$COMPOSE_REMOTE" && docker compose stop $REMOTE_SERVICES)
  (cd "$COMPOSE_USER"   && docker compose stop $USER_SERVICES)
  exit 1
fi

检测NFS通讯的脚本,检测不到就关闭需要用到共享的Docker,很简单
本意是为了防止NFS挂载的硬连接在存储服务器异常下线的情况下,依旧保持连接导致阻塞,然后炸掉服务器之类的