Files
MyTube/documents/zh/docker-guide.md
2026-01-04 17:08:53 -05:00

7.0 KiB
Raw Permalink Blame History

MyTube Docker 部署指南

本指南提供了使用 Docker 和 Docker Compose 部署  MyTube  的详细步骤。仓库中包含面向 QNAP 的 Compose 文件,请按需调整卷路径,或直接使用下面的通用示例。

[!NOTE] > 多架构支持: 官方镜像支持 amd64 (x86_64) 和 arm64 (Apple Silicon, Raspberry Pi 等) 架构。Docker 会自动为您的系统拉取正确的镜像。

🚀 快速开始 (使用预构建镜像)

运行 MyTube 最简单的方法是使用官方预构建的镜像。

1. 创建项目目录

为您的项目创建一个文件夹并进入该目录:

mkdir mytube-deploy
cd mytube-deploy

2. 创建  docker-compose.yml  文件

在文件夹中创建一个名为  docker-compose.yml  的文件,并粘贴以下内容。

注意: 此版本使用标准相对路径(./data, ./uploads)。若使用仓库内的 docker-compose.yml,请先调整卷路径。

version: "3.8"

services:
  backend:
    image: franklioxygen/mytube:backend-latest
    container_name: mytube-backend
    pull_policy: always
    restart: unless-stopped
    ports:
      - "5551:5551"
    networks:
      - mytube-network
    environment:
      - PORT=5551
    volumes:
      - ./uploads:/app/uploads
      - ./data:/app/data
    # 对于 bridge 网络无法访问互联网的 OpenWrt/iStoreOS 系统,
    # 请取消注释以下行以使用主机网络模式:
    # network_mode: host
    # 然后为前端服务设置 NGINX_BACKEND_URL=http://localhost:5551

  frontend:
    image: franklioxygen/mytube:frontend-latest
    container_name: mytube-frontend
    pull_policy: always
    restart: unless-stopped
    ports:
      - "5556:5556"
    depends_on:
      - backend
    networks:
      - mytube-network
    environment:
      # 内部 Docker 网络 URL浏览器 -> 前端 -> 后端)
      # 在大多数设置中,这些默认值都可以正常工作。
      - VITE_API_URL=/api
      - VITE_BACKEND_URL=
      # 对于主机网络模式(当后端使用 network_mode: host 时),设置:
      # - NGINX_BACKEND_URL=http://localhost:5551
    # 如果后端使用主机网络模式,取消注释以下行:
    # network_mode: host
    # 并删除上面的 ports 映射

networks:
  mytube-network:
    driver: bridge
    # DNS 配置以帮助解决 OpenWrt/iStoreOS 上的网络连接问题
    # 如果您仍然遇到容器无法访问互联网的问题,请尝试:
    # 1. 添加路由器的 DNS 服务器dns: [8.8.8.8, 8.8.4.4]
    # 2. 或者为后端使用主机网络模式(见上文注释)
    driver_opts:
      com.docker.network.bridge.enable_ip_masquerade: "true"
      com.docker.network.bridge.enable_icc: "true"

3. 启动应用

运行以下命令在后台启动服务:

docker-compose up -d

4. 访问 MyTube

容器运行后,请在浏览器中访问应用程序:

  • 前端 UI: http://localhost:5556
  • 后端 API: http://localhost:5551

⚙️ 配置与数据持久化

卷 (数据存储)

上面的  docker-compose.yml  在当前目录中创建了两个文件夹来持久保存数据:

  • ./uploads: 存储下载的视频和缩略图。
  • ./data: 存储 SQLite 数据库和日志。

重要提示:  如果您移动  docker-compose.yml  文件,必须同时移动这些文件夹以保留您的数据。

环境变量

您可以通过添加  .env  文件或修改  docker-compose.yml  中的  environment  部分来自定义部署。

变量 服务 描述 默认值
PORT Backend 后端内部监听端口 5551
VITE_API_URL Frontend API 端点路径 /api
API_HOST Frontend 高级:  强制指定后端 IP (自动检测)
API_PORT Frontend 高级:  强制指定后端端口 5551
NGINX_BACKEND_URL Frontend 高级:  覆盖 Nginx 后端上游 URL http://backend:5551

🛠️ 高级网络 (远程/NAS 部署)

如果您在远程服务器(例如 VPS 或 NAS上部署并从另一台计算机访问它默认的相对 API 路径通常可以正常工作。

但是,如果您遇到连接问题(前端无法连接到后端),您可能需要明确告诉前端 API 的位置。

  1. 在与  docker-compose.yml  相同的目录中创建一个  .env  文件:

    API_HOST=192.168.1.100  # 替换为您的服务器局域网/公网 IP
    API_PORT=5551
    
  2. 重启容器:

    docker-compose down
    docker-compose up -d
    

🏗️ 从源码构建 (可选)

如果您更喜欢自己构建镜像(例如,为了修改代码),请按照以下步骤操作:

  1. 克隆仓库:

    git clone https://github.com/franklioxygen/MyTube.git
    cd MyTube
    
  2. 构建并运行:  您可以使用相同的  docker-compose.yml  结构,但将  image: ...  替换为  build: ...

    修改  docker-compose.yml

    services:
      backend:
        build: ./backend
        # ... 其他设置
      frontend:
        build: ./frontend
        # ... 其他设置
    
  3. 启动:

    docker-compose up -d --build
    

故障排除 (Troubleshooting)

1. "Network Error" 或 API 连接失败

  • 原因:  浏览器无法访问后端 API。
  • 解决方法:  确保端口  5551  在您的防火墙上已打开。如果在远程服务器上运行,请尝试按照“高级网络”部分的说明在  .env  文件中设置  API_HOST

2. ./uploads  权限被拒绝 (Permission Denied)

  • 原因: Docker 容器用户没有主机目录的写入权限。
  • 解决方法:  调整主机上的权限:
    chmod -R 777 ./uploads ./data
    

3. 容器名称冲突 (Container Name Conflicts)

  • 原因:  您有另一个 MyTube 实例正在运行,或者旧容器未被删除。
  • 解决方法:  在启动前删除旧容器:
    docker rm -f mytube-backend mytube-frontend
    docker-compose up -d
    

4. 连接被拒绝 / 无法连接互联网 (OpenWrt/iStoreOS)

  • 原因: 某些路由器系统上的 Docker bridge 网络兼容性问题。
  • 解决方法: 我们已在默认网络配置中添加了 driver_opts 以解决此问题。如果问题仍然存在:
    1. 编辑 docker-compose.yml
    2. backendfrontend 取消注释 network_mode: host
    3. 删除(或注释掉)两个服务的 portsnetworks 部分。
    4. frontend 环境变量中设置 NGINX_BACKEND_URL=http://localhost:5551
    5. 重启容器:docker-compose up -d

或者直接使用仓库提供的 docker-compose.host-network.yml

docker-compose -f docker-compose.host-network.yml up -d