mirror of
https://github.com/truewhile/MeBox.git
synced 2026-09-29 03:26:37 +08:00
201 lines
5.5 KiB
YAML
201 lines
5.5 KiB
YAML
# 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: "50"
|
||
MEBOX_LOGGING_MAX_BACKUPS: "20"
|
||
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: "50m"
|
||
max-file: "10"
|
||
|
||
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: "50m"
|
||
max-file: "10"
|
||
|
||
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: "50m"
|
||
max-file: "10"
|
||
|
||
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: "50m"
|
||
max-file: "10"
|