diff --git a/README.md b/README.md index ac00e804..315af5d3 100644 --- a/README.md +++ b/README.md @@ -41,9 +41,11 @@ docker pull jxxghp/moviepilot:latest ## 配置 -项目的所有配置均通过环境变量进行设置,部分环境建立容器后会自动显示待配置项,如未自动显示配置项则需要手动增加对应环境变量。 +项目的所有配置均通过环境变量进行设置,支持两种配置方式: +1. 在docker环境变量部分进行参数配置,部分环境建立容器后会自动显示待配置项,如未自动显示配置项则需要手动增加对应环境变量。 +2. 下载 [app.env](https://github.com/jxxghp/MoviePilot/raw/main/config/app.env) 文件,修改好配置后放置到配置文件映射路径根目录,配置项可根据说明自主增减。 -配置文件映射路径:`/config` +配置文件映射路径:`/config`,配置项生效优先级:环境变量 > env文件 > 默认值 ### 1. **基础设置** @@ -63,7 +65,7 @@ docker pull jxxghp/moviepilot:latest - **DOWNLOAD_MOVIE_PATH:** 电影下载保存目录,不设置则下载到`DOWNLOAD_PATH` - **DOWNLOAD_TV_PATH:** 电视剧下载保存目录,不设置则下载到`DOWNLOAD_PATH` - **DOWNLOAD_ANIME_PATH:** 动漫下载保存目录,不设置则下载到`DOWNLOAD_PATH` -- **DOWNLOAD_CATEGORY:** 下载二级分类开关,`true`/`false`,默认`false`,开启后会根据配置`category.yaml`自动在下载目录下建立二级目录分类 +- **DOWNLOAD_CATEGORY:** 下载二级分类开关,`true`/`false`,默认`false`,开启后会根据配置 [category.yaml](https://github.com/jxxghp/MoviePilot/raw/main/config/category.yaml) 自动在下载目录下建立二级目录分类 - **DOWNLOAD_SUBTITLE:** 下载站点字幕,`true`/`false`,默认`true` - **REFRESH_MEDIASERVER:** 入库刷新媒体库,`true`/`false`,默认`true` - **SCRAP_METADATA:** 刮削入库的媒体文件,`true`/`false`,默认`true` @@ -73,7 +75,7 @@ docker pull jxxghp/moviepilot:latest - **LIBRARY_MOVIE_NAME:** 电影媒体库目录名,默认`电影` - **LIBRARY_TV_NAME:** 电视剧媒体库目录名,默认`电视剧` - **LIBRARY_ANIME_NAME:** 动漫媒体库目录名,默认`电视剧/动漫` -- **LIBRARY_CATEGORY:** 媒体库二级分类开关,`true`/`false`,默认`false`,开启后会根据配置`category.yaml`自动在媒体库目录下建立二级目录分类 +- **LIBRARY_CATEGORY:** 媒体库二级分类开关,`true`/`false`,默认`false`,开启后会根据配置 [category.yaml](https://github.com/jxxghp/MoviePilot/raw/main/config/category.yaml) 自动在媒体库目录下建立二级目录分类 - **TRANSFER_TYPE:** 转移方式,支持`link`/`copy`/`move`/`softlink` **注意:在`link`和`softlink`转移方式下,转移后的文件会继承源文件的权限掩码,不受`UMASK`影响** - **COOKIECLOUD_HOST:** CookieCloud服务器地址,格式:`http(s)://ip:port`,不配置默认使用内建服务器`https://movie-pilot.org/cookiecloud` - **COOKIECLOUD_KEY:** CookieCloud用户KEY diff --git a/app/core/config.py b/app/core/config.py index 90243258..21c3fe2e 100644 --- a/app/core/config.py +++ b/app/core/config.py @@ -268,8 +268,8 @@ class Settings(BaseSettings): return [Path(path) for path in self.LIBRARY_PATH.split(",")] return [] - def __init__(self): - super().__init__() + def __init__(self, **kwargs): + super().__init__(**kwargs) with self.CONFIG_PATH as p: if not p.exists(): p.mkdir(parents=True, exist_ok=True) @@ -281,6 +281,8 @@ class Settings(BaseSettings): p.mkdir(parents=True, exist_ok=True) class Config: + env_file = "/config/app.env" + env_file_encoding = "utf-8" case_sensitive = True diff --git a/config/app.env b/config/app.env new file mode 100644 index 00000000..47b0f854 --- /dev/null +++ b/config/app.env @@ -0,0 +1,197 @@ +# +# 系统设置 +# +# 时区 +TZ="Asia/Shanghai" +# API监听地址 +HOST="0.0.0.0" +# API监听端口 +PORT=3001 +# 是否调试模式 +DEBUG=false +# 是否开发模式 +DEV=false +# 配置文件目录 +CONFIG_DIR="/config" +# 超级管理员 +SUPERUSER="admin" +# 超级管理员初始密码 +SUPERUSER_PASSWORD="password" +# API密钥,建议更换复杂字符串 +API_TOKEN="moviepilot" +# 网络代理 IP:PORT +PROXY_HOST= +# 大内存模式 +BIG_MEMORY_MODE=false + +# +# 媒体识别&刮削 +# +# 媒体信息搜索来源 themoviedb/douban +SEARCH_SOURCE="themoviedb" +# 刮削入库的媒体文件 true/false +SCRAP_METADATA=true +# 新增已入库媒体是否跟随TMDB信息变化 +SCRAP_FOLLOW_TMDB=true +# 刮削来源 themoviedb/douban +SCRAP_SOURCE="themoviedb" +# TMDB图片地址,无需修改需保留默认值 +TMDB_IMAGE_DOMAIN="image.tmdb.org" +# TMDB API地址,无需修改需保留默认值 +TMDB_API_DOMAIN="api.themoviedb.org" + +# +# 订阅&搜索 +# +# 订阅模式 spider/rss +SUBSCRIBE_MODE="spider" +# RSS订阅模式刷新时间间隔(分钟) +SUBSCRIBE_RSS_INTERVAL=30 +# 订阅搜索开关 +SUBSCRIBE_SEARCH=false +# 交互搜索自动下载用户ID,使用,分割 +AUTO_DOWNLOAD_USER= + +# +# 站点认证 +# +# 用户认证站点ID +AUTH_SITE=iyuu +# 认证站点参数,根据站点不同参数不同 +IYUU_SIGN= + +# +# 消息通知 +# +# 消息通知渠道 telegram/wechat/slack,多个通知渠道用,分隔 +MESSAGER="telegram" +# WeChat企业ID +WECHAT_CORPID= +# WeChat应用Secret +WECHAT_APP_SECRET= +# WeChat应用ID +WECHAT_APP_ID= +# WeChat代理服务器,无需代理需保留默认值 +WECHAT_PROXY="https://qyapi.weixin.qq.com" +# WeChat Token +WECHAT_TOKEN= +# WeChat EncodingAESKey +WECHAT_ENCODING_AESKEY= +# WeChat 管理员 +WECHAT_ADMINS= +# Telegram Bot Token +TELEGRAM_TOKEN= +# Telegram Chat ID +TELEGRAM_CHAT_ID= +# Telegram 用户ID,使用,分隔 +TELEGRAM_USERS= +# Telegram 管理员ID,使用,分隔 +TELEGRAM_ADMINS= +# Slack Bot User OAuth Token +SLACK_OAUTH_TOKEN= +# Slack App-Level Token +SLACK_APP_TOKEN= +# Slack 频道名称 +SLACK_CHANNEL= +# SynologyChat Webhook +SYNOLOGYCHAT_WEBHOOK= +# SynologyChat Token +SYNOLOGYCHAT_TOKEN= + +# +# 下载 +# +# 下载器 qbittorrent/transmission +DOWNLOADER="qbittorrent" +# 下载器监控开关 +DOWNLOADER_MONITOR=true +# Qbittorrent地址,IP:PORT +QB_HOST= +# Qbittorrent用户名 +QB_USER= +# Qbittorrent密码 +QB_PASSWORD= +# Qbittorrent分类自动管理 +QB_CATEGORY=false +# Transmission地址,IP:PORT +TR_HOST= +# Transmission用户名 +TR_USER= +# Transmission密码 +TR_PASSWORD= +# 种子标签 +TORRENT_TAG="MOVIEPILOT" +# 下载保存目录,容器内映射路径需要一致 +DOWNLOAD_PATH="/downloads" +# 电影下载保存目录,容器内映射路径需要一致 +DOWNLOAD_MOVIE_PATH= +# 电视剧下载保存目录,容器内映射路径需要一致 +DOWNLOAD_TV_PATH= +# 动漫下载保存目录,容器内映射路径需要一致 +DOWNLOAD_ANIME_PATH= +# 下载目录二级分类 +DOWNLOAD_CATEGORY=false +# 下载站点字幕 +DOWNLOAD_SUBTITLE=true + +# +# 媒体服务器 +# +# 媒体服务器 emby/jellyfin/plex,多个媒体服务器,分割 +MEDIASERVER="emby" +# 入库刷新媒体库 +REFRESH_MEDIASERVER=true +# 媒体服务器同步间隔(小时) +MEDIASERVER_SYNC_INTERVAL=6 +# 媒体服务器同步黑名单,多个媒体库名称,分割 +MEDIASERVER_SYNC_BLACKLIST= +# EMBY服务器地址,IP:PORT +EMBY_HOST= +# EMBY Api Key +EMBY_API_KEY= +# Jellyfin服务器地址,IP:PORT +JELLYFIN_HOST= +# Jellyfin Api Key +JELLYFIN_API_KEY= +# Plex服务器地址,IP:PORT +PLEX_HOST= +# Plex Token +PLEX_TOKEN= + +# +# 站点 +# +# CookieCloud服务器地址,默认为公共服务器 +COOKIECLOUD_HOST="https://movie-pilot.org/cookiecloud" +# CookieCloud用户KEY +COOKIECLOUD_KEY= +# CookieCloud端对端加密密码 +COOKIECLOUD_PASSWORD= +# CookieCloud同步间隔(分钟) +COOKIECLOUD_INTERVAL=60 * 24 +# OCR服务器地址 +OCR_HOST="https://movie-pilot.org" +# CookieCloud对应的浏览器UA +USER_AGENT="Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/113.0.0.0 Safari/537.36 Edg/113.0.1774.57" + +# +# 媒体库 +# +# 转移方式 link/copy/move/softlink +TRANSFER_TYPE="copy" +# 媒体库目录,多个目录使用,分隔 +LIBRARY_PATH= +# 电影媒体库目录名,默认"电影" +LIBRARY_MOVIE_NAME= +# 电视剧媒体库目录名,默认"电视剧" +LIBRARY_TV_NAME= +# 动漫媒体库目录名,默认"电视剧/动漫" +LIBRARY_ANIME_NAME= +# 二级分类 +LIBRARY_CATEGORY=true +# 电视剧动漫的分类genre_ids +ANIME_GENREIDS=[16] +# 电影重命名格式 +MOVIE_RENAME_FORMAT="{{title}}{% if year %} ({{year}}){% endif %}/{{title}}{% if year %} ({{year}}){% endif %}{% if part %}-{{part}}{% endif %}{% if videoFormat %} - {{videoFormat}}{% endif %}{{fileExt}}" +# 电视剧重命名格式 +TV_RENAME_FORMAT="{{title}}{% if year %} ({{year}}){% endif %}/Season {{season}}/{{title}} - {{season_episode}}{% if part %}-{{part}}{% endif %}{% if episode %} - 第 {{episode}} 集{% endif %}{{fileExt}}"