# MediaStationGo 默认 Docker Compose 部署文件。 # # 快速开始: # 1. 按需修改下方 volumes 的宿主机路径。 # 2. docker compose pull mediastation-go # 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.32 # # 路径映射总览: # /data 程序运行数据目录。保存 JWT secret、系统配置、旧 SQLite 迁移源,必须持久化。 # /postgres PostgreSQL 主数据库目录,账号、媒体库、订阅等主数据都在这里,必须备份。 # /cache 缓存目录。保存海报、刮削图片、转码缓存等,建议放在空间较大的磁盘。 # /media 媒体库只读挂载目录。网页中添加媒体库时填写容器内路径,例如 /media/Movies。 # /downloads 下载目录。下载器保存路径建议填写容器内路径,例如 /downloads/Movies。 # # NAS / 飞牛推荐直读模式: # 如果你希望网页里直接填写 NAS 原始路径,例如 # /your-nas/media/电视剧/国产剧, # 请在 .env 中把宿主机路径和容器路径设置成完全相同(请替换为你自己的实际路径): # # MEDIASTATION_MEDIA_DIR=/your-nas/media # MEDIASTATION_MEDIA_CONTAINER_DIR=/your-nas/media # MEDIASTATION_DOWNLOAD_DIR=/your-nas/downloads # MEDIASTATION_DOWNLOAD_CONTAINER_DIR=/your-nas/downloads # # 这只是 Docker bind mount,不会复制文件,不会占用双倍空间。 # # 本地测试模式: # MEDIASTATION_DATA_DIR=./data # MEDIASTATION_CACHE_DIR=./cache # MEDIASTATION_MEDIA_DIR=./media # MEDIASTATION_DOWNLOAD_DIR=./downloads # # NAS / 飞牛路径必须使用绝对路径(请替换为你自己的实际路径),例如: # MEDIASTATION_MEDIA_DIR=/your-nas/media # MEDIASTATION_DOWNLOAD_DIR=/your-nas/downloads # 不要写成相对路径(如 ./media)当作 NAS 绝对路径;相对路径会被 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 depends_on: postgres: condition: service_healthy 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、运行配置、旧 SQLite 迁移源。 # 主数据库在 postgres 服务的 /var/lib/postgresql/data。 - ${MEDIASTATION_DATA_DIR:-./data}:/data # 海报/背景图/转码缓存。可删除重建,但会重新下载图片和生成缓存。 - ${MEDIASTATION_CACHE_DIR:-./cache}:/cache # 媒体库根目录。 # 默认:宿主机目录映射到容器 /media,添加媒体库时填写 /media/电影、/media/电视剧。 # NAS 直读:把 MEDIASTATION_MEDIA_CONTAINER_DIR 设置成与 MEDIASTATION_MEDIA_DIR 相同, # 添加媒体库时即可直接填写 /your-nas/media/电影、/your-nas/media/电视剧。 # 如宿主机目录不同,请在 .env 中设置 MEDIASTATION_MEDIA_DIR。 # NAS / 飞牛等系统请写绝对路径(替换为你自己的实际路径),例如: # MEDIASTATION_MEDIA_DIR=/your-nas/media # 不要写相对路径,否则会变成当前部署目录下的子目录。 # 默认映射到容器 /media;如需在网页中直接填写宿主机绝对路径,可将 # MEDIASTATION_MEDIA_CONTAINER_DIR 设置为同一个绝对路径。 - ${MEDIASTATION_MEDIA_DIR:-./media}:${MEDIASTATION_MEDIA_CONTAINER_DIR:-/media}:ro # 下载保存目录。 # 默认:宿主机目录映射到容器 /downloads,订阅保存根目录填写 /downloads。 # NAS 直读:把 MEDIASTATION_DOWNLOAD_CONTAINER_DIR 设置成与 MEDIASTATION_DOWNLOAD_DIR 相同, # 下载器保存根目录可直接填写 /your-nas/downloads。 # 如果外部下载器也运行在 Docker 中,请给下载器挂载同一个宿主机目录。 # NAS / 飞牛等系统请写绝对路径(替换为你自己的实际路径),例如: # MEDIASTATION_DOWNLOAD_DIR=/your-nas/downloads # 不要写相对路径,否则下载目录会被映射到当前部署目录下面。 # 默认映射到容器 /downloads;如需下载器和应用都使用宿主机绝对路径,可将 # MEDIASTATION_DOWNLOAD_CONTAINER_DIR 设置为同一个绝对路径。 - ${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_TYPE: ${MEDIASTATION_DATABASE_TYPE:-postgres} MEDIASTATION_DATABASE_DSN: ${MEDIASTATION_DATABASE_DSN:-postgres://mediastation:mediastation@postgres:5432/mediastation?sslmode=disable} # SQLite 旧库迁移源。确认迁移完成后,可改成 /data/no-sqlite-migration.db。 MEDIASTATION_DATABASE_DB_PATH: /data/mediastation.db MEDIASTATION_CACHE_CACHE_DIR: /cache # 宿主机到容器的路径映射提示。用于用户误填宿主机路径时自动转换为容器路径: # /your-nas/media/电视剧 -> /media/电视剧 # /your-nas/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:-warn} MEDIASTATION_LOGGING_OUTPUT_PATH: ${MEDIASTATION_LOGGING_OUTPUT_PATH:-/data/logs} MEDIASTATION_LOGGING_ENABLE_ROTATION: ${MEDIASTATION_LOGGING_ENABLE_ROTATION:-true} MEDIASTATION_LOGGING_MAX_SIZE_MB: ${MEDIASTATION_LOGGING_MAX_SIZE_MB:-20} MEDIASTATION_LOGGING_MAX_AGE_DAYS: ${MEDIASTATION_LOGGING_MAX_AGE_DAYS:-30} MEDIASTATION_LOGGING_MAX_BACKUPS: ${MEDIASTATION_LOGGING_MAX_BACKUPS:-10} # 转码配置。留空表示自动/软件转码;硬件加速见下方 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 或代理地址。v2rayA 常见代理: # HTTP http://host.docker.internal:20171 或 http://172.17.0.1:20171 # SOCKS socks5://host.docker.internal:20170 或 socks5://172.17.0.1:20170 # MEDIASTATION_TELEGRAM_API_BASE_URL=https://api.telegram.org # MEDIASTATION_TELEGRAM_PROXY_URL=http://host.docker.internal:20171 MEDIASTATION_TELEGRAM_API_BASE_URL: ${MEDIASTATION_TELEGRAM_API_BASE_URL:-} MEDIASTATION_TELEGRAM_PROXY_URL: ${MEDIASTATION_TELEGRAM_PROXY_URL:-} # 可选:把宿主机 shell/.env 中的代理变量透传给容器。留空无效果。 # 如果 NAS 已使用 v2rayA redirect/透明代理且 Docker 网桥流量已被接管, # 通常不需要填写这些变量。 HTTP_PROXY: ${HTTP_PROXY:-} HTTPS_PROXY: ${HTTPS_PROXY:-} ALL_PROXY: ${ALL_PROXY:-} NO_PROXY: ${NO_PROXY:-127.0.0.1,localhost} # 宿主机文件权限映射。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", "busybox wget -qO- http://127.0.0.1:8080/api/health || exit 1"] interval: 30s timeout: 10s retries: 5 start_period: 30s postgres: image: postgres:16-alpine # 数据库基础镜像不参与日常应用更新,避免误拉新版 PostgreSQL。 # 如需升级 PostgreSQL,请先备份 ./postgres 后再手动调整镜像版本并拉取。 pull_policy: never container_name: mediastation-postgres restart: unless-stopped environment: POSTGRES_DB: ${MEDIASTATION_POSTGRES_DB:-mediastation} POSTGRES_USER: ${MEDIASTATION_POSTGRES_USER:-mediastation} POSTGRES_PASSWORD: ${MEDIASTATION_POSTGRES_PASSWORD:-mediastation} TZ: ${TZ:-Asia/Shanghai} volumes: - ${MEDIASTATION_POSTGRES_DIR:-./postgres}:/var/lib/postgresql/data healthcheck: test: ["CMD-SHELL", "pg_isready -U ${MEDIASTATION_POSTGRES_USER:-mediastation} -d ${MEDIASTATION_POSTGRES_DB:-mediastation}"] interval: 10s timeout: 5s retries: 10