# MeBox 最简单 Docker Compose 部署文件 # # 新手建议: # 1. 不用 .env。 # 2. 直接改本文件。 # 3. 第一次可以不改路径,先用当前目录下的 ./media 和 ./downloads 体验。 # # 启动: # docker compose up -d # # 访问: # http://服务器IP:18080 # # 默认账号: # admin / admin123 services: mebox: image: ghcr.io/truewhile/mebox:latest restart: unless-stopped init: true depends_on: postgres: condition: service_healthy # 浏览器访问端口。 # 如果 18080 被占用,可以改成 "19011:8080" 之类。 ports: - "18080:8080" # 让容器可以访问宿主机上的服务(如下载器)。 # qB 地址通常可填:http://host.docker.internal:8085 extra_hosts: - "host.docker.internal:host-gateway" volumes: # 程序运行数据:JWT 密钥、运行配置、旧 SQLite 迁移源。 # 主数据库在 ./postgres,升级/备份时 ./data 和 ./postgres 都要保留。 - ./data:/data # 缓存目录:海报缓存、临时文件等。通常不用备份。 - ./cache:/cache # 媒体库目录。 # 如果要使用自动整理/重命名/入库,这里必须保持读写,不能加 :ro。 # 只有完全不整理、只扫描/播放已有媒体时,才建议手动改成只读。 # 新手可先创建当前目录的 ./media 并把影片放进去。 # NAS 用户把左边改成真实路径,例如: # source: /vol1/1000/Media # Windows Docker Desktop 示例: # source: D:/Media # create_host_path=false 可以避免路径写错时 Docker 自动创建空文件夹。 - type: bind source: ./media target: /media bind: create_host_path: false # 下载目录。 # qB 下载目录、手动整理、自动整理会经常用到。 # NAS 示例: # source: /vol1/1000/Downloads # Windows Docker Desktop 示例: # source: D:/Downloads - type: bind source: ./downloads target: /downloads bind: create_host_path: false # 管理面板「系统更新」需要访问 Docker 引擎。 # 需要一键更新 Docker 镜像时取消下一行注释;如果提示权限不足, # 请确认 PUID/PGID 对 /var/run/docker.sock 有读写权限。 # - /var/run/docker.sock:/var/run/docker.sock environment: TZ: Asia/Shanghai # Linux/NAS 用户权限。一般 1000 就可以。 # 如果写入文件权限不对,再改成宿主机实际用户的 uid/gid。 PUID: "1000" PGID: "1000" # 程序基础配置,通常不用改。 MEBOX_APP_HOST: 0.0.0.0 MEBOX_APP_PORT: 8080 MEBOX_APP_WEB_DIR: /app/web/dist MEBOX_APP_DATA_DIR: /data # 详细应用日志会保存在 ./data/logs/app.log,warn/error 也会拆分保存。 # 排查复杂问题时可临时改成 debug。 MEBOX_LOGGING_LEVEL: info MEBOX_LOGGING_FORMAT: console MEBOX_LOGGING_OUTPUT_PATH: /data/logs MEBOX_LOGGING_MAX_SIZE_MB: "20" MEBOX_LOGGING_MAX_BACKUPS: "5" MEBOX_LOGGING_MAX_AGE_DAYS: "30" # 轻量模式默认只使用 PostgreSQL,适合大多数 NAS。 # 旧版 ./data/mmtl.db 或 ./data/mebox.db 存在时,首次启动会自动迁移到 PostgreSQL。 MEBOX_DATABASE_TYPE: postgres MEBOX_DATABASE_DSN: postgres://mebox:mebox@postgres:5432/mebox?sslmode=disable # SQLite 旧库迁移源: # - 首次从旧版 SQLite(mmtl.db / mebox.db)导入时保持此路径。 # - 确认迁移完成后,建议改成 /data/no-sqlite-migration.db 这类不存在的路径。 MEBOX_DATABASE_DB_PATH: /data/mebox.db MEBOX_CACHE_CACHE_DIR: /cache # 管理面板热更新默认拉取此镜像,并用 Watchtower 一次性重建当前容器。 MEBOX_UPDATE_IMAGE: ghcr.io/truewhile/mebox:latest # 路径换算配置。 # 默认推荐在网页里使用容器路径 /media。 # 如果旧媒体库已经保存了宿主机路径 /vol1/1000/Media, # 再把这里改成同一个宿主机真实路径用于旧路径换算。 MEBOX_MEDIA_DIR: /media MEBOX_MEDIA_CONTAINER_DIR: /media # 默认推荐下载器保存路径使用 /downloads。 # 如果下载器只能返回宿主机路径,再改成同一个宿主机真实路径。 MEBOX_DOWNLOAD_DIR: /downloads MEBOX_DOWNLOAD_CONTAINER_DIR: /downloads # NAS 友好的低负载默认值。 MEBOX_TRANSCODER_ENABLED: "true" MEBOX_TRANSCODER_HARDWARE_ACCEL: "false" MEBOX_TRANSCODER_REALTIME: "true" MEBOX_TRANSCODER_THREADS: "2" MEBOX_TRANSCODER_MAX_CONCURRENT: "1" MEBOX_TRANSCODER_IDLE_TIMEOUT_SECONDS: "120" healthcheck: test: ["CMD-SHELL", "busybox wget -qO- http://127.0.0.1:8080/api/health || exit 1"] interval: 30s timeout: 10s retries: 5 start_period: 30s # 限制 Docker 日志大小,避免长期运行把磁盘写满。 logging: driver: json-file options: max-size: "20m" max-file: "3" postgres: image: postgres:16-alpine # 首次部署允许拉取;日常更新请只 pull mebox。 # 如需升级 PostgreSQL,请先备份 ./postgres 后再手动调整镜像版本并拉取。 pull_policy: missing restart: unless-stopped environment: POSTGRES_DB: mebox POSTGRES_USER: mebox POSTGRES_PASSWORD: mebox TZ: Asia/Shanghai volumes: # PostgreSQL 主数据目录。升级/重建容器时必须保留。 - ./postgres:/var/lib/postgresql/data healthcheck: test: ["CMD-SHELL", "pg_isready -h 127.0.0.1 -U mebox -d mebox"] interval: 10s timeout: 5s retries: 10 logging: driver: json-file options: max-size: "20m" max-file: "3"