# MediaStationGo 默认 Docker Compose 部署文件。 # # 快速开始: # 1. 按需修改下方 volumes 的宿主机路径。 # 2. docker compose pull # 3. docker compose up -d # 4. 浏览器打开 http://<服务器IP>:18080 # # 推荐更新命令(会清理本项目旧镜像,避免 NAS 磁盘堆满): # curl -fsSL https://cdn.jsdelivr.net/gh/ShukeBta/MediaStationGo@main/scripts/docker-compose-update.sh -o docker-compose-update.sh # chmod +x docker-compose-update.sh # ./docker-compose-update.sh # # 默认账号: # admin / admin123 # 首次部署后请立即到「个人资料/用户管理」修改密码。 # # 镜像版本: # 默认拉取 latest;如需固定版本,创建 .env 并写入: # MEDIASTATION_IMAGE_TAG=MediaStationGo-v0.0.30 # # 路径映射总览: # /data 程序数据目录。保存 SQLite 数据库、JWT secret、系统配置等,必须持久化。 # /cache 缓存目录。保存海报、刮削图片、转码缓存等,建议放在空间较大的磁盘。 # /media 媒体库只读挂载目录。网页中添加媒体库时填写容器内路径,例如 /media/Movies。 # /downloads 下载目录。下载器保存路径建议填写容器内路径,例如 /downloads/Movies。 # # NAS / 飞牛推荐直读模式: # 如果你希望网页里直接填写 NAS 原始路径,例如 # /vol1/1000/Docker/moviepilot-v2/media/电视剧/国产剧, # 请在 .env 中把宿主机路径和容器路径设置成完全相同: # # MEDIASTATION_MEDIA_DIR=/vol1/1000/Docker/moviepilot-v2/media # MEDIASTATION_MEDIA_CONTAINER_DIR=/vol1/1000/Docker/moviepilot-v2/media # MEDIASTATION_DOWNLOAD_DIR=/vol1/1000/qBittorrent/downloads # MEDIASTATION_DOWNLOAD_CONTAINER_DIR=/vol1/1000/qBittorrent/downloads # # 这只是 Docker bind mount,不会复制文件,不会占用双倍空间。 # # 本地测试模式: # MEDIASTATION_DATA_DIR=./data # MEDIASTATION_CACHE_DIR=./cache # MEDIASTATION_MEDIA_DIR=./media # MEDIASTATION_DOWNLOAD_DIR=./downloads # # NAS / 飞牛路径必须使用绝对路径,例如: # MEDIASTATION_MEDIA_DIR=/vol1/1000/Docker/moviepilot-v2/media # MEDIASTATION_DOWNLOAD_DIR=/vol1/1000/qBittorrent/downloads # 不要写成 ./vol1/...;./vol1 会被 Docker Compose 解析为当前部署目录下的相对路径。 # # 注意: # 1. 如果 qBittorrent/Transmission/Aria2 不在本 compose 内,请确保它们能访问同一份 # 下载目录;容器内保存路径和下载器实际保存路径需要保持一致或可被媒体库扫描到。 # 2. 媒体库默认以只读方式挂载,避免误删原始媒体;如果需要整理/移动文件,可将 # /media 的 :ro 改为 :rw,或把整理目标放到 /downloads 后再手动迁移。 # 3. PUID/PGID 用于匹配 NAS/Linux 宿主机用户权限,避免下载或缓存文件权限异常。 services: mediastation-go: image: ghcr.io/shukebta/mediastation-go:${MEDIASTATION_IMAGE_TAG:-latest} # 默认只在本地没有镜像时拉取,避免每次重启都访问 GHCR。 # 需要升级时建议执行 ./docker-compose-update.sh,更新后会清理本项目旧镜像。 pull_policy: missing container_name: mediastation-go restart: unless-stopped ports: # 宿主机端口:容器端口。默认访问 http://<服务器IP>:18080 - "${MEDIASTATION_HTTP_PORT:-18080}:8080" extra_hosts: # Linux / NAS Docker 中访问宿主机服务的固定别名。 # qBittorrent 如果运行在 NAS 宿主机上,下载器地址建议填: # http://host.docker.internal:8085 - "host.docker.internal:host-gateway" volumes: # 程序持久化数据:数据库、JWT secret、运行时配置。 - ${MEDIASTATION_DATA_DIR:-./data}:/data # 海报/背景图/转码缓存。可删除重建,但会重新下载图片和生成缓存。 - ${MEDIASTATION_CACHE_DIR:-./cache}:/cache # 媒体库根目录。 # 默认:宿主机目录映射到容器 /media,添加媒体库时填写 /media/电影、/media/电视剧。 # NAS 直读:把 MEDIASTATION_MEDIA_CONTAINER_DIR 设置成与 MEDIASTATION_MEDIA_DIR 相同, # 添加媒体库时即可直接填写 /vol1/.../media/电影、/vol1/.../media/电视剧。 # 如宿主机目录不同,请在 .env 中设置 MEDIASTATION_MEDIA_DIR。 # NAS / 飞牛等系统请写绝对路径,例如: # MEDIASTATION_MEDIA_DIR=/vol1/1000/Docker/moviepilot-v2/media # 不要写 ./vol1/...,否则会变成当前部署目录下的 vol1 子目录。 # 默认映射到容器 /media;如需在网页中直接填写宿主机绝对路径,可将 # MEDIASTATION_MEDIA_CONTAINER_DIR 设置为同一个 /vol1/... 路径。 - ${MEDIASTATION_MEDIA_DIR:-./media}:${MEDIASTATION_MEDIA_CONTAINER_DIR:-/media}:ro # 下载保存目录。 # 默认:宿主机目录映射到容器 /downloads,订阅保存根目录填写 /downloads。 # NAS 直读:把 MEDIASTATION_DOWNLOAD_CONTAINER_DIR 设置成与 MEDIASTATION_DOWNLOAD_DIR 相同, # 下载器保存根目录可直接填写 /vol1/1000/qBittorrent/downloads。 # 如果外部下载器也运行在 Docker 中,请给下载器挂载同一个宿主机目录。 # NAS / 飞牛等系统请写绝对路径,例如: # MEDIASTATION_DOWNLOAD_DIR=/vol1/1000/qBittorrent/downloads # 不要写 ./vol1/...,否则下载目录会被映射到当前部署目录下面。 # 默认映射到容器 /downloads;如需下载器和应用都使用宿主机绝对路径,可将 # MEDIASTATION_DOWNLOAD_CONTAINER_DIR 设置为同一个 /vol1/... 路径。 - ${MEDIASTATION_DOWNLOAD_DIR:-./downloads}:${MEDIASTATION_DOWNLOAD_CONTAINER_DIR:-/downloads} environment: # Web 服务监听配置。容器内固定监听 8080,对外端口由上方 ports 控制。 MEDIASTATION_APP_HOST: 0.0.0.0 MEDIASTATION_APP_PORT: 8080 MEDIASTATION_APP_WEB_DIR: /app/web/dist # 数据与缓存目录。需与 volumes 中的容器路径一致。 MEDIASTATION_APP_DATA_DIR: /data MEDIASTATION_DATABASE_DB_PATH: /data/mediastation.db MEDIASTATION_CACHE_CACHE_DIR: /cache # 宿主机到容器的路径映射提示。用于用户误填宿主机路径时自动转换为容器路径: # /vol1/1000/Docker/moviepilot-v2/media/电视剧 -> /media/电视剧 # /vol1/1000/qBittorrent/downloads/国产剧 -> /downloads/国产剧 MEDIASTATION_MEDIA_DIR: ${MEDIASTATION_MEDIA_DIR:-./media} MEDIASTATION_MEDIA_CONTAINER_DIR: ${MEDIASTATION_MEDIA_CONTAINER_DIR:-/media} MEDIASTATION_DOWNLOAD_DIR: ${MEDIASTATION_DOWNLOAD_DIR:-./downloads} MEDIASTATION_DOWNLOAD_CONTAINER_DIR: ${MEDIASTATION_DOWNLOAD_CONTAINER_DIR:-/downloads} # 日志级别:debug / info / warn / error。 MEDIASTATION_LOGGING_LEVEL: ${MEDIASTATION_LOGGING_LEVEL:-info} # 转码配置。留空表示自动/软件转码;硬件加速见下方 Intel/NVIDIA 示例。 MEDIASTATION_TRANSCODER_ENABLED: ${MEDIASTATION_TRANSCODER_ENABLED:-true} MEDIASTATION_TRANSCODER_HARDWARE_ACCEL: ${MEDIASTATION_TRANSCODER_HARDWARE_ACCEL:-false} MEDIASTATION_TRANSCODER_ENCODER: ${MEDIASTATION_TRANSCODER_ENCODER:-} MEDIASTATION_TRANSCODER_MAX_HEIGHT: ${MEDIASTATION_TRANSCODER_MAX_HEIGHT:-1080} # NAS 低负载保护:HLS 按播放速度转码、限制软件编码线程、限制并发、空闲自动停止。 MEDIASTATION_TRANSCODER_REALTIME: ${MEDIASTATION_TRANSCODER_REALTIME:-true} MEDIASTATION_TRANSCODER_THREADS: ${MEDIASTATION_TRANSCODER_THREADS:-2} MEDIASTATION_TRANSCODER_MAX_CONCURRENT: ${MEDIASTATION_TRANSCODER_MAX_CONCURRENT:-1} MEDIASTATION_TRANSCODER_IDLE_TIMEOUT_SECONDS: ${MEDIASTATION_TRANSCODER_IDLE_TIMEOUT_SECONDS:-120} # 跨域来源。通常无需设置;反向代理或三端客户端异常时再按需填写。 MEDIASTATION_APP_CORS_ORIGINS: ${MEDIASTATION_APP_CORS_ORIGINS:-} # Telegram 通知/Bot 出站网络。通常留空即可;如 NAS 访问 Telegram 超时, # 可在 .env 中填写反代 API 或代理地址: # MEDIASTATION_TELEGRAM_API_BASE_URL=https://api.telegram.org # MEDIASTATION_TELEGRAM_PROXY_URL=http://172.17.0.1:7890 MEDIASTATION_TELEGRAM_API_BASE_URL: ${MEDIASTATION_TELEGRAM_API_BASE_URL:-} MEDIASTATION_TELEGRAM_PROXY_URL: ${MEDIASTATION_TELEGRAM_PROXY_URL:-} # 宿主机文件权限映射。Linux/NAS 常用 1000:1000,可用 id 命令查看。 PUID: ${PUID:-1000} PGID: ${PGID:-1000} TZ: ${TZ:-Asia/Shanghai} # Intel QSV / VAAPI 硬件加速示例: # 1. Linux/NAS 宿主机存在 /dev/dri。 # 2. 在 .env 中设置 MEDIASTATION_TRANSCODER_HARDWARE_ACCEL=true # 和 MEDIASTATION_TRANSCODER_ENCODER=vaapi。 # 3. 取消下方 devices/group_add 注释。 # devices: # - /dev/dri:/dev/dri # group_add: # - "${RENDER_GID:-989}" # NVIDIA NVENC 硬件加速示例: # 1. 宿主机安装 NVIDIA Container Toolkit。 # 2. 在 .env 中设置 MEDIASTATION_TRANSCODER_HARDWARE_ACCEL=true # 和 MEDIASTATION_TRANSCODER_ENCODER=nvenc。 # 3. 取消下方 gpus 注释。 # gpus: all healthcheck: test: ["CMD-SHELL", "wget -qO- http://127.0.0.1:8080/api/health || exit 1"] interval: 30s timeout: 10s retries: 5 start_period: 30s