# MeBox 第三档完整 Docker Compose 部署文件 # # 组件: # MeBox + PostgreSQL + Redis + OpenSearch # # 使用方式二选一: # 1. 保存为 docker-compose.yml 后执行: # docker compose up -d # 2. 保留本文件名时执行: # docker compose -f docker-compose.search.yml up -d # # 适合: # 超大媒体库、复杂全文搜索、后续需要独立搜索索引的部署。 # # 注意: # OpenSearch 常驻内存明显高于 Redis/PostgreSQL。低配 NAS 不建议开启。 # # 默认账号: # admin / admin123 services: mebox: image: ghcr.io/truewhile/mebox:latest restart: unless-stopped init: true depends_on: postgres: condition: service_healthy redis: condition: service_healthy opensearch: condition: service_healthy ports: - "18080:8080" extra_hosts: - "host.docker.internal:host-gateway" volumes: # 程序运行数据:JWT 密钥、运行配置、旧 SQLite 迁移源。 - ./data:/data # 缓存目录:海报缓存、临时文件等。通常不用备份。 - ./cache:/cache # 媒体库目录。自动整理/重命名/入库需要读写权限。 # 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 # 下载目录。需要和下载器保存路径保持一致。 # NAS 示例:source: /vol1/1000/Downloads # Windows Docker Desktop 示例:source: D:/Downloads - type: bind source: ./downloads target: /downloads bind: create_host_path: false # 管理面板「系统更新」需要访问 Docker 引擎。 # 需要一键更新 Docker 镜像时取消下一行注释。 # - /var/run/docker.sock:/var/run/docker.sock environment: TZ: Asia/Shanghai 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 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" MEBOX_DATABASE_TYPE: postgres MEBOX_DATABASE_DSN: postgres://mebox:mebox@postgres:5432/mebox?sslmode=disable MEBOX_DATABASE_DB_PATH: /data/mebox.db MEBOX_CACHE_REDIS_URL: redis://redis:6379/0 MEBOX_CACHE_CACHE_DIR: /cache # OpenSearch 只做搜索索引,主数据仍以 PostgreSQL 为准。 MEBOX_SEARCH_BACKEND: opensearch MEBOX_SEARCH_OPENSEARCH_URL: http://opensearch:9200 MEBOX_SEARCH_INDEX: mebox_media MEBOX_UPDATE_IMAGE: ghcr.io/truewhile/mebox:latest # 默认推荐在网页里使用容器路径 /media。 # 如果旧媒体库已经保存了宿主机路径 /vol1/1000/Media, # 再把这里改成同一个宿主机真实路径用于旧路径换算。 MEBOX_MEDIA_DIR: /media MEBOX_MEDIA_CONTAINER_DIR: /media MEBOX_DOWNLOAD_DIR: /downloads MEBOX_DOWNLOAD_CONTAINER_DIR: /downloads 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 logging: driver: json-file options: max-size: "20m" max-file: "3" postgres: image: postgres:16-alpine # 首次部署允许拉取;日常更新请只 pull mebox。 pull_policy: missing restart: unless-stopped environment: POSTGRES_DB: mebox POSTGRES_USER: mebox POSTGRES_PASSWORD: mebox TZ: Asia/Shanghai volumes: - ./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" redis: image: redis:7-alpine pull_policy: missing restart: unless-stopped command: - redis-server - --appendonly - "yes" - --maxmemory - 256mb - --maxmemory-policy - allkeys-lru volumes: - ./redis:/data healthcheck: test: ["CMD", "redis-cli", "ping"] interval: 10s timeout: 5s retries: 10 logging: driver: json-file options: max-size: "20m" max-file: "3" opensearch: image: opensearchproject/opensearch:2 pull_policy: missing restart: unless-stopped environment: discovery.type: single-node plugins.security.disabled: "true" OPENSEARCH_JAVA_OPTS: "-Xms512m -Xmx512m" DISABLE_INSTALL_DEMO_CONFIG: "true" bootstrap.memory_lock: "false" volumes: - ./opensearch:/usr/share/opensearch/data healthcheck: test: ["CMD-SHELL", "curl -fsS http://127.0.0.1:9200 >/dev/null || exit 1"] interval: 20s timeout: 10s retries: 15 start_period: 60s logging: driver: json-file options: max-size: "20m" max-file: "3"