mirror of
https://github.com/truewhile/MeBox.git
synced 2026-09-28 03:06:38 +08:00
docs: simplify docker compose deployment
This commit is contained in:
@@ -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` | 容器时区 |
|
||||
|
||||
|
||||
+65
-255
@@ -189,41 +189,9 @@ The current base license is `GPL-3.0`, and contributions are welcome under that
|
||||
|
||||
### Docker Compose (Recommended)
|
||||
|
||||
Docker is the most stable and portable deployment option. The default compose file creates four main mounts:
|
||||
The default deployment is now **beginner-friendly**: download `docker-compose.yml`, create one `.env`, and edit only two paths.
|
||||
|
||||
| Host path | Container path | Purpose |
|
||||
| --- | --- | --- |
|
||||
| `./data` | `/data` | Database, JWT secret, runtime settings. Back this up. |
|
||||
| `./cache` | `/cache` | Posters, backdrops, scraping cache, transcoding cache |
|
||||
| `./media` | `/media` | Media library root, mounted read-only by default |
|
||||
| `./downloads` | `/downloads` | Subscription/site download target |
|
||||
|
||||
#### Linux / NAS Zero-to-One Deployment Without Cloning Source
|
||||
|
||||
This path is friendly for Ubuntu, Debian, CentOS, AlmaLinux, Rocky Linux, and most Linux-based NAS hosts.
|
||||
|
||||
1. Install Docker:
|
||||
|
||||
```bash
|
||||
bash <(curl -sSL https://cdn.jsdelivr.net/gh/SuperManito/LinuxMirrors@main/DockerInstallation.sh)
|
||||
|
||||
docker --version
|
||||
```
|
||||
|
||||
2. Install 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
|
||||
```
|
||||
|
||||
> If writing to `/usr/local/bin/docker-compose` fails with a permission error, prefix the `curl` and `chmod` commands with `sudo`.
|
||||
|
||||
> If your system already supports `docker compose version`, keep using `docker compose`. If you installed only the standalone binary above, replace later `docker compose` commands with `docker-compose`.
|
||||
|
||||
3. Create the deployment directory:
|
||||
#### 1. Create a deployment directory
|
||||
|
||||
```bash
|
||||
mkdir -p ~/MediaStationGo
|
||||
@@ -231,81 +199,51 @@ cd ~/MediaStationGo
|
||||
mkdir -p data cache media downloads
|
||||
```
|
||||
|
||||
4. Create `.env`. For NAS deployments, the recommended mode is mapping the host absolute path to the exact same container path, so the web UI can use `/your-nas/...` directly:
|
||||
#### 2. Download compose
|
||||
|
||||
```bash
|
||||
curl -fsSL https://raw.githubusercontent.com/ShukeBta/MediaStationGo/main/docker-compose.yml -o docker-compose.yml
|
||||
```
|
||||
|
||||
If GitHub Raw is slow, create `docker-compose.yml` manually and paste the template from the repository root.
|
||||
|
||||
#### 3. Create `.env`
|
||||
|
||||
Only change these two directories:
|
||||
|
||||
```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
|
||||
# If the NAS already uses v2rayA redirect / transparent proxy, do not add HTTP_PROXY here.
|
||||
MEDIASTATION_HTTP_PORT=18080
|
||||
TZ=Asia/Shanghai
|
||||
PUID=1000
|
||||
PGID=1000
|
||||
EOF
|
||||
```
|
||||
|
||||
> Important: do not write NAS absolute paths as relative paths (e.g. `./media`). A relative path means a subdirectory under the current compose project, which can become a wrong path such as `/your-nas/MediaStationGo/media/...`. Correct NAS paths must start with `/` (absolute), e.g. `/your-nas/media`.
|
||||
| Variable | Meaning |
|
||||
| --- | --- |
|
||||
| `MEDIASTATION_MEDIA_DIR` | Real host/NAS media directory, e.g. `/volume1/media`, `/mnt/media` |
|
||||
| `MEDIASTATION_DOWNLOAD_DIR` | Real host/NAS download directory, e.g. `/volume1/downloads`, `/mnt/downloads` |
|
||||
|
||||
For local testing without existing NAS folders, use the deploy-directory mounts instead:
|
||||
> Do not write NAS absolute paths as `./vol1/...`. A leading `./` means a directory under the current compose project.
|
||||
|
||||
```env
|
||||
MEDIASTATION_MEDIA_DIR=./media
|
||||
MEDIASTATION_MEDIA_CONTAINER_DIR=/media
|
||||
MEDIASTATION_DOWNLOAD_DIR=./downloads
|
||||
MEDIASTATION_DOWNLOAD_CONTAINER_DIR=/downloads
|
||||
```
|
||||
|
||||
5. Download the default compose file:
|
||||
|
||||
```bash
|
||||
curl -fsSL https://raw.githubusercontent.com/ShukeBta/MediaStationGo/main/docker-compose.yml -o docker-compose.yml
|
||||
```
|
||||
|
||||
If GitHub Raw is unavailable, create it manually and paste the template from `docker-compose.yml` in this repository:
|
||||
|
||||
```bash
|
||||
vi docker-compose.yml
|
||||
# or
|
||||
vim docker-compose.yml
|
||||
```
|
||||
|
||||
6. Start MediaStationGo:
|
||||
#### 4. Start
|
||||
|
||||
```bash
|
||||
docker compose pull
|
||||
docker compose up -d
|
||||
|
||||
# If only docker-compose is available:
|
||||
# docker-compose pull
|
||||
# docker-compose up -d
|
||||
```
|
||||
|
||||
For existing deployments, use the update helper. It pulls and recreates the service, then removes old unused `ghcr.io/shukebta/mediastation-go` images and dangling layers so NAS disks do not fill up with historical images:
|
||||
If your system only has the legacy command:
|
||||
|
||||
```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. Check status and logs:
|
||||
|
||||
```bash
|
||||
docker compose ps
|
||||
docker compose logs -f mediastation-go
|
||||
|
||||
# Or:
|
||||
# docker-compose ps
|
||||
# docker-compose logs -f mediastation-go
|
||||
```
|
||||
|
||||
Open:
|
||||
#### 5. Open the app
|
||||
|
||||
```text
|
||||
http://<server-ip>:18080
|
||||
@@ -314,204 +252,78 @@ http://<server-ip>:18080
|
||||
Default account:
|
||||
|
||||
```text
|
||||
Username: admin
|
||||
Password: admin123
|
||||
admin / admin123
|
||||
```
|
||||
|
||||
> Change the administrator password immediately after first login. If LAN access fails, check the server firewall, NAS firewall, security group, and the `18080:8080` port mapping.
|
||||
Change the admin password immediately after first login.
|
||||
|
||||
#### Quick Start from Source Checkout
|
||||
#### 6. Paths inside the web UI
|
||||
|
||||
Developers or users who already cloned the repository can use the built-in compose file directly:
|
||||
|
||||
```bash
|
||||
git clone https://github.com/ShukeBta/MediaStationGo.git
|
||||
cd MediaStationGo
|
||||
|
||||
docker compose pull
|
||||
docker compose up -d
|
||||
```
|
||||
|
||||
For later upgrades, run this from the deployment directory:
|
||||
The simple compose maps host directories to stable container paths:
|
||||
|
||||
| Host directory | Container path | Use in the web UI |
|
||||
| --- | --- | --- |
|
||||
| `MEDIASTATION_MEDIA_DIR` | `/media` | `/media/Movies`, `/media/TV`, `/media/TV/CDrama` |
|
||||
| `MEDIASTATION_DOWNLOAD_DIR` | `/downloads` | Downloader save root: `/downloads` |
|
||||
|
||||
This is a Docker bind mount. It does not copy files and does not consume double disk space.
|
||||
|
||||
#### 7. Update
|
||||
|
||||
Use the update helper to pull the new image and remove old MediaStationGo image layers:
|
||||
|
||||
```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
|
||||
```
|
||||
|
||||
### Pin a Release Version
|
||||
#### Advanced options
|
||||
|
||||
For production, pin a specific release tag instead of using `latest`. Recommended NAS `.env`:
|
||||
The default compose intentionally stays small. For host-path direct mode, Telegram proxy variables, hardware acceleration, and additional transcoding options, see:
|
||||
|
||||
```text
|
||||
docker-compose.advanced.yml
|
||||
```
|
||||
|
||||
### Fixed Version Deployment
|
||||
|
||||
For production, pin a release tag in `.env`:
|
||||
|
||||
```env
|
||||
MEDIASTATION_IMAGE_TAG=MediaStationGo-v0.0.32
|
||||
```
|
||||
|
||||
Then run:
|
||||
|
||||
```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
|
||||
```
|
||||
|
||||
### Media Library Paths
|
||||
### External Network and v2rayA
|
||||
|
||||
#### Host Paths vs Container Paths
|
||||
If your NAS already uses v2rayA redirect / transparent proxy with routing rules, MediaStationGo usually does not need extra `HTTP_PROXY` / `HTTPS_PROXY` variables.
|
||||
|
||||
The left side of a Docker Compose volume is the real host directory, and the right side is the path inside the container. Absolute NAS host paths are read directly; they are not copied into the deployment folder and will not be nested under the compose project directory.
|
||||
Avoid stacking proxy variables in `.env`, `docker-compose.yml`, or the Docker daemon unless you intentionally use an application-level proxy. Stacked proxies can break GHCR pulls and site APIs.
|
||||
|
||||
```yaml
|
||||
# Real host path # Container path
|
||||
- /your-nas/media:/media:ro
|
||||
- /your-nas/downloads:/downloads
|
||||
```
|
||||
### qBittorrent URL
|
||||
|
||||
Inside the app, use only `/media` and `/downloads`. If you see `/your-nas/MediaStationGo/your-nas/...`, your `.env` or compose file probably uses `./your-nas/...`; remove the dot and use `/your-nas/...`.
|
||||
|
||||
> If adding `/your-nas/media/电视剧/国产剧` as a library reports inaccessible, the app is running inside the container and normally sees `/media/电视剧/国产剧`. The updated compose passes host-path hints so the backend can auto-convert common mistakes, but `/media/...` remains the recommended and most stable input.
|
||||
|
||||
If you prefer entering the NAS absolute path directly in the web UI, map the host path to the exact same container path. This does not copy files or use extra disk space:
|
||||
|
||||
```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
|
||||
```
|
||||
|
||||
Equivalent compose mounts:
|
||||
|
||||
```yaml
|
||||
- /your-nas/media:/your-nas/media:ro
|
||||
- /your-nas/downloads:/your-nas/downloads
|
||||
```
|
||||
|
||||
With this mode, add libraries using paths such as `/your-nas/media/电视剧/国产剧`.
|
||||
|
||||
> Safety policy: scanning and playback read the original directory. “Organize entire library” no longer moves files already inside the library root, protecting local NFO, posters, subtitles, and other sidecar metadata. Auto-organize after downloads remains disabled by default.
|
||||
|
||||
If your compose mounts are:
|
||||
|
||||
```yaml
|
||||
- /mnt/nas/media:/media:ro
|
||||
- /mnt/nas/downloads:/downloads
|
||||
```
|
||||
|
||||
then add libraries in the web UI using container paths:
|
||||
|
||||
| Type | Recommended path |
|
||||
| --- | --- |
|
||||
| Movie library | `/media/电影` |
|
||||
| TV / anime / variety library | `/media/电视剧` |
|
||||
| Adult | `/media/Adult` |
|
||||
| Download root | `/downloads` |
|
||||
|
||||
#### NAS Absolute Path Syntax
|
||||
|
||||
On NAS systems, media folders are usually absolute host paths. In compose, use paths starting from the filesystem root, such as `/your-nas/...`, `/volume1/...`, or `/mnt/...`; do not use `./your-nas/...` unless that directory really exists under the compose project directory.
|
||||
|
||||
```yaml
|
||||
# Correct: absolute host paths
|
||||
- /your-nas/media:/media:ro
|
||||
- /your-nas/downloads:/downloads
|
||||
|
||||
# Wrong: relative to the compose directory
|
||||
- ./your-nas/media:/media:ro
|
||||
- ./your-nas/downloads:/downloads
|
||||
```
|
||||
|
||||
You can also keep the paths in `.env`:
|
||||
|
||||
```env
|
||||
MEDIASTATION_MEDIA_DIR=/your-nas/media
|
||||
MEDIASTATION_DOWNLOAD_DIR=/your-nas/downloads
|
||||
```
|
||||
|
||||
Inside MediaStationGo, add `/media/电影` and `/media/电视剧` as media library roots. Organized files will land in category folders such as `/media/电影/动画电影` and `/media/电视剧/国产剧`. Use `/downloads` as the download root; subscriptions will save to folders such as `/downloads/动画电影` and `/downloads/国产剧`.
|
||||
|
||||
### External Access and v2rayA
|
||||
|
||||
If the NAS already uses v2rayA `redirect` / transparent proxy with routing rules, MediaStationGo usually does not need explicit `HTTP_PROXY` / `HTTPS_PROXY` variables.
|
||||
|
||||
Avoid stacking proxy variables in `.env`, `docker-compose.yml`, or the Docker daemon unless you intentionally use an application-level HTTP proxy. Stacked proxies can break GHCR pulls and site APIs.
|
||||
|
||||
Test from inside the container first:
|
||||
|
||||
```bash
|
||||
docker exec -it mediastation-go sh -lc 'wget -S -O- --timeout=20 https://api.m-team.cc/api/torrent/search'
|
||||
```
|
||||
|
||||
If it still hangs during TLS, check v2rayA redirect rules and whether Docker bridge traffic is covered by the transparent proxy instead of adding another `HTTP_PROXY` layer.
|
||||
|
||||
### qBittorrent Connection
|
||||
|
||||
If qBittorrent runs on the same NAS/host, do not use `127.0.0.1` from MediaStationGo; inside the container it means the MediaStationGo container itself. In Download Clients, use:
|
||||
If qBittorrent runs on the same NAS/host, do not use `127.0.0.1` from inside MediaStationGo. Use:
|
||||
|
||||
```text
|
||||
http://host.docker.internal:8085
|
||||
```
|
||||
|
||||
The default `docker-compose.yml` includes:
|
||||
If qBittorrent also runs in Docker, mount the same host download directory as `/downloads` in both containers. Use `/downloads` as the subscription save root.
|
||||
|
||||
```yaml
|
||||
extra_hosts:
|
||||
- "host.docker.internal:host-gateway"
|
||||
```
|
||||
|
||||
If `http://192.168.1.125:8085` times out but `http://172.17.0.1:8085` returns 403, the container can reach qBittorrent but the WebUI rejects login. Check username/password, IP bans, CSRF/Host Header validation, and allowed subnets/domains.
|
||||
|
||||
Quick test from the MediaStationGo container:
|
||||
|
||||
```bash
|
||||
docker exec -it mediastation-go sh -lc 'wget -S -O- --post-data="username=YOUR_USER&password=YOUR_PASS" http://host.docker.internal:8085/api/v2/auth/login'
|
||||
```
|
||||
|
||||
`Ok.` means the connection is healthy. `Forbidden` / `403` means qBittorrent WebUI security settings or credentials still need adjustment.
|
||||
|
||||
### Download Client Paths
|
||||
|
||||
If qBittorrent also runs in Docker, make sure qBittorrent and MediaStationGo share the same host directory and use consistent container paths.
|
||||
|
||||
Recommended mapping:
|
||||
|
||||
```text
|
||||
Host: /mnt/nas/downloads
|
||||
MediaStationGo container: /downloads
|
||||
qBittorrent container: /downloads
|
||||
```
|
||||
|
||||
Recommended subscription save root:
|
||||
|
||||
```text
|
||||
/downloads
|
||||
```
|
||||
|
||||
With smart classification enabled, subscription and site-search downloads are saved to category folders such as:
|
||||
|
||||
```text
|
||||
/downloads/动画电影
|
||||
/downloads/华语电影
|
||||
/downloads/外语电影
|
||||
/downloads/国产剧
|
||||
/downloads/国漫
|
||||
/downloads/日番
|
||||
/downloads/欧美剧
|
||||
/downloads/日韩剧
|
||||
/downloads/综艺
|
||||
```
|
||||
With smart classification enabled, downloads are saved to folders such as `/downloads/动画电影`, `/downloads/国产剧`, and `/downloads/综艺`.
|
||||
|
||||
---
|
||||
|
||||
## 🐳 Docker Compose Configuration
|
||||
|
||||
The repository includes a heavily commented `docker-compose.yml`. Common variables:
|
||||
The default repository `docker-compose.yml` is intentionally simple. Most users only need these variables:
|
||||
|
||||
| Variable | Default | Description |
|
||||
| --- | --- | --- |
|
||||
@@ -520,9 +332,7 @@ The repository includes a heavily commented `docker-compose.yml`. Common variabl
|
||||
| `MEDIASTATION_DATA_DIR` | `./data` | Persistent data directory |
|
||||
| `MEDIASTATION_CACHE_DIR` | `./cache` | Image and transcoding cache |
|
||||
| `MEDIASTATION_MEDIA_DIR` | `./media` | Host media library root; on NAS use an absolute path such as `/your-nas/media` |
|
||||
| `MEDIASTATION_MEDIA_CONTAINER_DIR` | `/media` | Container media path; set it equal to `MEDIASTATION_MEDIA_DIR` if you want to enter `/your-nas/...` directly in the web UI |
|
||||
| `MEDIASTATION_DOWNLOAD_DIR` | `./downloads` | Host download target; on NAS use an absolute path such as `/your-nas/downloads` |
|
||||
| `MEDIASTATION_DOWNLOAD_CONTAINER_DIR` | `/downloads` | Container download path; set it equal to `MEDIASTATION_DOWNLOAD_DIR` if your downloader save path should also be `/your-nas/...` |
|
||||
| `PUID` / `PGID` | `1000` / `1000` | Linux/NAS file permission mapping |
|
||||
| `TZ` | `Asia/Shanghai` | Container timezone |
|
||||
|
||||
|
||||
@@ -0,0 +1,187 @@
|
||||
# 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.32
|
||||
#
|
||||
# 路径映射总览:
|
||||
# /data 程序数据目录。保存 SQLite 数据库、JWT secret、系统配置等,必须持久化。
|
||||
# /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
|
||||
|
||||
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 相同,
|
||||
# 添加媒体库时即可直接填写 /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_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}
|
||||
# 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", "wget -qO- http://127.0.0.1:8080/api/health || exit 1"]
|
||||
interval: 30s
|
||||
timeout: 10s
|
||||
retries: 5
|
||||
start_period: 30s
|
||||
@@ -0,0 +1,15 @@
|
||||
# MediaStationGo 新手部署 .env 示例
|
||||
# 只改下面两个路径即可;必须是宿主机/NAS真实路径。
|
||||
|
||||
MEDIASTATION_MEDIA_DIR=/your-nas/media
|
||||
MEDIASTATION_DOWNLOAD_DIR=/your-nas/downloads
|
||||
|
||||
# 可选:固定镜像版本。不写则使用 latest。
|
||||
# MEDIASTATION_IMAGE_TAG=MediaStationGo-v0.0.32
|
||||
|
||||
# 可选:修改访问端口。不写则使用 18080。
|
||||
MEDIASTATION_HTTP_PORT=18080
|
||||
|
||||
TZ=Asia/Shanghai
|
||||
PUID=1000
|
||||
PGID=1000
|
||||
+22
-143
@@ -1,184 +1,63 @@
|
||||
# MediaStationGo 默认 Docker Compose 部署文件。
|
||||
# MediaStationGo 极简 Docker Compose 部署文件
|
||||
#
|
||||
# 快速开始:
|
||||
# 1. 按需修改下方 volumes 的宿主机路径。
|
||||
# 2. docker compose pull
|
||||
# 3. docker compose up -d
|
||||
# 4. 浏览器打开 http://<服务器IP>:18080
|
||||
# 新手只需要改 .env 里的两个路径:
|
||||
# MEDIASTATION_MEDIA_DIR=/你的媒体目录
|
||||
# MEDIASTATION_DOWNLOAD_DIR=/你的下载目录
|
||||
#
|
||||
# 推荐更新命令(会清理本项目旧镜像,避免 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 程序数据目录。保存 SQLite 数据库、JWT secret、系统配置等,必须持久化。
|
||||
# /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 宿主机用户权限,避免下载或缓存文件权限异常。
|
||||
# 启动:docker compose up -d
|
||||
# 访问:http://<服务器IP>:18080
|
||||
# 默认账号:admin / admin123
|
||||
|
||||
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
|
||||
pull_policy: missing
|
||||
|
||||
ports:
|
||||
# 宿主机端口:容器端口。默认访问 http://<服务器IP>:18080
|
||||
- "${MEDIASTATION_HTTP_PORT:-18080}:8080"
|
||||
|
||||
# 让容器可以用 http://host.docker.internal:端口 访问宿主机上的 qBittorrent 等服务。
|
||||
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 相同,
|
||||
# 添加媒体库时即可直接填写 /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}
|
||||
# 媒体库与下载目录:左边是宿主机/NAS真实路径,右边是容器内路径。
|
||||
# Web 页面里添加媒体库请填写 /media/电影、/media/电视剧 等容器路径。
|
||||
- ${MEDIASTATION_MEDIA_DIR:-./media}:/media:ro
|
||||
- ${MEDIASTATION_DOWNLOAD_DIR:-./downloads}:/downloads
|
||||
|
||||
environment:
|
||||
# Web 服务监听配置。容器内固定监听 8080,对外端口由上方 ports 控制。
|
||||
TZ: ${TZ:-Asia/Shanghai}
|
||||
PUID: ${PUID:-1000}
|
||||
PGID: ${PGID:-1000}
|
||||
|
||||
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/国产剧
|
||||
# 路径提示:用于把宿主机路径自动换算成容器路径,避免误填 NAS 原始路径时报不可访问。
|
||||
MEDIASTATION_MEDIA_DIR: ${MEDIASTATION_MEDIA_DIR:-./media}
|
||||
MEDIASTATION_MEDIA_CONTAINER_DIR: ${MEDIASTATION_MEDIA_CONTAINER_DIR:-/media}
|
||||
MEDIASTATION_MEDIA_CONTAINER_DIR: /media
|
||||
MEDIASTATION_DOWNLOAD_DIR: ${MEDIASTATION_DOWNLOAD_DIR:-./downloads}
|
||||
MEDIASTATION_DOWNLOAD_CONTAINER_DIR: ${MEDIASTATION_DOWNLOAD_CONTAINER_DIR:-/downloads}
|
||||
MEDIASTATION_DOWNLOAD_CONTAINER_DIR: /downloads
|
||||
|
||||
# 日志级别:debug / info / warn / error。
|
||||
MEDIASTATION_LOGGING_LEVEL: ${MEDIASTATION_LOGGING_LEVEL:-info}
|
||||
|
||||
# 转码配置。留空表示自动/软件转码;硬件加速见下方 Intel/NVIDIA 示例。
|
||||
# NAS 友好的低负载转码默认值;可在系统设置里继续调整。
|
||||
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", "wget -qO- http://127.0.0.1:8080/api/health || exit 1"]
|
||||
interval: 30s
|
||||
|
||||
Reference in New Issue
Block a user