Merge pull request #61 from AdrienPoupa/feat/bazarr

feat: add Bazarr
This commit is contained in:
Adrien Poupa 2024-03-09 15:45:11 -05:00 committed by GitHub
commit e16c82491e
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
6 changed files with 99 additions and 46 deletions

View File

@ -28,6 +28,7 @@ SONARR_API_KEY=
RADARR_API_KEY= RADARR_API_KEY=
LIDARR_API_KEY= LIDARR_API_KEY=
PROWLARR_API_KEY= PROWLARR_API_KEY=
BAZARR_API_KEY=
JELLYFIN_API_KEY= JELLYFIN_API_KEY=
JELLYSEERR_API_KEY= JELLYSEERR_API_KEY=
SABNZBD_API_KEY= SABNZBD_API_KEY=

1
.gitignore vendored
View File

@ -9,6 +9,7 @@ docker-compose.override.yml
/radarr /radarr
/prowlarr /prowlarr
/lidarr /lidarr
/bazarr
/qbittorrent /qbittorrent
/pia /pia
/pia-shared /pia-shared

View File

@ -56,9 +56,10 @@ I am running it in Ubuntu Server 22.04; I also tested this setup on a [Synology
## Applications ## Applications
| **Application** | **Description** | **Image** | **URL** | | **Application** | **Description** | **Image** | **URL** |
|-------------------------------------------------------------------|------------------------------------------------------------------------------------------------------------------------------------------------------|------------------------------------------------------------------------------------------|--------------| |--------------------------------------------------------------------|------------------------------------------------------------------------------------------------------------------------------------------------------|------------------------------------------------------------------------------------------|--------------|
| [Sonarr](https://sonarr.tv) | PVR for newsgroup and bittorrent users | [linuxserver/sonarr](https://hub.docker.com/r/linuxserver/sonarr) | /sonarr | | [Sonarr](https://sonarr.tv) | PVR for newsgroup and bittorrent users | [linuxserver/sonarr](https://hub.docker.com/r/linuxserver/sonarr) | /sonarr |
| [Radarr](https://radarr.video) | Movie collection manager for Usenet and BitTorrent users | [linuxserver/radarr](https://hub.docker.com/r/linuxserver/radarr) | /radarr | | [Radarr](https://radarr.video) | Movie collection manager for Usenet and BitTorrent users | [linuxserver/radarr](https://hub.docker.com/r/linuxserver/radarr) | /radarr |
| [Bazarr](https://www.bazarr.media/) | Companion application to Sonarr and Radarr that manages and downloads subtitles | [linuxserver/bazarr](https://hub.docker.com/r/linuxserver/bazarr) | /bazarr |
| [Prowlarr](https://github.com/Prowlarr/Prowlarr) | Indexer aggregator for Sonarr and Radarr | [linuxserver/prowlarr:latest](https://hub.docker.com/r/linuxserver/prowlarr) | /prowlarr | | [Prowlarr](https://github.com/Prowlarr/Prowlarr) | Indexer aggregator for Sonarr and Radarr | [linuxserver/prowlarr:latest](https://hub.docker.com/r/linuxserver/prowlarr) | /prowlarr |
| [PIA WireGuard VPN](https://github.com/thrnz/docker-wireguard-pia) | Encapsulate qBittorrent traffic in [PIA](https://www.privateinternetaccess.com/) using [WireGuard](https://www.wireguard.com/) with port forwarding. | [thrnz/docker-wireguard-pia](https://hub.docker.com/r/thrnz/docker-wireguard-pia) | | | [PIA WireGuard VPN](https://github.com/thrnz/docker-wireguard-pia) | Encapsulate qBittorrent traffic in [PIA](https://www.privateinternetaccess.com/) using [WireGuard](https://www.wireguard.com/) with port forwarding. | [thrnz/docker-wireguard-pia](https://hub.docker.com/r/thrnz/docker-wireguard-pia) | |
| [qBittorrent](https://www.qbittorrent.org) | Bittorrent client with a complete web UI<br/>Uses VPN network<br/>Using Libtorrent 1.x | [linuxserver/qbittorrent:libtorrentv1](https://hub.docker.com/r/linuxserver/qbittorrent) | /qbittorrent | | [qBittorrent](https://www.qbittorrent.org) | Bittorrent client with a complete web UI<br/>Uses VPN network<br/>Using Libtorrent 1.x | [linuxserver/qbittorrent:libtorrentv1](https://hub.docker.com/r/linuxserver/qbittorrent) | /qbittorrent |
@ -122,6 +123,7 @@ If you want to show Jellyfin information in the homepage, create it in Jellyfin
| `RADARR_API_KEY` | Radarr API key to show information in the homepage | | | `RADARR_API_KEY` | Radarr API key to show information in the homepage | |
| `LIDARR_API_KEY` | Lidarr API key to show information in the homepage | | | `LIDARR_API_KEY` | Lidarr API key to show information in the homepage | |
| `PROWLARR_API_KEY` | Prowlarr API key to show information in the homepage | | | `PROWLARR_API_KEY` | Prowlarr API key to show information in the homepage | |
| `BAZARR_API_KEY` | Bazarr API key to show information in the homepage | |
| `JELLYFIN_API_KEY` | Jellyfin API key to show information in the homepage | | | `JELLYFIN_API_KEY` | Jellyfin API key to show information in the homepage | |
| `JELLYSEERR_API_KEY` | Jellyseer API key to show information in the homepage | | | `JELLYSEERR_API_KEY` | Jellyseer API key to show information in the homepage | |
| `SABNZBD_API_KEY` | Sabnzbd API key to show information in the homepage | | | `SABNZBD_API_KEY` | Sabnzbd API key to show information in the homepage | |

View File

@ -131,6 +131,36 @@ services:
- homepage.widget.key=${LIDARR_API_KEY} - homepage.widget.key=${LIDARR_API_KEY}
profiles: profiles:
- lidarr - lidarr
bazarr:
image: lscr.io/linuxserver/bazarr
container_name: bazarr
environment:
- PUID=${USER_ID}
- PGID=${GROUP_ID}
- TZ=${TIMEZONE}
volumes:
- ./bazarr/config:/config
- ${DATA_ROOT}:/data
restart: always
healthcheck:
test: [ "CMD", "curl", "--fail", "http://127.0.0.1:6767/bazarr/ping" ]
interval: 5s
retries: 10
labels:
- traefik.enable=true
- traefik.http.routers.bazarr.rule=(Host(`${HOSTNAME}`) && PathPrefix(`/bazarr`))
- traefik.http.routers.bazarr.tls=true
- traefik.http.routers.bazarr.tls.certresolver=myresolver
- traefik.http.services.bazarr.loadbalancer.server.port=6767
- homepage.group=Download
- homepage.name=Bazarr
- homepage.icon=bazarr.png
- homepage.href=/bazarr
- homepage.description=Subtitles management
- homepage.weight=4
- homepage.widget.type=bazarr
- homepage.widget.url=http://bazarr:6767/bazarr
- homepage.widget.key=${BAZARR_API_KEY}
jellyseerr: jellyseerr:
image: fallenbagel/jellyseerr:latest image: fallenbagel/jellyseerr:latest
container_name: jellyseerr container_name: jellyseerr
@ -225,7 +255,7 @@ services:
- homepage.icon=prowlarr.png - homepage.icon=prowlarr.png
- homepage.href=/prowlarr - homepage.href=/prowlarr
- homepage.description=Indexers management - homepage.description=Indexers management
- homepage.weight=4 - homepage.weight=1
- homepage.widget.type=prowlarr - homepage.widget.type=prowlarr
- homepage.widget.url=http://prowlarr:9696/prowlarr - homepage.widget.url=http://prowlarr:9696/prowlarr
- homepage.widget.key=${PROWLARR_API_KEY} - homepage.widget.key=${PROWLARR_API_KEY}
@ -287,7 +317,7 @@ services:
- homepage.icon=qbittorrent.png - homepage.icon=qbittorrent.png
- homepage.href=/qbittorrent - homepage.href=/qbittorrent
- homepage.description=Bittorrent client - homepage.description=Bittorrent client
- homepage.weight=5 - homepage.weight=2
- homepage.widget.type=qbittorrent - homepage.widget.type=qbittorrent
- homepage.widget.url=http://vpn:8080 - homepage.widget.url=http://vpn:8080
- homepage.widget.username=${QBITTORRENT_USERNAME} - homepage.widget.username=${QBITTORRENT_USERNAME}
@ -360,7 +390,7 @@ services:
- homepage.icon=sabnzbd.png - homepage.icon=sabnzbd.png
- homepage.href=/sabnzbd - homepage.href=/sabnzbd
- homepage.description=Usenet - homepage.description=Usenet
- homepage.weight=6 - homepage.weight=3
- homepage.widget.type=sabnzbd - homepage.widget.type=sabnzbd
- homepage.widget.url=http://sabnzbd:8080/sabnzbd - homepage.widget.url=http://sabnzbd:8080/sabnzbd
- homepage.widget.key=${SABNZBD_API_KEY} - homepage.widget.key=${SABNZBD_API_KEY}

View File

@ -30,7 +30,7 @@ services:
- traefik.http.middlewares.joplin-stripprefix.stripPrefix.prefixes=/joplin - traefik.http.middlewares.joplin-stripprefix.stripPrefix.prefixes=/joplin
- traefik.http.services.joplin.loadbalancer.server.port=22300 - traefik.http.services.joplin.loadbalancer.server.port=22300
- homepage.group=Apps - homepage.group=Apps
- homepage.name=joplin - homepage.name=Joplin
- homepage.icon=joplin.png - homepage.icon=joplin.png
- homepage.href=/joplin - homepage.href=/joplin
- homepage.description=Note-taking application - homepage.description=Note-taking application

View File

@ -2,30 +2,49 @@
# See https://stackoverflow.com/a/44864004 for the sed GNU/BSD compatible hack # See https://stackoverflow.com/a/44864004 for the sed GNU/BSD compatible hack
function update_config { function update_arr_config {
echo "Updating ${1^} configuration..." echo "Updating ${container^} configuration..."
until [ -f ./$1/config.xml ] until [ -f ./"$container"/config.xml ]; do sleep 1; done
do sed -i.bak "s/<UrlBase><\/UrlBase>/<UrlBase>\/$1<\/UrlBase>/" ./"$container"/config.xml && rm ./"$container"/config.xml.bak
sleep 5 sed -i.bak 's/^'"${container^^}"'_API_KEY=.*/'"${1^^}"'_API_KEY='"$(sed -n 's/.*<ApiKey>\(.*\)<\/ApiKey>.*/\1/p' ./"$container"/config.xml)"'/' .env && rm .env.bak
done echo "Update of ${container^} configuration complete."
sed -i.bak "s/<UrlBase><\/UrlBase>/<UrlBase>\/$1<\/UrlBase>/" ./$1/config.xml && rm ./$1/config.xml.bak echo "Restarting ${container^}..."
sed -i.bak 's/^'"${1^^}"'_API_KEY=.*/'"${1^^}"'_API_KEY='"$(sed -n 's/.*<ApiKey>\(.*\)<\/ApiKey>.*/\1/p' ./$1/config.xml)"'/' .env && rm .env.bak docker compose restart "$container"
echo "Update of ${1^} configuration complete." }
echo "Restarting ${1^}..."
docker compose restart $1 function update_jellyfin_config {
echo "Updating ${container^} configuration..."
until [ -f ./"$container"/network.xml ]; do sleep 1; done
sed -i.bak "s/<BaseUrl \/>/<BaseUrl>\/$container<\/BaseUrl>/" ./"$container"/network.xml && rm ./"$container"/network.xml.bak
echo "Update of ${container^} configuration complete."
echo "Restarting ${container^}..."
docker compose restart "$container"
}
function update_bazarr_config {
echo "Updating ${container^} configuration..."
until [ -f ./"$container"/config/config/config.yaml ]; do sleep 1; done
sed -i.bak "s/base_url: ''/base_url: '\/$container'/" ./"$container"/config/config/config.yaml && rm ./"$container"/config/config/config.yaml.bak
sed -i.bak "s/use_radarr: false/use_radarr: true/" ./"$container"/config/config/config.yaml && rm ./"$container"/config/config/config.yaml.bak
sed -i.bak "s/use_sonarr: false/use_sonarr: true/" ./"$container"/config/config/config.yaml && rm ./"$container"/config/config/config.yaml.bak
until [ -f ./sonarr/config.xml ]; do sleep 1; done
SONARR_API_KEY=$(sed -n 's/.*<ApiKey>\(.*\)<\/ApiKey>.*/\1/p' ./sonarr/config.xml)
sed -i.bak "/sonarr:/,/^radarr:/ { s/apikey: .*/apikey: $SONARR_API_KEY/; s/base_url: .*/base_url: \/sonarr/; s/ip: .*/ip: sonarr/ }" "$container"/config/config/config.yaml && rm ./"$container"/config/config/config.yaml.bak
until [ -f ./radarr/config.xml ]; do sleep 1; done
RADARR_API_KEY=$(sed -n 's/.*<ApiKey>\(.*\)<\/ApiKey>.*/\1/p' ./radarr/config.xml)
sed -i.bak "/radarr:/,/^sonarr:/ { s/apikey: .*/apikey: $RADARR_API_KEY/; s/base_url: .*/base_url: \/radarr/; s/ip: .*/ip: radarr/ }" "$container"/config/config/config.yaml && rm ./"$container"/config/config/config.yaml.bak
sed -i.bak 's/^'"${container^^}"'_API_KEY=.*/'"${container^^}"'_API_KEY='"$(sed -n 's/.*apikey: \(.*\)*/\1/p' ./"$container"/config/config/config.yaml | head -n 1)"'/' .env && rm .env.bak
echo "Update of ${container^} configuration complete."
echo "Restarting ${container^}..."
docker compose restart "$container"
} }
for container in $(docker ps --format '{{.Names}}'); do for container in $(docker ps --format '{{.Names}}'); do
if [[ $container =~ ^(radarr|sonarr|lidarr|prowlarr)$ ]]; then if [[ "$container" =~ ^(radarr|sonarr|lidarr|prowlarr)$ ]]; then
update_config $container update_arr_config "$container"
elif [[ $container =~ ^(jellyfin)$ ]]; then elif [[ "$container" =~ ^(jellyfin)$ ]]; then
echo "Updating ${container^} configuration..." update_jellyfin_config "$container"
until [ -f ./$container/network.xml ]; do elif [[ "$container" =~ ^(bazarr)$ ]]; then
sleep 5 update_bazarr_config "$container"
done
sed -i.bak "s/<BaseUrl \/>/<BaseUrl>\/$container<\/BaseUrl>/" ./$container/network.xml && rm ./$container/network.xml.bak
echo "Update of ${container^} configuration complete."
echo "Restarting ${container^}..."
docker compose restart $container
fi fi
done done