mirror of
https://github.com/jxxghp/MoviePilot.git
synced 2026-05-06 20:42:43 +08:00
4.6 KiB
4.6 KiB
Docker 构建和启动逻辑优化
优化概述
本次优化主要解决了以下问题:
- 统一使用虚拟pip环境:避免pip包在多个地方存在
- 优化依赖管理:使用pip-tools进行依赖锁定
- 减少重复安装:在构建时安装依赖,运行时只更新变化的部分
- 提升构建速度:优化.dockerignore文件
- 简化部署:提供docker-compose配置
主要改进
1. 虚拟环境管理
- 虚拟环境路径:
/opt/venv - 环境变量:
VENV_PATH=/opt/venv - PATH设置:自动将虚拟环境bin目录添加到PATH
2. 依赖管理优化
构建阶段
# 创建虚拟环境
RUN python3 -m venv ${VENV_PATH} \
&& ${VENV_PATH}/bin/pip install --upgrade pip \
&& ${VENV_PATH}/bin/pip install Cython pip-tools
# 安装依赖到虚拟环境
RUN ${VENV_PATH}/bin/pip-compile requirements.in \
&& ${VENV_PATH}/bin/pip install -r requirements.txt
运行时更新
- 只在依赖文件发生变化时才重新安装
- 自动备份和恢复机制
- 使用虚拟环境中的pip进行安装
3. 文件结构优化
.dockerignore 优化
排除不必要的文件,减少构建上下文大小:
- 开发文件(.pyc, pycache, .pytest_cache等)
- 文档文件
- IDE配置文件
- 临时文件
- 测试文件
requirements.txt 优化
- 使用具体版本号锁定依赖
- 包含平台特定依赖
- 自动生成注释说明
4. 启动脚本优化
entrypoint.sh 改进
- 设置虚拟环境PATH
- 使用虚拟环境中的Python启动应用
- 正确设置虚拟环境权限
update.sh 改进
- 使用虚拟环境中的pip
- 智能依赖更新:只在变化时更新
- 备份和恢复机制
使用方法
1. 简单部署(推荐)
使用SQLite数据库,适合个人使用:
# 创建配置目录
mkdir -p config
# 启动服务
docker-compose -f docker-compose.simple.yml up -d
2. 完整部署
使用PostgreSQL和Redis,适合生产环境:
# 创建配置目录
mkdir -p config
# 启动所有服务
docker-compose up -d
3. 自定义配置
创建 config/app.env 文件:
# 代理设置
PIP_PROXY='https://pypi.tuna.tsinghua.edu.cn/simple'
GITHUB_PROXY='https://ghproxy.com/'
# 数据库设置
DB_TYPE='postgresql'
DB_POSTGRESQL_HOST='postgres'
DB_POSTGRESQL_DATABASE='moviepilot'
DB_POSTGRESQL_USERNAME='moviepilot'
DB_POSTGRESQL_PASSWORD='moviepilot'
# SSL设置
ENABLE_SSL='true'
SSL_DOMAIN='your.domain.com'
环境变量说明
基础配置
PUID: 用户ID(默认:1000)PGID: 组ID(默认:1000)UMASK: 文件权限掩码(默认:022)CONFIG_DIR: 配置目录(默认:/config)
代理设置
PIP_PROXY: pip代理地址GITHUB_PROXY: GitHub代理地址PROXY_HOST: 全局代理地址GITHUB_TOKEN: GitHub访问令牌
数据库设置
DB_TYPE: 数据库类型(sqlite/postgresql)DB_POSTGRESQL_HOST: PostgreSQL主机DB_POSTGRESQL_PORT: PostgreSQL端口DB_POSTGRESQL_DATABASE: 数据库名DB_POSTGRESQL_USERNAME: 用户名DB_POSTGRESQL_PASSWORD: 密码
SSL设置
ENABLE_SSL: 是否启用SSLSSL_DOMAIN: SSL域名
更新设置
MOVIEPILOT_AUTO_UPDATE: 自动更新模式(false/release/dev)
性能优化
构建优化
- 多阶段构建:减少最终镜像大小
- 依赖缓存:利用Docker层缓存
- 最小化上下文:优化.dockerignore
运行时优化
- 虚拟环境:隔离依赖,避免冲突
- 智能更新:只在必要时更新依赖
- 健康检查:确保服务正常运行
故障排除
常见问题
-
权限问题
# 修改目录权限 sudo chown -R 1000:1000 config/ -
依赖安装失败
# 检查网络连接 docker exec moviepilot curl -I https://pypi.org # 查看日志 docker logs moviepilot -
虚拟环境问题
# 进入容器检查虚拟环境 docker exec -it moviepilot bash ls -la /opt/venv/bin/
日志查看
# 查看应用日志
docker logs moviepilot
# 实时查看日志
docker logs -f moviepilot
# 查看特定时间段的日志
docker logs --since="2024-01-01T00:00:00" moviepilot
更新和维护
更新依赖
# 重新构建镜像
docker-compose build --no-cache
# 重启服务
docker-compose up -d
备份配置
# 备份配置目录
tar -czf moviepilot_config_backup.tar.gz config/
清理资源
# 清理未使用的镜像
docker image prune -f
# 清理未使用的卷
docker volume prune -f
# 清理未使用的网络
docker network prune -f