docs: simplify docker compose deployment

This commit is contained in:
ShukeBta
2026-06-09 14:05:26 +08:00
parent fe0e7a09ce
commit 81f0cabe91
5 changed files with 357 additions and 829 deletions
+68 -431
View File
@@ -194,43 +194,9 @@ MediaStationGo 采用完全开源路线,核心媒体库、刮削、播放、
### Docker Compose 部署(推荐)
Docker 是最稳定、最容易迁移的部署方式。默认会创建四类目录:
默认部署现在改成了**新手极简模式**:只需要准备一个 `docker-compose.yml`,再在 `.env` 里填写两个目录。
| 宿主机目录 | 容器目录 | 作用 |
| --- | --- | --- |
| `./data` | `/data` | 数据库、JWT secret、运行时配置,必须备份 |
| `./cache` | `/cache` | 海报、背景图、刮削缓存、转码缓存 |
| `./media` | `/media` | 媒体库根目录,默认只读挂载 |
| `./downloads` | `/downloads` | 订阅/站点下载保存目录 |
#### Linux / NAS 从零部署教程(不克隆源码)
适合 Ubuntu、Debian、CentOS、AlmaLinux、Rocky Linux、群晖/威联通类 Linux 环境。以下命令默认在服务器终端执行。
> Docker 安装脚本来自第三方镜像脚本,适合国内网络快速安装;如果你是生产服务器,也可以改用 Docker 官方文档安装。
1. 安装 Docker:
```bash
bash <(curl -sSL https://cdn.jsdelivr.net/gh/SuperManito/LinuxMirrors@main/DockerInstallation.sh)
docker --version
```
2. 安装 Docker Compose:
```bash
curl -L "https://github.com/docker/compose/releases/latest/download/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
chmod +x /usr/local/bin/docker-compose
docker-compose version
```
> 如果写入 `/usr/local/bin/docker-compose` 提示权限不足,请在 `curl` 和 `chmod` 前加 `sudo`。
> 如果你的系统已经支持 `docker compose version`,可以继续使用 `docker compose`;如果只安装了上面的独立二进制,请把后续命令中的 `docker compose` 替换为 `docker-compose`。
3. 创建部署目录:
#### 1. 创建部署目录
```bash
mkdir -p ~/MediaStationGo
@@ -238,251 +204,53 @@ cd ~/MediaStationGo
mkdir -p data cache media downloads
```
4. 创建 `.env`,按你的 NAS 路径填写。推荐使用“NAS 绝对路径直读模式”,网页里就可以直接填写 `/your-nas/...` 原始路径:
#### 2. 下载 compose 文件
```bash
curl -fsSL https://raw.githubusercontent.com/ShukeBta/MediaStationGo/main/docker-compose.yml -o docker-compose.yml
```
如果 GitHub Raw 访问慢,可以手动创建 `docker-compose.yml`,内容以仓库根目录的 `docker-compose.yml` 为准。
#### 3. 创建 `.env`
只需要改下面两个路径:
```bash
cat > .env <<'EOF'
# 固定版本;需要升级时改成新的 MediaStationGo-vX.Y.Z 后执行 docker compose pull && docker compose up -d
MEDIASTATION_IMAGE_TAG=MediaStationGo-v0.0.32
MEDIASTATION_HTTP_PORT=18080
# 程序数据和缓存建议放在 MediaStationGo 部署目录下,便于备份和迁移。
MEDIASTATION_DATA_DIR=./data
MEDIASTATION_CACHE_DIR=./cache
# NAS / 飞牛直读模式:左侧宿主机路径与右侧容器路径保持一致。
# 这样添加媒体库时直接填写 /your-nas/media/电视剧/国产剧。
MEDIASTATION_MEDIA_DIR=/your-nas/media
MEDIASTATION_MEDIA_CONTAINER_DIR=/your-nas/media
# 下载目录同样保持一致,方便 qBittorrent、MediaStationGo、站点订阅共用同一个保存路径。
MEDIASTATION_DOWNLOAD_DIR=/your-nas/downloads
MEDIASTATION_DOWNLOAD_CONTAINER_DIR=/your-nas/downloads
# 如果 NAS 已使用 v2rayA redirect / 透明代理,不要在这里额外配置 HTTP_PROXY,避免叠加代理。
MEDIASTATION_HTTP_PORT=18080
TZ=Asia/Shanghai
PUID=1000
PGID=1000
EOF
```
> 重点:不要把 NAS 绝对路径写成相对路径(如 `./media`)。相对路径代表当前部署目录下的子目录,最终会变成类似 `/your-nas/MediaStationGo/media/...` 这种错误路径。正确的 NAS 写法必须以 `/`(绝对路径)开头,例如 `/your-nas/media`。
路径怎么填:
如果你只是本地测试,没有现成 NAS 媒体目录,也可以改回部署目录下的测试目录:
| 变量 | 填什么 |
| --- | --- |
| `MEDIASTATION_MEDIA_DIR` | NAS/服务器上的真实媒体目录,例如 `/volume1/media`、`/mnt/media`、`/vol1/1000/Docker/moviepilot-v2/media` |
| `MEDIASTATION_DOWNLOAD_DIR` | NAS/服务器上的真实下载目录,例如 `/volume1/downloads`、`/mnt/downloads`、`/vol1/1000/qBittorrent/downloads` |
```env
MEDIASTATION_MEDIA_DIR=./media
MEDIASTATION_MEDIA_CONTAINER_DIR=/media
MEDIASTATION_DOWNLOAD_DIR=./downloads
MEDIASTATION_DOWNLOAD_CONTAINER_DIR=/downloads
```
> 不要写成 `./vol1/...`。带 `./` 是相对路径,会变成当前部署目录下面的文件夹。
5. 下载默认 `docker-compose.yml`:
#### 4. 启动
```bash
curl -fsSL https://raw.githubusercontent.com/ShukeBta/MediaStationGo/main/docker-compose.yml -o docker-compose.yml
```
如果无法访问 GitHub Raw,也可以手动创建:
```bash
vi docker-compose.yml
# 或
vim docker-compose.yml
```
然后粘贴下面的模板。
<details>
<summary><strong>展开查看完整 docker-compose.yml 模板</strong></summary>
```yaml
# MediaStationGo 默认 Docker Compose 部署文件。
#
# 快速开始:
# 1. 按需修改下方 volumes 的宿主机路径。
# 2. docker compose pull
# 3. docker compose up -d
# 4. 浏览器打开 http://<服务器IP>:18080
#
# 默认账号:
# admin / admin123
# 首次部署后请立即到「个人资料/用户管理」修改密码。
#
# 镜像版本:
# 默认拉取 latest;如需固定版本,创建 .env 并写入:
# MEDIASTATION_IMAGE_TAG=MediaStationGo-v0.0.32
#
# 路径映射总览:
# /data 程序数据目录。保存 SQLite 数据库、JWT secret、系统配置等,必须持久化。
# /cache 缓存目录。保存海报、刮削图片、转码缓存等,建议放在空间较大的磁盘。
# /media 媒体库只读挂载目录。网页中添加媒体库时填写容器内路径,例如 /media/Movies。
# /downloads 下载目录。下载器保存路径建议填写容器内路径,例如 /downloads/Movies。
#
# 宿主机路径建议:
# MEDIASTATION_DATA_DIR=./data
# MEDIASTATION_CACHE_DIR=./cache
# MEDIASTATION_MEDIA_DIR=/mnt/nas/media
# MEDIASTATION_DOWNLOAD_DIR=/mnt/nas/downloads
#
# NAS / 飞牛路径必须使用绝对路径,例如:
# MEDIASTATION_MEDIA_DIR=/your-nas/media
# MEDIASTATION_DOWNLOAD_DIR=/your-nas/downloads
# 不要写成 ./your-nas/...;./your-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 pull && docker compose up -d
pull_policy: missing
container_name: mediastation-go
restart: unless-stopped
ports:
# 宿主机端口:容器端口。默认访问 http://<服务器IP>:18080
- "${MEDIASTATION_HTTP_PORT:-18080}:8080"
volumes:
# 程序持久化数据:数据库、JWT secret、运行时配置。
- ${MEDIASTATION_DATA_DIR:-./data}:/data
# 海报/背景图/转码缓存。可删除重建,但会重新下载图片和生成缓存。
- ${MEDIASTATION_CACHE_DIR:-./cache}:/cache
# 媒体库根目录。添加媒体库时使用容器内路径:
# 电影:/media/Movies
# 剧集:/media/TV
# 动漫:/media/Anime
# 综艺:/media/Variety
# 如宿主机目录不同,请在 .env 中设置 MEDIASTATION_MEDIA_DIR。
# NAS / 飞牛等系统请写绝对路径,例如:
# MEDIASTATION_MEDIA_DIR=/your-nas/media
# 不要写相对路径(如 ./media),否则会变成当前部署目录下的子目录。
# 默认映射到容器 /media;如需在网页中直接填写宿主机绝对路径,可将
# MEDIASTATION_MEDIA_CONTAINER_DIR 设置为同一个 /your-nas/... 路径。
- ${MEDIASTATION_MEDIA_DIR:-./media}:${MEDIASTATION_MEDIA_CONTAINER_DIR:-/media}:ro
# 下载保存目录。订阅/站点下载的保存路径建议使用:
# /downloads/Movies
# /downloads/TV
# /downloads/Anime
# /downloads/Variety
# 如果外部下载器也运行在 Docker 中,请给下载器挂载同一个宿主机目录。
# NAS / 飞牛等系统请写绝对路径,例如:
# MEDIASTATION_DOWNLOAD_DIR=/your-nas/downloads
# 不要写 ./your-nas/...,否则下载目录会被映射到当前部署目录下面。
# 默认映射到容器 /downloads;如需下载器和应用都使用宿主机绝对路径,可将
# MEDIASTATION_DOWNLOAD_CONTAINER_DIR 设置为同一个 /your-nas/... 路径。
- ${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
# 宿主机到容器的路径映射提示。用于用户误填宿主机路径时自动转换为容器路径:
# /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:-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}
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:-}
# 宿主机文件权限映射。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
```
</details>
6. 启动服务:
```bash
# Docker Compose v2
docker compose pull
docker compose up -d
# 如果你的系统只有 docker-compose 命令,则使用:
# docker-compose pull
# docker-compose up -d
```
如果是升级已有部署,建议使用仓库提供的更新脚本。它会先拉取并重建容器,再只清理 `ghcr.io/shukebta/mediastation-go` 的旧镜像和 dangling 层,避免 NAS 磁盘被历史镜像占满:
如果你的系统只有旧版命令:
```bash
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
docker-compose pull
docker-compose up -d
```
7. 查看状态与日志:
```bash
docker compose ps
docker compose logs -f mediastation-go
# 或:
# docker-compose ps
# docker-compose logs -f mediastation-go
```
8. 浏览器访问:
#### 5. 访问
```text
http://<服务器IP>:18080
@@ -491,218 +259,89 @@ http://<服务器IP>:18080
默认账号:
```text
用户名:admin
密码:admin123
admin / admin123
```
> 首次登录后请立即修改管理员密码。如果局域网无法访问,请检查服务器防火墙、安全组、NAS 防火墙,以及 `18080:8080` 端口映射是否生效。
首次登录后请立即修改管理员密码。
#### 已有源码仓库的快速启动
#### 6. 页面里路径怎么填
如果你是开发者或已经克隆源码,也可以直接使用仓库内置的 `docker-compose.yml`:
```bash
git clone https://github.com/ShukeBta/MediaStationGo.git
cd MediaStationGo
docker compose pull
docker compose up -d
```
后续升级建议在部署目录执行:
默认 compose 会把你的宿主机目录映射为容器路径:
| 宿主机真实目录 | 容器内路径 | 页面里建议填写 |
| --- | --- | --- |
| `MEDIASTATION_MEDIA_DIR` | `/media` | `/media/电影`、`/media/电视剧`、`/media/电视剧/国产剧` |
| `MEDIASTATION_DOWNLOAD_DIR` | `/downloads` | 下载器保存根目录填 `/downloads` |
这只是 Docker 绑定挂载,不会复制文件,不会占用双倍空间。MediaStationGo 读取的是原目录内容,只是在容器里显示成 `/media` 和 `/downloads`。
#### 7. 更新镜像
推荐使用仓库脚本,它会更新容器并清理本项目旧镜像,避免 NAS 磁盘被旧镜像占满:
```bash
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
```
#### 8. 查看状态和日志
```bash
docker compose ps
docker compose logs -f mediastation-go
```
#### 高级配置
默认文件只保留新手必需项。需要直读宿主机原始路径、Telegram 代理、硬件加速、更多转码环境变量时,参考仓库中的高级示例:
```text
docker-compose.advanced.yml
```
### 固定版本部署
建议生产环境固定版本,避免 `latest` 自动变化。NAS 直读推荐 `.env`:
生产环境可以固定镜像版本,避免 `latest` 自动变化。只需要在 `.env` 里增加:
```env
MEDIASTATION_IMAGE_TAG=MediaStationGo-v0.0.32
```
然后执行:
```bash
cat > .env <<'EOF'
MEDIASTATION_IMAGE_TAG=MediaStationGo-v0.0.32
MEDIASTATION_HTTP_PORT=18080
MEDIASTATION_DATA_DIR=./data
MEDIASTATION_CACHE_DIR=./cache
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
TZ=Asia/Shanghai
PUID=1000
PGID=1000
EOF
docker compose pull
docker compose up -d
```
### 媒体库路径怎么填
#### 宿主机路径与容器路径的关系
Docker Compose 左侧是宿主机真实目录,右侧是容器内目录。宿主机绝对路径会直接读取 NAS 原目录,不会复制到部署目录,也不会多套一层部署目录前缀。
```yaml
# 宿主机真实路径 # 容器内路径
- /your-nas/media:/media:ro
- /your-nas/downloads:/downloads
```
容器内只需要使用 `/media` 和 `/downloads`。如果你看到 `/your-nas/MediaStationGo/your-nas/...`,说明 `.env` 或 compose 里把路径写成了 `./your-nas/...`,需要去掉前面的点,改为 `/your-nas/...`。
> 如果你在添加媒体库时填写了 `/your-nas/media/电视剧/国产剧` 并提示不可访问,原因是应用在容器内运行,默认只能看到 `/media/电视剧/国产剧`。新版 compose 会把宿主机路径作为映射提示传入容器,尽量自动纠正;但最推荐、最稳定的填写方式仍然是容器路径 `/media/...`。
如果你更希望“页面里直接填写 NAS 绝对路径”,可以把宿主机路径和容器路径设置成完全一致,这不会复制文件,也不会多占空间:
```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
```
对应 compose 实际效果等价于:
```yaml
- /your-nas/media:/your-nas/media:ro
- /your-nas/downloads:/your-nas/downloads
```
这样添加媒体库时就可以直接填写 `/your-nas/media/电视剧/国产剧`。
推荐添加媒体库路径示例:
| 媒体库 | 页面填写路径 | 类型 |
| --- | --- | --- |
| 华语电影 / 外语电影 / 动画电影 | `/your-nas/media/电影` | 电影 |
| 国产剧 / 欧美剧 / 日韩剧 / 国漫 / 日番 / 综艺 | `/your-nas/media/电视剧` | 电视剧 / 动漫 / 综艺 |
| 下载根目录 | `/your-nas/downloads` | 下载器保存路径 |
如果你只想添加更细的分类目录,也可以填 `/your-nas/media/电视剧/国产剧`;系统会直接扫描这个目录,不会复制、不搬家。
> 安全策略:扫描和播放只读取原目录;“整理整个库”不会再搬动已经位于媒体库目录内的文件,避免本地 NFO、海报、字幕等元数据被迁移后丢失。下载完成后的自动整理仍然默认关闭,只有你手动打开后才会移动下载目录中的新文件。
如果 compose 中这样挂载:
```yaml
- /mnt/nas/media:/media:ro
- /mnt/nas/downloads:/downloads
```
那么在 Web 管理页面中添加媒体库时应填写容器内路径,例如:
| 类型 | 推荐路径 |
| --- | --- |
| 电影媒体库 | `/media/电影` |
| 剧集/动漫/综艺媒体库 | `/media/电视剧` |
| 成人内容 | `/media/Adult` |
| 下载根目录 | `/downloads` |
#### NAS 绝对路径写法
NAS、飞牛、绿联、群晖、威联通等系统里,媒体目录通常是系统绝对路径。compose 中必须写 `/your-nas/...`、`/volume1/...`、`/mnt/...` 这类从根目录开始的路径,不要写成 `./your-nas/...`。
```yaml
# 正确:宿主机绝对路径
- /your-nas/media:/media:ro
- /your-nas/downloads:/downloads
# 错误:这是相对当前 compose 目录的路径
- ./your-nas/media:/media:ro
- ./your-nas/downloads:/downloads
```
也可以放到 `.env` 里统一管理:
```env
MEDIASTATION_MEDIA_DIR=/your-nas/media
MEDIASTATION_DOWNLOAD_DIR=/your-nas/downloads
```
容器内媒体库建议添加 `/media/电影` 和 `/media/电视剧` 两个根目录;整理后会自动进入 `/media/电影/动画电影`、`/media/电视剧/国产剧` 等分类目录。下载器保存根目录填写 `/downloads`,订阅下载会自动落到 `/downloads/动画电影`、`/downloads/国产剧` 等分类目录。
### 外网访问与 v2rayA 说明
如果 NAS 已经开启 v2rayA 的 `redirect` / 透明代理,并使用大陆白名单分流,MediaStationGo 通常不需要额外配置 `HTTP_PROXY` / `HTTPS_PROXY`。
不建议在 `docker-compose.yml` 或 `.env` 中重复配置代理环境变量,因为这会让容器网络和 Docker 拉镜像路径叠加代理,反而可能导致 GHCR、M-Team、TMDB 等访问异常。
排查外网链路时,先从容器内直接测试:
```bash
docker exec -it mediastation-go sh -lc 'wget -S -O- --timeout=20 https://api.m-team.cc/api/torrent/search'
```
如果这里仍然卡在 TLS 阶段,应优先检查 v2rayA 的 redirect 规则、Docker 网桥流量是否被透明代理接管,而不是给 Docker daemon 或 compose 叠加 `HTTP_PROXY`。
### qBittorrent 连接怎么填
如果 qBittorrent 运行在同一台 NAS/宿主机上,MediaStationGo 容器里不要优先填 `127.0.0.1`;`127.0.0.1` 代表 MediaStationGo 容器自己。推荐在「下载器管理」中填写:
如果 qBittorrent 运行在同一台 NAS/宿主机上,MediaStationGo 容器里不要填 `127.0.0.1`;推荐在「下载器管理」中填写:
```text
http://host.docker.internal:8085
```
仓库默认 `docker-compose.yml` 已配置:
```yaml
extra_hosts:
- "host.docker.internal:host-gateway"
```
如果你填写 `http://你的IP:8085` 超时,但 `http://172.17.0.?(使用了代理):8085` 返回 403,通常表示:
- Docker 容器到局域网 IP 存在防火墙、路由或 hairpin 限制,建议改用 `host.docker.internal`。
- qBittorrent WebUI 已经能被容器访问,但登录被拒绝。请检查用户名/密码、IP 封禁、CSRF/Host Header 校验。
- qBittorrent WebUI 设置里建议确认:监听地址为 `0.0.0.0` 或所有地址;端口为 `8085`;解除/关闭连续失败后的 IP 封禁;必要时把 `host.docker.internal`、`172.17.0.1`、NAS 局域网 IP 加入允许域名/白名单,或关闭 Host Header 校验。
可在 NAS 上用下面命令快速验证 qBittorrent 登录:
```bash
docker exec -it mediastation-go sh -lc 'wget -S -O- --post-data="username=你的用户名&password=你的密码" http://host.docker.internal:8085/api/v2/auth/login'
```
返回 `Ok.` 才表示账号和 qBittorrent WebUI 配置都正常。返回 `Forbidden` / `403` 时先去 qBittorrent WebUI 解除封禁和检查安全设置。
### 下载器路径怎么填
如果 qBittorrent 也运行在 Docker 中,必须让 qBittorrent 与 MediaStationGo 看到同一份下载目录。
建议统一约定:
```text
宿主机:/mnt/nas/downloads
MediaStationGo 容器:/downloads
qBittorrent 容器:/downloads
```
订阅保存根目录建议填写:
如果 qBittorrent 也运行在 Docker 中,建议让 qBittorrent 和 MediaStationGo 都把同一个宿主机下载目录映射为 `/downloads`。订阅保存根目录填写:
```text
/downloads
```
启用智能分类后,订阅或站点搜索下载会根据媒体类别自动进入:
```text
/downloads/动画电影
/downloads/华语电影
/downloads/外语电影
/downloads/国产剧
/downloads/国漫
/downloads/日番
/downloads/欧美剧
/downloads/日韩剧
/downloads/综艺
```
启用智能分类后,下载会自动进入 `/downloads/动画电影`、`/downloads/国产剧`、`/downloads/综艺` 等分类目录。
---
## 🐳 Docker Compose 配置示例
项目已内置详细注释版 `docker-compose.yml`,可直接使用。常用变量如下:
项目默认内置极简 `docker-compose.yml`,新手通常只需要下面几个变量:
| 变量 | 默认值 | 说明 |
| --- | --- | --- |
@@ -711,9 +350,7 @@ qBittorrent 容器:/downloads
| `MEDIASTATION_DATA_DIR` | `./data` | 数据持久化目录 |
| `MEDIASTATION_CACHE_DIR` | `./cache` | 图片和转码缓存目录 |
| `MEDIASTATION_MEDIA_DIR` | `./media` | 媒体库宿主机目录;NAS 建议写 `/your-nas/media` 这种绝对路径 |
| `MEDIASTATION_MEDIA_CONTAINER_DIR` | `/media` | 容器内媒体路径;如想页面直接填写 `/your-nas/...`,可设置成与 `MEDIASTATION_MEDIA_DIR` 相同 |
| `MEDIASTATION_DOWNLOAD_DIR` | `./downloads` | 下载保存宿主机目录;NAS 建议写 `/your-nas/downloads` 这种绝对路径 |
| `MEDIASTATION_DOWNLOAD_CONTAINER_DIR` | `/downloads` | 容器内下载路径;如想下载器保存路径直接使用 `/your-nas/...`,可设置成与 `MEDIASTATION_DOWNLOAD_DIR` 相同 |
| `PUID` / `PGID` | `1000` / `1000` | Linux/NAS 文件权限映射 |
| `TZ` | `Asia/Shanghai` | 容器时区 |