From 35123ebabe03508a8eb0c3e9e7b6572bfb492057 Mon Sep 17 00:00:00 2001 From: Viren070 Date: Tue, 4 Mar 2025 01:16:37 +0000 Subject: [PATCH] update --- .env | 640 ++++++++++++++--- README.md | 7 +- compose.yaml | 1868 ++++++++++++++++++++++++++++++++------------------ install.sh | 6 + 4 files changed, 1765 insertions(+), 756 deletions(-) create mode 100644 install.sh diff --git a/.env b/.env index 2c4352e..94c1b8b 100644 --- a/.env +++ b/.env @@ -1,71 +1,423 @@ # This file is used to store all the environment variables that are used in the compose.yaml file. # This file should be in the same directory as the compose.yaml file. -# -# SECRET_KEY values should be generated using one of the following commands by running them in your terminal. -# -# Windows: [System.Guid]::NewGuid().ToString("N").Substring(0, 32) -# Linux/MacOS: openssl rand -hex 16 -# -# Your JACKETT_API_KEY and PROWLARR_API_KEY should be left blank on the first run. -# Once you have started the containers, you can find the API keys in the respective web UIs. -# IMPORTANT: Ensure you add authentication to prowlarr/jackett as they will be public. You can set a username and password in the web UI. -# -# Your PASSWORD values should be a randomly generated password. -# + # Your HOSTNAME values should be the domain name that you are using to access the services. # e.g. AIOSTREAMS_HOSTNAME=aiostreams.example.com # -# POSTGRES credentials can be left as is, as they are only accessed internally. +# Once you have filled in the values, you will need to use the --profile flag when running the compose file. +# If you only wanted to run the stremio profile, you would run the following command: +# +# sudo docker compose --profile stremio up -d +# +# (The services in the default profile are always included) +# +# If you wanted to also start the seanime profile, you would run the following command: +# +# sudo docker compose --profile stremio --profile seanime up -d +# +# +# If you wanted to start all the profiles, you would run the following command: +# +# sudo docker compose --profile all up -d +# Similarly, if you wanted to stop the services, you would also need to use the --profile flag, otherwise, only the default profile services would be stopped. +# e.g. sudo docker compose --profile stremio down + + +# ========================================================= +# DEFAULT PROFILE (REQUIRED) +# ========================================================= +# This profile is used to set the environment variables for the services in the default profile. +# It includes things like, traefik, dozzle, watchtower, uptime kuma + + +# --------------------------------------------------------- +# TRAEFIK +# --------------------------------------------------------- +# Traefik is a reverse proxy that is used to route traffic to the correct services. +# This is the most important service, as it is the entry point for all the other services. +# +# I will once again remind you to ensure that you set up DNS records for all the domain names that you are using. +# You can also use a wildcard DNS record to route all subdomains to your server. +# +# Also make sure that both port 80 and 443 are open on your server. +# --------------------------------------------------------- +# This is the email that will be used to register with Let's Encrypt for SSL certificates. +LETSENCRYPT_EMAIL= +# --------------------------------------------------------- + + +# --------------------------------------------------------- +# DOZZLE +# --------------------------------------------------------- +# Dozzle is a log viewer for Docker. It is used to view the logs of the containers. +# This will be helpful for debugging purposes. +# You will be able to access the logs at https://${DOZZLE_HOSTNAME} +# +# The DOZZLE_HASHED_PASSWORD must be a bcrypt hash of the password you want to use. +# You can generate a bcrypt hash by running the following command in your terminal, replacing with your desired password. +# (removing the < and > as well): +# +# htpasswd -niBb user | cut -d ":" -f 2 | sed 's/\$/\$\$/g' +# +# If you get an error about htpasswd not being found, you can install apache2-utils, use this command. +# sudo apt-get install apache2-utils +# +# Then, rerun the htpasswd command above. +# +# Note that this command will output the hash with any $ characters already escaped, so you can copy and paste it directly into the .env file. +# --------------------------------------------------------- +DOZZLE_USERNAME= +DOZZLE_HASHED_PASSWORD= +# e.g. dozzle.example.com +DOZZLE_HOSTNAME= +# --------------------------------------------------------- + + +# --------------------------------------------------------- +# WATCHTOWER +# --------------------------------------------------------- +# The AUTO_UPDATE_SCHEDULE is a cron expression that is used to schedule the auto update of the containers. +# It is different from a normal cron expression, as it has an additional field at the beginning for seconds. +# See @url:https://pkg.go.dev/github.com/robfig/cron@v1.2.0#hdr-CRON_Expression_Format +# +# The AUTO_UPDATE_NOTIFICATION_URL is the URL that will be used to send notifications about the auto update. +# You can find more information about the available services at @url:https://containrrr.dev/shoutrrr/v0.8/services/overview/ +# Make sure the format of the AUTO_UPDATE_NOTIFICATION_URL is correct. + +# e.g. For discordd, the format is discord://token@id +# Discord webhook URLs are in the format https://discord.com/api/webhooks// +# So the URL would be discord://@ +# --------------------------------------------------------- +AUTO_UPDATE_SCHEDULE=0 0 */8 * * * # This will run the auto update every 8 hours +AUTO_UPDATE_NOTIFICATION_URL= + + +# --------------------------------------------------------- +# UPTIME KUMA +# --------------------------------------------------------- +# Uptime Kuma is a self-hosted monitoring tool that provides uptime monitoring for your services. +# You will be able to access the dashboard at https://${UPTIME_KUMA_HOSTNAME} +# +# I have configured uptime kuma with 2 domains, one for the main dashboard and one for the status page. +# If you set up a status page on uptime kuma, you can add the STATUS_PAGE_HOSTNAME as the domain name. +# This will allow you to directly access the status page at https://${STATUS_PAGE_HOSTNAME} +# rather than https://${UPTIME_KUMA_HOSTNAME}/status/ +# --------------------------------------------------------- +# e.g. kuma.example.com +UPTIME_KUMA_HOSTNAME= +# e.g. status.example.com (when creating a status page on kuma, you can add this hostname as the domain name) +STATUS_PAGE_HOSTNAME= + + +# --------------------------------------------------------- +# FLAME and/or HONEY - START PAGE +# --------------------------------------------------------- +# The start page is a custom start page that you can use to access all your services. +# You can choose to use either Flame or Honey or both. +# If you choose to only use one, you must remove the other from the compose.yaml file. +# Honey: https://github.com/dani3l0/honey (showcase: https://honeyy.vercel.app/) +# Flame: https://github.com/pawelmalak/flame +# +# Flame will come preconfigured with all the services that are available in the compose.yaml file. +# Honey looks far better and is more compact, but you will need to manually add the services to it. +# +# Luckily, I have provided my configuration for Honey, so you can use that. +# If you followed the instructions in the README, you should have a file called config.json in the ./data/honey directory. +# You will simply need to adjust the URLs to match your domain names and remove any services you don't have. +# You can also reorder the services list as you like. +# +# You can access the start page at https://${FLAME_HOSTNAME} or https://${HONEY_HOSTNAME} +# +# I've personally set HONEY_HOSTNAME to my main domain name, so that I can access the start page at the root of my domain. +# e.g. if my domain was example.com, I would access the start page at https://example.com +# This does require a separate DNS record, so make sure you set that up. +# --------------------------------------------------------- +FLAME_HOSTNAME= +FLAME_PASSWORD= + +HONEY_HOSTNAME= + +# --------------------------------------------------------- +# DASH DOT - DASHBOARD +# --------------------------------------------------------- +# Dash Dot is a dashboard that you can use to monitor your VPS. It provides information about the CPU, RAM, Disk, and Network usage. +# You will be able to access the dashboard at https://${DASHDOT_HOSTNAME} +# --------------------------------------------------------- +# e.g. dashdot.example.com +DASHDOT_HOSTNAME= +# This is the title of the page that shows up in the browser tab +DASHDOT_PAGE_TITLE= +# Whether you want your domain name to show up in the dashboard +# e.g. if your domain was dashdot.example.com, it would show example.com in the dashboard +DASHDOT_SHOW_HOST= +# Whether you want to use a custom host for the dashboard, instaed of the default above. Requires DASHDOT_SHOW_HOST to be set to true +DASHDOT_CUSTOM_HOST= + + +# ========================================================= +# ADDITIONAL PROFILES (OPTIONAL) +# ========================================================= +# These environment variables are used to set the environment variables for the services in the additional profiles. +# The available profiles are: +# - stremio +# - plausible +# - seanime +# - searxng +# - debrid_media_server +# - all +# +# The 'all' profile includes all the services from the default profile and all the additional profiles. +# Note: the 'debrid_media_server' profile includes services that are mostly commented out in the compose.yaml file. +# This is because there may be issues with my current setup. Check the compose.yaml file for more information. +# ======================================================== + + +# ========================================================= +# STREMIO PROFILE +# ========================================================= +# These environment variables are used to set the environment variables for the services in the stremio profile. +# The stremio profile includes all the services that are required to run a Stremio setup. + + + +# --------------------------------------------------------- +# EXTERNAL SERVICES +# --------------------------------------------------------- +# +# Get your API key and Access token from https://www.themoviedb.org/settings/api +# Needed by: AIOStreams, MediaFusion, TMDB Addon +TMDB_API_KEY= +# Needed by: Jackettio +TMDB_ACCESS_TOKEN= +# --------------------------------------------------------- + + +# --------------------------------------------------------- +# AIOSTREAMS +# --------------------------------------------------------- +# Profiles: all, stremio +# +# To generate the AIOSTREAMS_SECRET_KEY, run the following command in your terminal: +# openssl rand -hex 32 +# +# The AIOSTREAMS_API_KEY is a random password that you can set to whatever you like. It protects your AIOStreams instance from unauthorized access +# by requiring an API key to configure and use the addon. +# +# --------------------------------------------------------- AIOSTREAMS_HOSTNAME= AIOSTREAMS_API_KEY= AIOSTREAMS_SECRET_KEY= +# This environment variable is used to give AIOStreams access to the a proxy to make requests to addons through. +# This is only needed when your VPS is blocked by Torrentio +# You can run +# curl -s -w "\n%{http_code}\n" "https://torrentio.strem.fun/manifest.json" +# to check if your VPS is blocked by Torrentio. +# If you get a 403 error, you will need to set this environment variable. +# Otherwise, you can get rid of it, or set it to an empty string. +AIOSTREAMS_ADDON_PROXY=http://warp:1080 + +# The following environment variables allow AIOStreams to use our self hosted addons instead of the public ones. +# If you are not hosting the other addons, you must remove these environment variables. +AIOSTREAMS_COMET_URL=http://comet:2020/ +# We have to force a hostname for Comet, as the internal URL that is returned by Comet is not accessible publicly for streaming. +AIOSTREAMS_FORCE_COMET_HOSTNAME=${COMET_HOSTNAME:-} +AIOSTREAMS_COMET_INDEXERS=${COMET_INDEXERS:-} +AIOSTREAMS_MEDIAFUSION_URL=http://mediafusion:8000/ +AIOSTREAMS_JACKETTIO_URL=http://jackettio:4000/ +# replace with the indexers you want to use for the default Jackettio configuration e.g. ["therarbg", "thepiratebay"] +AIOSTREAMS_JACKETT_INDEXERS=[] +AIOSTREAMS_STREMIO_JACKETT_URL=http://stremio-jackett:3000/ +AIOSTREAMS_JACKETT_API_KEY=${JACKETT_API_KEY:-} +AIOSTREAMS_EASYNEWS_PLUS_URL=http://easynews-plus:1337/ +# --------------------------------------------------------- + + + +# --------------------------------------------------------- +# AIOSTREMIO +# --------------------------------------------------------- +# Profiles: all, stremio +# +# The AIOSTREMIO_ADMIN_USERNAME and AIOSTREMIO_ADMIN_PASSWORD are the credentials that you will use to access the AIOStremio dashboard. +# +# The main configuration for AIOStremio is stored within ./data/aiostremio/config.json +# Without this file, AIOStremio will be stuck in a crash loop, so ensure you create this file +# You can use the template provided in the AIOStremio repository: +# https://github.com/Viren070/AIOStremio/blob/main/config.json.example +# +# The DEBRID_API_KEY is the API key for the debrid service you want to use by default. +# You can also set addon specific debrid API keys through the config.json file. +# --------------------------------------------------------- +AIOSTREMIO_HOSTNAME= +AIOSTREMIO_ADMIN_USERNAME= +AIOSTREMIO_ADMIN_PASSWORD= +DEBRID_API_KEY= +# --------------------------------------------------------- + + +# --------------------------------------------------------- +# COMET +# --------------------------------------------------------- +# Profiles: all, stremio +# +# The COMET_ADMIN_PASSWORD is a random password that you can set to whatever you like. It allows you to access the dashboard of Comet, which currently +# only shows active connections to the proxy service of Comet. +# +# The COMET_INDEXERS is a list of the indexers that you want to use with Comet. +# +# We can either use Prowlarr or Jackett as the indexer. If you would like to use Jackett instead, +# Set COMET_INDEXER_TYPE=jackett and COMET_INDEXER_URL=http://jackett:9117 and COMET_INDEXER_API_KEY=${JACKETT_API_KEY:-} +# +# For COMET_INDEXERS, you can add the names of the indexers that you want to use. This should just be the names of the indexers as you see them on the dashboards +# of Prowlarr or Jackett. +# --------------------------------------------------------- COMET_ADMIN_PASSWORD= COMET_HOSTNAME= -COMET_INDEXERS=[] # e.g ["therarbg", "thepiratebay"], these should match the names of the indexers in Prowlarr (default) or Jackett +COMET_INDEXER_TYPE=prowlarr # or jackett +COMET_INDEXER_URL=http://prowlarr:9696 # or http://jackett:9117 +COMET_INDEXER_API_KEY=${PROWLARR_API_KEY:-} # or ${JACKETT_API_KEY:-} +COMET_INDEXERS=[] # e.g ["therarbg", "thepiratebay"] +# --------------------------------------------------------- + +# --------------------------------------------------------- +# MEDIAFLOW PROXY +# --------------------------------------------------------- +# Profiles: all, stremio +# +# The MEDIAFLOW_API_PASSWORD is a random password that you can set to whatever you like. It is used to protect the MediaFlow Proxy service. +# --------------------------------------------------------- MEDIAFLOW_API_PASSWORD= MEDIAFLOW_HOSTNAME= +# --------------------------------------------------------- + +# --------------------------------------------------------- +# MEDIAFUSION +# --------------------------------------------------------- +# Profiles: all, stremio +# +# The MEDIAFUSION_API_PASSWORD is a random password that you can set to whatever you like. It is used to protect the MediaFusion service. +# The MEDIAFUSION_SECRET_KEY is a secret key that you can generate using the following command: +# openssl rand -hex 16 +# +# The core configuration for MediaFusion is stored within ./data/mediafusion/.env +# It does not require any changing, but if you would like to adjust the settings, you can do so in the .env file. +# --------------------------------------------------------- MEDIAFUSION_API_PASSWORD= MEDIAFUSION_HOSTNAME= MEDIAFUSION_SECRET_KEY= +# --------------------------------------------------------- + +# --------------------------------------------------------- +# STREMIO JACKETT +# --------------------------------------------------------- +# Profiles: all, stremio +# --------------------------------------------------------- STREMIO_JACKETT_HOSTNAME= +# --------------------------------------------------------- + +# --------------------------------------------------------- +# JACKETTIO +# --------------------------------------------------------- +# Profiles: all, stremio +# --------------------------------------------------------- JACKETTIO_HOSTNAME= +# --------------------------------------------------------- + +# --------------------------------------------------------- +# STREMTHRU +# --------------------------------------------------------- +# Profiles: all, stremio +# --------------------------------------------------------- STREMTHRU_HOSTNAME= +# --------------------------------------------------------- + +# --------------------------------------------------------- +# EASYNEWS PLUS +# --------------------------------------------------------- +# Profiles: all, stremio +# --------------------------------------------------------- EASYNEWS_PLUS_HOSTNAME= +# --------------------------------------------------------- + +# --------------------------------------------------------- +# PROWLARR +# --------------------------------------------------------- +# Profiles: all, stremio, debrid_media_server +# +# The PROWLARR_API_KEY is the API key that you can find in the Prowlarr dashboard. +# On your first run, you can leave this blank, after you have started the containers, you can find the API key in the Prowlarr dashboard. +# You can also run the following command to get the API key: +# sudo docker exec -i prowlarr cat /config/config.xml | grep -oP '(?<=).*(?=)' +# +# Make sure you add authentication to Prowlarr by setting up a username and password with the Login Form option, +# you will be asked to do so when you first access the Prowlarr dashboard. +# --------------------------------------------------------- PROWLARR_API_KEY= PROWLARR_HOSTNAME= +# --------------------------------------------------------- -# This needs to be the one from the Jackett dashboard. If it is your first time running + +# --------------------------------------------------------- +# JACKETT +# --------------------------------------------------------- +# Profiles: all, stremio, debrid_media_server +# +# The JACKETT_API_KEY is the API key that you can find in the Jackett dashboard. +# On your first run, you can leave this blank, after you have started the containers, you can find the API key in the Jackett dashboard. +# You can also run the following command to get the API key (after the container is running): +# sudo docker exec -i jackett cat /config/Jackett/ServerConfig.json | jq -r '.APIKey' +# +# Make sure you add authentication to Jackett by setting up an admin password in the Jackett dashboard. +# --------------------------------------------------------- JACKETT_API_KEY= JACKETT_HOSTNAME= +# --------------------------------------------------------- -NZBHYDRA2_HOSTNAME= - +# --------------------------------------------------------- +# TMDB ADDON +# --------------------------------------------------------- +# Profiles: all, stremio +# +# You can get your FANAART_API_KEY from https://fanart.tv/get-an-api-key/ +# --------------------------------------------------------- TMDB_ADDON_HOSTNAME= +FANART_API_KEY= +# --------------------------------------------------------- + +# --------------------------------------------------------- +# STREMIO SERVER +# --------------------------------------------------------- +# Profiles: all, stremio +# --------------------------------------------------------- STREMIO_SERVER_HOSTNAME= +# --------------------------------------------------------- + +# --------------------------------------------------------- +# ADDON MANAGER +# --------------------------------------------------------- +# Profiles: all, stremio +# --------------------------------------------------------- ADDON_MANAGER_HOSTNAME= +# --------------------------------------------------------- -# For these two addons, after your inital compose up, you need to create the databases in postgres -# You can do this by running the following commands: -# docker exec -it ravenn-postgres psql -U postgres -# CREATE DATABASE stremio_trakt_db; -# CREATE DATABASE stremio_catalog_db; -# \q -RAVENN_CATALOGS_HOSTNAME= -RAVENN_TRAKT_HOSTNAME= - -## These credentials are required to interact with the Trakt API and access its services. +# --------------------------------------------------------- +# STREMIO CATALOGS & STREMIO TRAKT ADDONS +# --------------------------------------------------------- +# Profiles: all, stremio +# +# For these two addons, we need to obtain a Trakt Client ID and secret in order for the addons to work. # To obtain these credentials: # 1. Create an account on Trakt.tv (https://trakt.tv). # 2. Go to the applications section (https://trakt.tv/oauth/applications). @@ -73,81 +425,173 @@ RAVENN_TRAKT_HOSTNAME= # - For the "Redirect URL", add the following URLs (replacing the ${*_HOSTNAME} with your actual hostname): # - https://${RAVENN_TRAKT_HOSTNAME}/callback # - https://${RAVENN_CATALOGS_HOSTNAME}/callback +# +# +# For these two addons, after your inital compose up, you need to create the databases in postgres +# You can do this by running the following commands: +# docker exec -it ravenn-postgres psql -U postgres +# CREATE DATABASE stremio_trakt_db; +# CREATE DATABASE stremio_catalog_db; +# \q +# +# --------------------------------------------------------- +RAVENN_CATALOGS_HOSTNAME= +RAVENN_TRAKT_HOSTNAME= TRAKT_CLIENT_ID= TRAKT_CLIENT_SECRET= +# --------------------------------------------------------- +# ========================================================= +# NZBHYDRA2 PROFILE +# ========================================================= +# These environment variables are used to set the environment variables for the services in the nzbhydra2 profile. +# The nzbhydra2 profile only includes nzbhydra2. + +# --------------------------------------------------------- +# NZBHYDRA2 +# --------------------------------------------------------- +# Profiles: all, nzbhydra2 +# +# Make sure you add authentication to NZBHydra2 by setting up a username and password in the NZBHydra2 dashboard +# at Config > Authorization. +# Set Auth type to Login Form, and check all switches. +# Then, Add a new admin user with a username and password and make sure you remember these. +# --------------------------------------------------------- +NZBHYDRA2_HOSTNAME= +# --------------------------------------------------------- + +# ========================================================= +# SEANIME PROFILE +# ========================================================= +# These environment variables are used to set the environment variables for the services in the seanime profile. +# The seanime profile only includes seanime. + + +# --------------------------------------------------------- +# SEANIME +# --------------------------------------------------------- +# Profiles: seanime, all +# +# The SEANIME_HASHED_PASSWORD is the hashed password that you will use to access the Seanime service. +# To get the hash for SEANIME_HASHED_PASSWORD, run the following command in your terminal, replacing with your desired password. +# +# htpasswd -niBb user | cut -d ":" -f 2 | sed 's/\$/\$\$/g' +# +# If you get an error about htpasswd not being found, you can install apache2-utils, use this command. +# sudo apt-get install apache2-utils +# +# Then, rerun the htpasswd command above. +# +# IMPORTANT: Once you have the container running, you need to edit Seanime's config.toml file in order to set the correct host. +# Run the following command to do this. +# sudo sed -i 's/127.0.0.1/0.0.0.0/' ./data/seanime/config.toml +# Then, restart the container by running `sudo docker compose restart seanime +# --------------------------------------------------------- +SEANIME_HOSTNAME= +SEANIME_USERNAME= +SEANIME_HASHED_PASSWORD= +# --------------------------------------------------------- + + +# ========================================================= +# SEARXNG PROFILE +# ========================================================= +# These environment variables are used to set the environment variables for the services in the searxng profile. +# The searxng profile only includes searxng. + +# --------------------------------------------------------- +# SEARXNG +# --------------------------------------------------------- +# Profiles: searxng, all +# --------------------------------------------------------- +SEARXNG_HOSTNAME= +# --------------------------------------------------------- + +# ========================================================= +# PLAUSIBLE PROFILE +# ========================================================= +# These environment variables are used to set the environment variables for the services in the plausible profile. +# The plausible profile only includes plausible. + +# --------------------------------------------------------- +# PLAUSIBLE +# --------------------------------------------------------- +# Profiles: plausible, all +# +# The PLAUSIBLE_SECRET_KEY_BASE is a secret key that you can generate using the following command: +# openssl rand -base64 48 +# --------------------------------------------------------- +PLAUSIBLE_HOSTNAME= +PLAUSIBLE_SECRET_KEY_BASE= +# --------------------------------------------------------- + + +# ========================================================= +# DEBRID MEDIA SERVER PROFILE +# ========================================================= +# This profile is used to set the environment variables for the services in the debrid_media_server profile. + +# --------------------------------------------------------- +# BLACKHOLE +# --------------------------------------------------------- +# These are the environment variables for the Blackhole service. This is the download client that manages creating symlinks and telling +# Sonarr/Radarr to import the files. +# +# The main configuration for Blackhole is stored in ./data/blackhole/.env +# You can find an example of the .env file at Savvy Guides: +# https://savvyguides.wiki/sailarrsguide/#blackhole-script +# --------------------------------------------------------- +REALDEBRID_MOUNT_TORRENTS_PATH="/mnt/remote/realdebrid/__all__" +BLACKHOLE_BASE_WATCH_PATH="/mnt/symlinks" +BLACKHOLE_RADARR_PATH="radarr" +BLACKHOLE_SONARR_PATH="sonarr" +# --------------------------------------------------------- + +# --------------------------------------------------------- +# RADARR/SONARR +# --------------------------------------------------------- +# These are the environment variables for the Radarr and Sonarr services. These services are used to manage your media library. +# --------------------------------------------------------- +RADARR_HOSTNAME= +RADARR4K_HOSTNAME= +RADARRANIME_HOSTNAME= + +SONARR_HOSTNAME= +SONARR4K_HOSTNAME= +SONARRANIME_HOSTNAME= +# --------------------------------------------------------- + +# --------------------------------------------------------- +# PLEX +# --------------------------------------------------------- +# These are the environment variables for the Plex service. Plex is a media server that allows you to stream your media to any device. +# +# The PLEX_CLAIM is the claim token that you can use to claim your server with Plex. You can get this from https://www.plex.tv/claim/ +# --------------------------------------------------------- +PLEX_CLAIM= +PLEX_HOSTNAME= +# --------------------------------------------------------- + +# ========================================================= +# GENERAL CONFIGURATION +# ========================================================= +# These are the default values for the environment variables that are used in the compose.yaml file. +# You should not change these values unless you know what you are doing. +# + + +# Timezone used for auto updates, and other services that require a timezone e.g. Prowlarr, Jackett, etc. +# https://en.wikipedia.org/wiki/List_of_tz_database_time_zones +# Use the values in the TZ Identifier column +# Needed by: Prowlarr, Jackett, NZBHydra2, Plex, Watchtower, Stremio Jackett +TZ=UTC + +# The POSTGRES credentials can be left as is, as they are only accessed internally. POSTGRES_USER=postgres POSTGRES_PASSWORD=postgres -# Get your API key and Access token from https://www.themoviedb.org/settings/api -TMDB_API_KEY= -TMDB_ACCESS_TOKEN= - -# Get your API key from https://fanart.tv/get-an-api-key/ -FANART_API_KEY= - - -# Any email address will do -LETSENCRYPT_EMAIL= - -# The cron schedule for auto updates. -# https://pkg.go.dev/github.com/robfig/cron@v1.2.0#hdr-CRON_Expression_Format -AUTO_UPDATE_SCHEDULE=0 0 */8 * * * # This will run the auto update every 8 hours - -# https://containrrr.dev/shoutrrr/v0.8/services/overview/ -AUTO_UPDATE_NOTIFICATION_URL= - -# Timezone used for auto updates, and other services that require a timezone e.g. Prowlarr, Jackett, etc. -# https://en.wikipedia.org/wiki/List_of_tz_database_time_zones -TZ=UTC - -# Dozzle provides a web interface for viewing logs, it will be available at DOZZLE_HOSTNAME -# To get the hashed password, run the following command in your terminal, replacing with your desired username. -# install apache2-utils if its not already installed, you can do this by running `sudo apt-get install apache2-utils` -# htpasswd -nB -# This will prompt you to enter a password, and then it will output the hashed password in the format : -# put the and in the DOZZLE_USERNAME and DOZZLE_HASHED_PASSWORD fields respectively. -# IMPORTANT: You will need to replace any $ in the hashed password with $$ to escape it, as $ is a special character in docker-compose files. - -DOZZLE_USERNAME= -DOZZLE_HASHED_PASSWORD= -DOZZLE_HOSTNAME= - -# e.g. kuma.example.com -UPTIME_KUMA_HOSTNAME= -# e.g. status.example.com (when creating a status page on kuma, you can add this hostname as the domain name) -STATUS_PAGE_HOSTNAME= - -FLAME_HOSTNAME= -FLAME_PASSWORD= - -DASHDOT_HOSTNAME= -DASHDOT_PAGE_TITLE= - -HONEY_HOSTNAME - - -AIOSTREMIO_HOSTNAME= -AIOSTREMIO_ADMIN_USERNAME= -AIOSTREMIO_ADMIN_PASSWORD= -# idk what this is, its for aiostremio though -DEBRID_API_KEY= - -# FOR SEANIME ONLY: -# To get the hash for SEANIME_HASHED_PASSWORD, run the following command in your terminal, replacing with your desired username. -# -# htpasswd -nB -# NOTE: you may need to install apache2-utils if its not already installed, you can do this by running `sudo apt-get install apache2-utils` -# -# you need to uncomment the seanime service in the compose.yaml file at the bottom and uncomment the following lines and fill them in. -# -# SEANIME_HOSTNAME= -# SEANIME_USERNAME= -# SEANIME_HASHED_PASSWORD= -# -# SEARXNG_HOSTNAME= -# -# PLAUSIBLE_HOSTNAME= -# check the plausible documentation for more info -# PLAUSIBLE_SECRET_KEY_BASE= +# The network that the containers will be connected to. +# You should change this if you want to use an external network or just change the name of the network. +DOCKER_NETWORK=aio_default +DOCKER_NETWORK_EXTERNAL=false diff --git a/README.md b/README.md index 1c1aba4..b5943b1 100644 --- a/README.md +++ b/README.md @@ -8,14 +8,11 @@ You can use the Always Free resources of Oracle to set this up. Here is a [set u On your server/VPS: 1. Install docker per https://get.docker.com -2. Forward port 443 +2. Forward port 443 and 80. 3. Point the necessary domain(s) to the public IP of your server/VPS with your DNS. 4. Run the following commands on your VPS: ``` - curl https://raw.githubusercontent.com/Viren070/stremio-addons-docker-compose-template/refs/heads/main/.env -o .env - curl https://raw.githubusercontent.com/Viren070/stremio-addons-docker-compose-template/refs/heads/main/compose.yaml -o compose.yaml - mkdir -p ./data/mediafusion - curl https://raw.githubusercontent.com/Viren070/stremio-addons-docker-compose-template/refs/heads/main/.env.mediafusion -o ./data/mediafusion/.env + curl https://raw.githubusercontent.com/Viren070/stremio-addons-docker-compose-template/refs/heads/main/install.sh | bash ``` 5. Open the .env file using: ``` diff --git a/compose.yaml b/compose.yaml index cc35450..aa0f346 100644 --- a/compose.yaml +++ b/compose.yaml @@ -37,514 +37,33 @@ # services: - # AIOStreams service - aiostreams: - image: viren070/aiostreams:latest - container_name: aiostreams + traefik: + image: traefik:v3 + container_name: traefik restart: unless-stopped - expose: - - 3000 - environment: - - ADDON_PROXY=http://warp:1080 # or http://gluetun:8888 - - ADDON_PROXY_CONFIG=*:false,*.strem.fun:true # only route requests to any strem.fun subdomain through the proxy - - API_KEY=${AIOSTREAMS_API_KEY:-} - - EASYNEWS_PLUS_URL=http://easynews-plus:1337/ - - MEDIAFUSION_URL=http://mediafusion:8000/ - - MEDIAFUSION_API_PASSWORD=${MEDIAFUSION_API_PASSWORD} - - MEDIAFUSION_CONFIG_TIMEOUT=3000 - - COMET_URL=http://comet:2020/ - - FORCE_COMET_HOSTNAME=${COMET_HOSTNAME} - - COMET_INDEXERS=${COMET_INDEXERS:+${COMET_INDEXERS}} - - JACKETTIO_URL=http://jackettio:4000/ - - STREMIO_JACKETT_URL=http://stremio-jackett:3000/ - - JACKETT_URL=http://jackett:9117/ - - JACKETT_API_KEY=${JACKETT_API_KEY:-} - - SECRET_KEY=${AIOSTREAMS_SECRET_KEY} # openssl rand -hex 16 - - DEFAULT_TIMEOUT=5000 - - TMDB_API_KEY=${TMDB_API_KEY} - - LOG_FORMAT=text - - LOG_LEVEL=debug - - LOG_SENSITIVE_INFO=true - labels: - - "traefik.enable=true" - - "traefik.http.routers.aio.rule=Host(`${AIOSTREAMS_HOSTNAME}`)" - - "traefik.http.routers.aio.entrypoints=websecure" - - "traefik.http.routers.aio.tls.certresolver=myresolver" - - "flame.type=app" - - "flame.name=AIOStreams" - - "flame.url=https://${AIOSTREAMS_HOSTNAME}" - - healthcheck: - test: wget -qO- http://localhost:3000/health - interval: 1m - timeout: 10s - retries: 5 - start_period: 10s - - - - - tmdb-addon: - image: mrcanelas/tmdb-addon:latest - container_name: tmdb-addon - restart: unless-stopped - expose: - - 3232 - environment: - - PORT=3232 - - TMDB_API=${TMDB_API_KEY} # https://www.themoviedb.org/settings/api - - FANART_API=${FANART_API_KEY} # https://fanart.tv/get-an-api-key/ - - HOST_NAME=tmdb-${TMDB_ADDON_HOSTNAME} - - MONGODB_URI=mongodb://mongodb:27017/tmdb - - META_TTL=604800 # 1 week - - CATALOG_TTL=86400 # 1 day - - NO_CACHE=false # Enable cache, set to true to disable - labels: - - "traefik.enable=true" - - "traefik.http.routers.tmdb.rule=Host(`${TMDB_ADDON_HOSTNAME}`)" - - "traefik.http.routers.tmdb.entrypoints=websecure" - - "traefik.http.routers.tmdb.tls.certresolver=myresolver" - - "traefik.http.services.tmdb.loadbalancer.server.port=3232" - - "flame.type=app" - - "flame.name=TMDB Addon" - - "flame.url=https://${TMDB_ADDON_HOSTNAME}" - depends_on: - mongodb: - condition: service_healthy - - easynews-plus: - image: ghcr.io/sleeyax/stremio-easynews-addon:latest - container_name: easynews-plus - restart: unless-stopped - expose: - - 1337 - labels: - - "traefik.enable=true" - - "traefik.http.routers.easynews.rule=Host(`${EASYNEWS_PLUS_HOSTNAME}`)" - - "traefik.http.routers.easynews.entrypoints=websecure" - - "traefik.http.routers.easynews.tls.certresolver=myresolver" - - "flame.type=app" - - "flame.name=Easynews+" - - "flame.url=https://${EASYNEWS_PLUS_HOSTNAME}" - - comet: - container_name: comet - image: g0ldyy/comet:latest - restart: unless-stopped - expose: - - 2020 - environment: - - FASTAPI_HOST=0.0.0.0 - - FASTAPI_PORT=2020 - - FASTAPI_WORKERS=-1 - - DATABASE_TYPE=sqlite - - DATABASE_URL=data/comet.db - - DASHBOARD_ADMIN_PASSWORD=${COMET_ADMIN_PASSWORD} - - DEBRID_PROXY_URL=http://warp:1080 - - INDEXER_MANAGER_TYPE=prowlarr # or jackett - - INDEXER_MANAGER_URL=http://prowlarr:9696 # or http://jackett:9117 - - INDEXER_MANAGER_API_KEY=${PROWLARR_API_KEY:-} # or ${JACKETT_API_KEY:-} - - INDEXER_MANAGER_INDEXERS=${COMET_INDEXERS:-[]} # comma separated list of indexer ids # for jackett, get the names from https://github.com/Jackett/Jackett/tree/master/src/Jackett.Common/Definitions - for prowlarr you can write them like on the web dashboard - - SCRAPE_ZILEAN=True - - ZILEAN_URL=http://zilean:8181 # or https://zilean.elfhosted.com if not hosting zilean locally - - ZILEAN_TAKE_FIRST=500 - - SCRAPE_TORRENTIO=False - - SCRAPE_MEDIAFUSION=False - - MEDIAFUSION_URL=http://mediafusion:8000 # or https://mediafusion.elfhosted.com if not hosting mediafusion locally - - STREMTHRU_URL=http://stremthru:8080 # or https://stremthru.13377001.xyz if not hosting stremthru locally - - DOWNLOAD_TORRENT_FILES=False - - REMOVE_ADULT_CONTENT=True - labels: - - "traefik.enable=true" - - "traefik.http.routers.comet.rule=Host(`${COMET_HOSTNAME}`)" - - "traefik.http.routers.comet.entrypoints=websecure" - - "traefik.http.routers.comet.tls.certresolver=myresolver" - - "flame.type=app" - - "flame.name=Comet" - - "flame.url=https://${COMET_HOSTNAME}" + ports: + - 443:443 + - 80:80 + command: + - "--providers.docker=true" + - "--providers.docker.exposedbydefault=false" + - "--entryPoints.web.address=:80" + - "--entryPoints.websecure.address=:443" + - "--entryPoints.web.http.redirections.entryPoint.to=websecure" + - "--entryPoints.web.http.redirections.entryPoint.scheme=https" + - "--certificatesresolvers.myresolver.acme.tlschallenge=true" + - "--certificatesresolvers.myresolver.acme.email=${LETSENCRYPT_EMAIL?}" + - "--certificatesresolvers.myresolver.acme.storage=/letsencrypt/acme.json" + - "--log.level=INFO" + - "--ping" volumes: - - ./data/comet:/app/data - healthcheck: - test: wget -qO- http://127.0.0.1:2020/health - interval: 1m - timeout: 10s - retries: 5 - start_period: 10s - - - # Mediaflow Proxy service - mediaflow-proxy: - image: mhdzumair/mediaflow-proxy - container_name: mediaflow-proxy - restart: unless-stopped - expose: - - 8888 - environment: - API_PASSWORD: ${MEDIAFLOW_API_PASSWORD} - PROXY_URL: http://warp:1080 - TRANSPORT_ROUTES: '{ "https://torrentio.strem.fun": { "proxy": true } }' - labels: - - "traefik.enable=true" - - "traefik.http.routers.mediaflow.rule=Host(`${MEDIAFLOW_HOSTNAME}`)" - - "traefik.http.routers.mediaflow.entrypoints=websecure" - - "traefik.http.routers.mediaflow.tls.certresolver=myresolver" - - "flame.type=app" - - "flame.name=MediaFlow Proxy" - - "flame.url=https://${MEDIAFLOW_HOSTNAME}" + - "/var/run/docker.sock:/var/run/docker.sock" + - "./data/letsencrypt:/letsencrypt" healthcheck: - test: python3 -c "import urllib.request; print(urllib.request.urlopen('http://127.0.0.1:8888/health').read().decode())" - interval: 1m - timeout: 10s - retries: 5 - start_period: 10s - - # MediaFusion - mediafusion: - image: mhdzumair/mediafusion:latest - container_name: mediafusion - restart: unless-stopped - expose: - - 8000 - env_file: - - ./data/mediafusion/.env - healthcheck: - test: ["CMD", "curl", "-f", "http://localhost:8000/health"] - interval: 1m - timeout: 10s - retries: 5 - start_period: 10s - depends_on: - mongodb: - condition: service_healthy - redis: - condition: service_healthy - warp: - condition: service_healthy - labels: - - "traefik.enable=true" - - "traefik.http.routers.mediafusion.rule=Host(`${MEDIAFUSION_HOSTNAME?}`)" - - "traefik.http.routers.mediafusion.entrypoints=websecure" - - "traefik.http.routers.mediafusion.tls.certresolver=myresolver" - - "flame.type=app" - - "flame.name=MediaFusion" - - "flame.url=https://${MEDIAFUSION_HOSTNAME?}" - - dramatiq-worker: - image: mhdzumair/mediafusion:latest - container_name: dramatiq-worker - command: ["dramatiq", "api.task", "-p", "1", "-t", "4"] - restart: unless-stopped - env_file: - - ./data/mediafusion/.env - depends_on: - mongodb: - condition: service_healthy - redis: - condition: service_healthy - - browserless: - image: ghcr.io/browserless/chromium - container_name: browserless - environment: - - TIMEOUT=-1 - restart: unless-stopped - healthcheck: - test: ["CMD", "curl", "-f", "http://localhost:3000/json/version"] - interval: 30s - timeout: 10s - retries: 3 - - - stremthru: - image: muniftanjim/stremthru:latest-heavy - container_name: stremthru - restart: unless-stopped - expose: - - 8080 - environment: - - STREMTHRU_HTTP_PROXY=http://warp:1080 - - STREMTHRU_TUNNEL=*:false,torrentio.strem.fun:true # Only tunnel hostnames that block VPS access (e.g. Torrentio) - - STREMTHRU_PROXY_AUTH=user1:pass1,user2:pass2 - - STREMTHRU_STORE_AUTH=*:realdebrid:abc...xyz # Add apikey - - STREMTHRU_STORE_TUNNEL=realdebrid:api # Only send RD API via tunnel, not all access (e.g playback) - - STREMTHRU_STORE_CONTENT_PROXY=*:true,easydebrid:false,premiumize:false - - STREMTHRU_PEER_URI=https://stremthru.13377001.xyz - - STREMTHRU_DATABASE_URI=sqlite://./data/stremthru.db - - STREMTHRU_REDIS_URI=redis://redis:6379 # redis://garnet:6379 - depends_on: - warp: - condition: service_healthy - volumes: - - ./data/stremthru:/app/data - - labels: - - "traefik.enable=true" - - "traefik.http.routers.stremthru.rule=Host(`${STREMTHRU_HOSTNAME?}`)" - - "traefik.http.routers.stremthru.entrypoints=websecure" - - "traefik.http.routers.stremthru.tls.certresolver=myresolver" - - "traefik.http.services.stremthru.loadbalancer.server.port=8080" - - "flame.type=app" - - "flame.name=StremThru" - - "flame.url=https://${STREMTHRU_HOSTNAME}" - - - - stremio-jackett: - image: belmeg/stremio-addon-jackett - container_name: stremio-jackett - restart: unless-stopped - expose: - - 3000 - environment: - - PUID=1000 - - PGID=1000 - - TZ=${TZ:-UTC} # Add timezone support - labels: - - "traefik.enable=true" - - "traefik.http.routers.stremiojackett.rule=Host(`${STREMIO_JACKETT_HOSTNAME}`)" - - "traefik.http.routers.stremiojackett.entrypoints=websecure" - - "traefik.http.routers.stremiojackett.tls.certresolver=myresolver" - - "flame.type=app" - - "flame.name=Stremio-Jackett" - - "flame.url=https://${STREMIO_JACKETT_HOSTNAME}" - - jackettio: - image: arvida42/jackettio:latest - container_name: jackettio - restart: unless-stopped - expose: - - 4000 - environment: - - JACKETT_URL=http://jackett:9117 - - JACKETT_API_KEY=${JACKETT_API_KEY:-} - - TMDB_ACCESS_TOKEN=${TMDB_ACCESS_TOKEN} - volumes: - - ./data/jackettio:/data - labels: - - "traefik.enable=true" - - "traefik.http.routers.jackettio.rule=Host(`${JACKETTIO_HOSTNAME?}`)" - - "traefik.http.routers.jackettio.entrypoints=websecure" - - "traefik.http.routers.jackettio.tls.certresolver=myresolver" - - "flame.type=app" - - "flame.name=Jackettio" - - "flame.url=https://${JACKETTIO_HOSTNAME}" - - zilean: - image: ipromknight/zilean:latest - restart: unless-stopped - container_name: zilean - tty: true - environment: - Zilean__Database__ConnectionString: Host=postgres;Database=zilean;Username=${POSTGRES_USER};Password=${POSTGRES_PASSWORD};Include Error Detail=true;Timeout=30;CommandTimeout=3600 - Zilean__Imdb__UseAllCores: true - Zilean__Imdb__UseLucene: true - healthcheck: - test: curl --connect-timeout 10 --silent --show-error --fail http://localhost:8181/healthchecks/ping - timeout: 60s - interval: 30s - retries: 10 - depends_on: - postgres: - condition: service_healthy - volumes: - - zilean-tmp:/tmp - - - - - prowlarr: - image: ghcr.io/hotio/prowlarr:latest - container_name: prowlarr - environment: - - PUID=1000 - - PGID=1000 - - UMASK=002 - - TZ=${TZ:-UTC} # Add timezone support - expose: - - 9696 - volumes: - - ./data/prowlarr:/config - restart: unless-stopped - labels: - - "traefik.enable=true" - - "traefik.http.routers.prowlarr.rule=Host(`${PROWLARR_HOSTNAME?}`)" - - "traefik.http.routers.prowlarr.entrypoints=websecure" - - "traefik.http.routers.prowlarr.tls.certresolver=myresolver" - - "flame.type=app" - - "flame.name=Prowlarr" - - "flame.url=https://${PROWLARR_HOSTNAME}" - - jackett: - image: linuxserver/jackett:latest - container_name: jackett - environment: - - PUID=1000 - - PGID=1000 - - TZ=${TZ:-UTC} # Add timezone support - expose: - - 9117 - volumes: - - ./data/jackett:/config - restart: unless-stopped - labels: - - "traefik.enable=true" - - "traefik.http.routers.jackett.rule=Host(`${JACKETT_HOSTNAME?}`)" - - "traefik.http.routers.jackett.entrypoints=websecure" - - "traefik.http.routers.jackett.tls.certresolver=myresolver" - - "flame.type=app" - - "flame.name=Jackett" - - "flame.url=https://${JACKETT_HOSTNAME}" - healthcheck: - test: curl -f http://localhost:9117/health - interval: 30s - timeout: 10s - retries: 3 - start_period: 30s - - nzbhydra2: - container_name: nzbhydra2 - image: ghcr.io/hotio/nzbhydra2:latest - expose: - - 5076 - environment: - - PUID=1000 - - PGID=1000 - - UMASK=002 - - TZ=${TZ:-UTC} - volumes: - - ./data/nzbhydra/config:/config - restart: unless-stopped - labels: - - "traefik.enable=true" - - "traefik.http.routers.nzbhydra2.rule=Host(`${NZBHYDRA2_HOSTNAME}`)" - - "traefik.http.routers.nzbhydra2.entrypoints=websecure" - - "traefik.http.routers.nzbhydra2.tls.certresolver=myresolver" - - "flame.type=app" - - "flame.name=NZBHydra2" - - "flame.url=https://${NZBHYDRA2_HOSTNAME}" - - flaresolverr: - image: ghcr.io/flaresolverr/flaresolverr:latest - container_name: flaresolverr - restart: unless-stopped - healthcheck: - test: ["CMD", "curl", "-f", "http://localhost:8191/health"] - interval: 30s - timeout: 10s - retries: 3 - - # byparr: - # image: ghcr.io/thephaseless/byparr - # container_name: byparr - # restart: unless-stopped - # environment: - # - LOG_LEVEL=INFO - # volumes: - # - ./data/byparr/screenshots:/app/screenshots - # healthcheck: - # test: curl -f http://localhost:8191/health - # interval: 5m - # timeout: 10s - # retries: 3 - # start_period: 10s - - stremio-server: - image: stremio/server:latest - container_name: stremio-server - expose: - - 11470 - restart: unless-stopped - labels: - - "traefik.enable=true" - - "traefik.http.routers.stremio-server.rule=Host(`${STREMIO_SERVER_HOSTNAME}`)" - - "traefik.http.routers.stremio-server.entrypoints=websecure" - - "traefik.http.routers.stremio-server.tls.certresolver=myresolver" - - "flame.type=app" - - "flame.name=Stremio Server" - - "flame.url=https://${STREMIO_SERVER_HOSTNAME}" - - # Warp for SOCKS5 proxy for AIOStreams, MediaFlow Proxy, and Prowlarr, MediaFusion - warp: - image: caomingjun/warp - container_name: warp - restart: unless-stopped - device_cgroup_rules: - - 'c 10:200 rwm' - expose: - - 1080 - environment: - - WARP_SLEEP=5 - cap_add: - - NET_ADMIN - sysctls: - - net.ipv6.conf.all.disable_ipv6=0 - - net.ipv4.conf.all.src_valid_mark=1 - volumes: - - ./data/warp:/var/lib/cloudflare-warp - healthcheck: - test: curl -x "socks5h://127.0.0.1:1080" -fsSL "https://www.cloudflare.com/cdn-cgi/trace" | grep -qE "warp=(plus|on)" || exit 1 - interval: 15s - timeout: 5s - retries: 3 - start_period: 5s - - mongodb: - image: mongo:latest - container_name: mongodb - restart: unless-stopped - volumes: - - mongodb-data:/data/db - healthcheck: - test: echo 'db.runCommand("ping").ok' | mongosh localhost:27017/test --quiet - interval: 10s - timeout: 10s - retries: 5 - start_period: 40s - - postgres: - image: postgres:17.2-alpine - container_name: postgres - restart: unless-stopped - shm_size: 2G - environment: - PGDATA: /var/lib/postgresql/data/pgdata - POSTGRES_USER: ${POSTGRES_USER} - POSTGRES_PASSWORD: ${POSTGRES_PASSWORD} - POSTGRES_DB: postgres - volumes: - - postgres-data:/var/lib/postgresql/data/pgdata - healthcheck: - test: [ "CMD-SHELL", "pg_isready -U postgres" ] + test: ["CMD", "traefik", "healthcheck", "--ping"] interval: 10s timeout: 5s - retries: 5 - - redis: - image: redis:latest - container_name: redis - restart: unless-stopped - volumes: - - redis-data:/data - command: redis-server --appendonly yes --save 60 1 - healthcheck: - test: ["CMD", "redis-cli", "ping"] - interval: 10s - timeout: 5s - retries: 5 - # garnet: - # image: 'ghcr.io/microsoft/garnet' - # command: - # - --lua - # - --lua-transaction-mode - # ulimits: - # memlock: -1 - # container_name: garnet - # restart: unless-stopped - # # To avoid docker NAT, consider `host` mode. - # # https://docs.docker.com/compose/compose-file/compose-file-v3/#network_mode - # # network_mode: "host" - # volumes: - # - garnet-data:/data + retries: 3 # Start page for your server flame: image: pawelmalak/flame:multiarch @@ -553,7 +72,7 @@ services: expose: - 5005 environment: - - PASSWORD=${FLAME_PASSWORD} + - PASSWORD=${FLAME_PASSWORD?} labels: - "traefik.enable=true" - "traefik.http.routers.flame.rule=Host(`${FLAME_HOSTNAME?}`)" @@ -573,8 +92,8 @@ services: environment: DASHDOT_PAGE_TITLE: ${DASHDOT_PAGE_TITLE:-dash.} DASHDOT_ALWAYS_SHOW_PERCENTAGES: true - DASHDOT_SHOW_HOST: true - DASHDOT_CUSTOM_HOST: ${DASHDOT_PAGE_TITLE:-} + DASHDOT_SHOW_HOST: ${DASHDOT_SHOW_HOST:-true} + DASHDOT_CUSTOM_HOST: ${DASHDOT_CUSTOM_HOST:-} DASHDOT_ACCEPT_OOKLA_EULA: true DASHDOT_NETWORK_SPEED_AS_BYTES: true volumes: @@ -689,62 +208,591 @@ services: timeout: 30s retries: 5 start_period: 30s - - traefik: - image: traefik:v3 - container_name: traefik + # AIOStreams service + aiostreams: + image: viren070/aiostreams:latest + container_name: aiostreams restart: unless-stopped - ports: - - 443:443 - - 127.0.0.1:8080:8080 - command: - - "--api.insecure=true" - - "--providers.docker=true" - - "--providers.docker.exposedbydefault=false" - - "--entryPoints.websecure.address=:443" - - "--certificatesresolvers.myresolver.acme.tlschallenge=true" - - "--certificatesresolvers.myresolver.acme.email=${LETSENCRYPT_EMAIL}" - - "--certificatesresolvers.myresolver.acme.storage=/letsencrypt/acme.json" - - "--log.level=INFO" - - "--ping" - volumes: - - "/var/run/docker.sock:/var/run/docker.sock" - - "./data/letsencrypt:/letsencrypt" + expose: + - 3000 + environment: + - ADDON_PROXY=${AIOSTREAMS_ADDON_PROXY:-} + - ADDON_PROXY_CONFIG=*:false,*.strem.fun:true # only route requests to any strem.fun subdomain through the proxy + - API_KEY=${AIOSTREAMS_API_KEY:-} + - SECRET_KEY=${AIOSTREAMS_SECRET_KEY} # openssl rand -hex 16 + - DEFAULT_TIMEOUT=5000 + - TMDB_API_KEY=${TMDB_API_KEY} + - LOG_FORMAT=text + - LOG_LEVEL=debug + - LOG_SENSITIVE_INFO=true + # <<< The environment variables below are instructing our AIOStreams addon to use our other self hosted services, if you don't >>> + # <<< want to use them you can remove the environment variables from the .env file or set them to an empty string, or remove them from here >>> + - EASYNEWS_PLUS_URL=${AIOSTREAMS_EASYNEWS_PLUS_URL:-} + - MEDIAFUSION_URL=${AIOSTREAMS_MEDIAFUSION_URL:-} + - MEDIAFUSION_API_PASSWORD=${MEDIAFUSION_API_PASSWORD:-} + - MEDIAFUSION_CONFIG_TIMEOUT=3000 + - COMET_URL=${AIOSTREAMS_COMET_URL:-} + - FORCE_COMET_HOSTNAME=${COMET_HOSTNAME:-} + - COMET_INDEXERS=${AIOSTREAMS_COMET_INDEXERS:-} + - JACKETTIO_URL=${AIOSTREAMS_JACKETTIO_URL:-} + - JACKETT_INDEXERS=${AIOSTREAMS_JACKETT_INDEXERS:-} + - STREMIO_JACKETT_URL=${AIOSTREAMS_STREMIO_JACKETT_URL:-} + - JACKETT_URL=${AIOSTREAMS_JACKETT_URL:-} + - JACKETT_API_KEY=${JACKETT_API_KEY:-} + labels: + - "traefik.enable=true" + - "traefik.http.routers.aio.rule=Host(`${AIOSTREAMS_HOSTNAME?}`)" + - "traefik.http.routers.aio.entrypoints=websecure" + - "traefik.http.routers.aio.tls.certresolver=myresolver" + - "flame.type=app" + - "flame.name=AIOStreams" + - "flame.url=https://${AIOSTREAMS_HOSTNAME}" + healthcheck: - test: ["CMD", "traefik", "healthcheck", "--ping"] - interval: 10s + test: wget -qO- http://localhost:3000/health + interval: 1m + timeout: 10s + retries: 5 + start_period: 10s + profiles: + - stremio + - all + tmdb-addon: + image: mrcanelas/tmdb-addon:latest + container_name: tmdb-addon + restart: unless-stopped + expose: + - 3232 + environment: + - PORT=3232 + - TMDB_API=${TMDB_API_KEY?} # https://www.themoviedb.org/settings/api + - FANART_API=${FANART_API_KEY?} # https://fanart.tv/get-an-api-key/ + - HOST_NAME=tmdb-${TMDB_ADDON_HOSTNAME?} + - MONGODB_URI=mongodb://mongodb:27017/tmdb + - META_TTL=604800 # 1 week + - CATALOG_TTL=86400 # 1 day + - NO_CACHE=false # Enable cache, set to true to disable + labels: + - "traefik.enable=true" + - "traefik.http.routers.tmdb.rule=Host(`${TMDB_ADDON_HOSTNAME?}`)" + - "traefik.http.routers.tmdb.entrypoints=websecure" + - "traefik.http.routers.tmdb.tls.certresolver=myresolver" + - "traefik.http.services.tmdb.loadbalancer.server.port=3232" + - "flame.type=app" + - "flame.name=TMDB Addon" + - "flame.url=https://${TMDB_ADDON_HOSTNAME?}" + depends_on: + mongodb: + condition: service_healthy + profiles: + - stremio + - all + + easynews-plus: + image: ghcr.io/sleeyax/stremio-easynews-addon:latest + container_name: easynews-plus + restart: unless-stopped + expose: + - 1337 + labels: + - "traefik.enable=true" + - "traefik.http.routers.easynews.rule=Host(`${EASYNEWS_PLUS_HOSTNAME}`)" + - "traefik.http.routers.easynews.entrypoints=websecure" + - "traefik.http.routers.easynews.tls.certresolver=myresolver" + - "flame.type=app" + - "flame.name=Easynews+" + - "flame.url=https://${EASYNEWS_PLUS_HOSTNAME}" + profiles: + - stremio + - all + + comet: + container_name: comet + image: g0ldyy/comet:latest + restart: unless-stopped + expose: + - 2020 + environment: + - FASTAPI_HOST=0.0.0.0 + - FASTAPI_PORT=2020 + - FASTAPI_WORKERS=-1 + - DATABASE_TYPE=sqlite + - DATABASE_URL=data/comet.db + - DASHBOARD_ADMIN_PASSWORD=${COMET_ADMIN_PASSWORD} + - DEBRID_PROXY_URL=http://warp:1080 + - INDEXER_MANAGER_TYPE=${COMET_INDEXER_TYPE:-prowlarr} # or jackett + - INDEXER_MANAGER_URL=${COMET_INDEXER_URL:-http://prowlarr:9696} + #http://prowlarr:9696 # or http://jackett:9117 + - INDEXER_MANAGER_API_KEY=${COMET_INDEXER_API_KEY:-${PROWLARR_API_KEY:-}} # or ${JACKETT_API_KEY:-} + - INDEXER_MANAGER_INDEXERS=${COMET_INDEXERS:-[]} # comma separated list of indexer ids # for jackett, get the names from https://github.com/Jackett/Jackett/tree/master/src/Jackett.Common/Definitions - for prowlarr you can write them like on the web dashboard + - SCRAPE_ZILEAN=True + - ZILEAN_URL=http://zilean:8181 # or https://zilean.elfhosted.com if not hosting zilean locally + - ZILEAN_TAKE_FIRST=500 + - SCRAPE_TORRENTIO=False + - SCRAPE_MEDIAFUSION=False + - MEDIAFUSION_URL=http://mediafusion:8000 # or https://mediafusion.elfhosted.com if not hosting mediafusion locally + - STREMTHRU_URL=http://stremthru:8080 # or https://stremthru.13377001.xyz if not hosting stremthru locally + - DOWNLOAD_TORRENT_FILES=False + - REMOVE_ADULT_CONTENT=True + labels: + - "traefik.enable=true" + - "traefik.http.routers.comet.rule=Host(`${COMET_HOSTNAME}`)" + - "traefik.http.routers.comet.entrypoints=websecure" + - "traefik.http.routers.comet.tls.certresolver=myresolver" + - "flame.type=app" + - "flame.name=Comet" + - "flame.url=https://${COMET_HOSTNAME}" + volumes: + - ./data/comet:/app/data + healthcheck: + test: wget -qO- http://127.0.0.1:2020/health + interval: 1m + timeout: 10s + retries: 5 + start_period: 10s + profiles: + - stremio + - all + + + # Mediaflow Proxy service + mediaflow-proxy: + image: mhdzumair/mediaflow-proxy + container_name: mediaflow-proxy + restart: unless-stopped + expose: + - 8888 + environment: + API_PASSWORD: ${MEDIAFLOW_API_PASSWORD} + PROXY_URL: http://warp:1080 + TRANSPORT_ROUTES: '{ "https://torrentio.strem.fun": { "proxy": true } }' + labels: + - "traefik.enable=true" + - "traefik.http.routers.mediaflow.rule=Host(`${MEDIAFLOW_HOSTNAME}`)" + - "traefik.http.routers.mediaflow.entrypoints=websecure" + - "traefik.http.routers.mediaflow.tls.certresolver=myresolver" + - "flame.type=app" + - "flame.name=MediaFlow Proxy" + - "flame.url=https://${MEDIAFLOW_HOSTNAME}" + healthcheck: + test: python3 -c "import urllib.request; print(urllib.request.urlopen('http://127.0.0.1:8888/health').read().decode())" + interval: 1m + timeout: 10s + retries: 5 + start_period: 10s + profiles: + - stremio + - all + + # MediaFusion + mediafusion: + image: mhdzumair/mediafusion:latest + container_name: mediafusion + restart: unless-stopped + expose: + - 8000 + env_file: + - ./data/mediafusion/.env + healthcheck: + test: ["CMD", "curl", "-f", "http://localhost:8000/health"] + interval: 1m + timeout: 10s + retries: 5 + start_period: 10s + depends_on: + mongodb: + condition: service_healthy + redis: + condition: service_healthy + warp: + condition: service_healthy + labels: + - "traefik.enable=true" + - "traefik.http.routers.mediafusion.rule=Host(`${MEDIAFUSION_HOSTNAME?}`)" + - "traefik.http.routers.mediafusion.entrypoints=websecure" + - "traefik.http.routers.mediafusion.tls.certresolver=myresolver" + - "flame.type=app" + - "flame.name=MediaFusion" + - "flame.url=https://${MEDIAFUSION_HOSTNAME?}" + profiles: + - stremio + - all + + dramatiq-worker: + image: mhdzumair/mediafusion:latest + container_name: dramatiq-worker + command: ["dramatiq", "api.task", "-p", "1", "-t", "4"] + restart: unless-stopped + env_file: + - ./data/mediafusion/.env + depends_on: + mongodb: + condition: service_healthy + redis: + condition: service_healthy + profiles: + - stremio + - all + + browserless: + image: ghcr.io/browserless/chromium + container_name: browserless + environment: + - TIMEOUT=-1 + restart: unless-stopped + healthcheck: + test: ["CMD", "curl", "-f", "http://localhost:3000/json/version"] + interval: 30s + timeout: 10s + retries: 3 + profiles: + - stremio + - all + + stremthru: + image: muniftanjim/stremthru:latest-heavy + container_name: stremthru + restart: unless-stopped + expose: + - 8080 + environment: + - STREMTHRU_HTTP_PROXY=http://warp:1080 + - STREMTHRU_TUNNEL=*:false,torrentio.strem.fun:true # Only tunnel hostnames that block VPS access (e.g. Torrentio) + - STREMTHRU_PROXY_AUTH=user1:pass1,user2:pass2 + - STREMTHRU_STORE_AUTH=*:realdebrid:abc...xyz # Add apikey + - STREMTHRU_STORE_TUNNEL=realdebrid:api # Only send RD API via tunnel, not all access (e.g playback) + - STREMTHRU_STORE_CONTENT_PROXY=*:true,easydebrid:false,premiumize:false + - STREMTHRU_PEER_URI=https://stremthru.13377001.xyz + - STREMTHRU_DATABASE_URI=sqlite://./data/stremthru.db + - STREMTHRU_REDIS_URI=redis://redis:6379 # redis://garnet:6379 + depends_on: + warp: + condition: service_healthy + volumes: + - ./data/stremthru:/app/data + + labels: + - "traefik.enable=true" + - "traefik.http.routers.stremthru.rule=Host(`${STREMTHRU_HOSTNAME?}`)" + - "traefik.http.routers.stremthru.entrypoints=websecure" + - "traefik.http.routers.stremthru.tls.certresolver=myresolver" + - "traefik.http.services.stremthru.loadbalancer.server.port=8080" + - "flame.type=app" + - "flame.name=StremThru" + - "flame.url=https://${STREMTHRU_HOSTNAME}" + profiles: + - stremio + - all + + stremio-jackett: + image: belmeg/stremio-addon-jackett + container_name: stremio-jackett + restart: unless-stopped + expose: + - 3000 + environment: + - PUID=1000 + - PGID=1000 + - TZ=${TZ:-UTC} # Add timezone support + labels: + - "traefik.enable=true" + - "traefik.http.routers.stremiojackett.rule=Host(`${STREMIO_JACKETT_HOSTNAME?}`)" + - "traefik.http.routers.stremiojackett.entrypoints=websecure" + - "traefik.http.routers.stremiojackett.tls.certresolver=myresolver" + - "flame.type=app" + - "flame.name=Stremio-Jackett" + - "flame.url=https://${STREMIO_JACKETT_HOSTNAME}" + profiles: + - stremio + - all + + jackettio: + image: arvida42/jackettio:latest + container_name: jackettio + restart: unless-stopped + expose: + - 4000 + environment: + - JACKETT_URL=http://jackett:9117 + - JACKETT_API_KEY=${JACKETT_API_KEY:-} + - TMDB_ACCESS_TOKEN=${TMDB_ACCESS_TOKEN:-} + volumes: + - ./data/jackettio:/data + labels: + - "traefik.enable=true" + - "traefik.http.routers.jackettio.rule=Host(`${JACKETTIO_HOSTNAME?}`)" + - "traefik.http.routers.jackettio.entrypoints=websecure" + - "traefik.http.routers.jackettio.tls.certresolver=myresolver" + - "flame.type=app" + - "flame.name=Jackettio" + - "flame.url=https://${JACKETTIO_HOSTNAME}" + profiles: + - stremio + - all + + zilean: + image: ipromknight/zilean:latest + restart: unless-stopped + container_name: zilean + tty: true + environment: + Zilean__Database__ConnectionString: Host=postgres;Database=zilean;Username=${POSTGRES_USER:-postgres};Password=${POSTGRES_PASSWORD:-postgres};Include Error Detail=true;Timeout=30;CommandTimeout=3600 + Zilean__Imdb__UseAllCores: true + Zilean__Imdb__UseLucene: true + healthcheck: + test: curl --connect-timeout 10 --silent --show-error --fail http://localhost:8181/healthchecks/ping + timeout: 60s + interval: 30s + retries: 10 + depends_on: + postgres: + condition: service_healthy + volumes: + - zilean-tmp:/tmp + profiles: + - stremio + - debrid_media_server + - all + + prowlarr: + image: ghcr.io/hotio/prowlarr:latest + container_name: prowlarr + environment: + - PUID=1000 + - PGID=1000 + - UMASK=002 + - TZ=${TZ:-UTC} # Add timezone support + expose: + - 9696 + volumes: + - ./data/prowlarr:/config + restart: unless-stopped + labels: + - "traefik.enable=true" + - "traefik.http.routers.prowlarr.rule=Host(`${PROWLARR_HOSTNAME?}`)" + - "traefik.http.routers.prowlarr.entrypoints=websecure" + - "traefik.http.routers.prowlarr.tls.certresolver=myresolver" + - "flame.type=app" + - "flame.name=Prowlarr" + - "flame.url=https://${PROWLARR_HOSTNAME}" + healthcheck: + test: curl -f http://localhost:9696/ping + interval: 30s + timeout: 10s + retries: 3 + start_period: 30s + profiles: + - stremio + - all + - debrid_media_server + - indexers + + jackett: + image: linuxserver/jackett:latest + container_name: jackett + environment: + - PUID=1000 + - PGID=1000 + - TZ=${TZ:-UTC} # Add timezone support + expose: + - 9117 + volumes: + - ./data/jackett:/config + restart: unless-stopped + labels: + - "traefik.enable=true" + - "traefik.http.routers.jackett.rule=Host(`${JACKETT_HOSTNAME?}`)" + - "traefik.http.routers.jackett.entrypoints=websecure" + - "traefik.http.routers.jackett.tls.certresolver=myresolver" + - "flame.type=app" + - "flame.name=Jackett" + - "flame.url=https://${JACKETT_HOSTNAME}" + healthcheck: + test: curl -f http://localhost:9117/health + interval: 30s + timeout: 10s + retries: 3 + start_period: 30s + profiles: + - stremio + - all + - indexers + + nzbhydra2: + container_name: nzbhydra2 + image: ghcr.io/hotio/nzbhydra2:latest + expose: + - 5076 + environment: + - PUID=1000 + - PGID=1000 + - UMASK=002 + - TZ=${TZ:-UTC} + volumes: + - ./data/nzbhydra/config:/config + restart: unless-stopped + labels: + - "traefik.enable=true" + - "traefik.http.routers.nzbhydra2.rule=Host(`${NZBHYDRA2_HOSTNAME?}`)" + - "traefik.http.routers.nzbhydra2.entrypoints=websecure" + - "traefik.http.routers.nzbhydra2.tls.certresolver=myresolver" + - "flame.type=app" + - "flame.name=NZBHydra2" + - "flame.url=https://${NZBHYDRA2_HOSTNAME}" + profiles: + - nzbhydra2 + - all + - indexers + + flaresolverr: + image: ghcr.io/flaresolverr/flaresolverr:latest + container_name: flaresolverr + restart: unless-stopped + healthcheck: + test: ["CMD", "curl", "-f", "http://localhost:8191/health"] + interval: 30s + timeout: 10s + retries: 3 + profiles: + - all + - stremio + - debrid_media_server + + byparr: + image: ghcr.io/thephaseless/byparr + container_name: byparr + restart: unless-stopped + environment: + - LOG_LEVEL=INFO + volumes: + - ./data/byparr/screenshots:/app/screenshots + healthcheck: + test: curl -f http://localhost:8191/health + interval: 5m + timeout: 10s + retries: 3 + start_period: 10s + profiles: + - all + - stremio + - debrid_media_server + + stremio-server: + image: stremio/server:latest + container_name: stremio-server + expose: + - 11470 + restart: unless-stopped + labels: + - "traefik.enable=true" + - "traefik.http.routers.stremio-server.rule=Host(`${STREMIO_SERVER_HOSTNAME?}`)" + - "traefik.http.routers.stremio-server.entrypoints=websecure" + - "traefik.http.routers.stremio-server.tls.certresolver=myresolver" + - "flame.type=app" + - "flame.name=Stremio Server" + - "flame.url=https://${STREMIO_SERVER_HOSTNAME}" + profiles: + - stremio + - all + + # Warp for SOCKS5 proxy for AIOStreams, MediaFlow Proxy, and Prowlarr, MediaFusion + warp: + image: caomingjun/warp + container_name: warp + restart: unless-stopped + device_cgroup_rules: + - 'c 10:200 rwm' + expose: + - 1080 + environment: + - WARP_SLEEP=5 + cap_add: + - NET_ADMIN + sysctls: + - net.ipv6.conf.all.disable_ipv6=0 + - net.ipv4.conf.all.src_valid_mark=1 + volumes: + - ./data/warp:/var/lib/cloudflare-warp + healthcheck: + test: curl -x "socks5h://127.0.0.1:1080" -fsSL "https://www.cloudflare.com/cdn-cgi/trace" | grep -qE "warp=(plus|on)" || exit 1 + interval: 15s timeout: 5s retries: 3 + start_period: 5s + profiles: + - stremio + - all + - debrid_media_server - # https://github.com/5rahim/seanime - # App/Server for anime. - # seanime: - # image: umagistr/seanime - # container_name: seanime - # command: - # volumes: - # - /mnt/user/anime:/anime - # - /mnt/user/downloads:/downloads - # - ./data/seanime:/root/.config/Seanime - # expose: - # - 43211 + mongodb: + image: mongo:latest + container_name: mongodb + restart: unless-stopped + volumes: + - mongodb-data:/data/db + healthcheck: + test: echo 'db.runCommand("ping").ok' | mongosh localhost:27017/test --quiet + interval: 10s + timeout: 10s + retries: 5 + start_period: 40s + profiles: + - stremio + - all + postgres: + image: postgres:17.2-alpine + container_name: postgres + restart: unless-stopped + shm_size: 2G + environment: + PGDATA: /var/lib/postgresql/data/pgdata + POSTGRES_USER: ${POSTGRES_USER:-postgres} + POSTGRES_PASSWORD: ${POSTGRES_PASSWORD:-postgres} + POSTGRES_DB: postgres + volumes: + - postgres-data:/var/lib/postgresql/data/pgdata + healthcheck: + test: [ "CMD-SHELL", "pg_isready -U postgres" ] + interval: 10s + timeout: 5s + retries: 5 + profiles: + - stremio + - all + + redis: + image: redis:latest + container_name: redis + restart: unless-stopped + volumes: + - redis-data:/data + command: redis-server --appendonly yes --save 60 1 + healthcheck: + test: ["CMD", "redis-cli", "ping"] + interval: 10s + timeout: 5s + retries: 5 + profiles: + - stremio + - all + + # garnet: + # image: 'ghcr.io/microsoft/garnet' + # command: + # - --lua + # - --lua-transaction-mode + # ulimits: + # memlock: -1 + # container_name: garnet # restart: unless-stopped - # labels: - # - "traefik.enable=true" - # - "traefik.http.routers.seanime.rule=Host(`${SEANIME_HOSTNAME}`)" - # - "traefik.http.routers.seanime.entrypoints=websecure" - # - "traefik.http.routers.seanime.tls.certresolver=myresolver" - # - "traefik.http.routers.seanime.middlewares=seanime-auth" - # - "traefik.http.middlewares.seanime-auth.basicauth.users=${SEANIME_USERNAME}:${SEANIME_HASHED_PASSWORD}" - # - "flame.type=app" - # - "flame.name=Seanime" - # - "flame.url=https://${SEANIME_HOSTNAME}" - # healthcheck: - # test: wget -qO- http://localhost:43211/api/v1/status - # interval: 5m - # timeout: 10s - # retries: 5 - # start_period: 10s + # # To avoid docker NAT, consider `host` mode. + # # https://docs.docker.com/compose/compose-file/compose-file-v3/#network_mode + # # network_mode: "host" + # volumes: + # - garnet-data:/data + # profiles: + # - stremio + # - all aiostremio: @@ -756,21 +804,52 @@ services: volumes: - ./data/aiostremio:/app/data environment: - ADMIN_USERNAME: ${AIOSTREMIO_ADMIN_USERNAME} - ADMIN_PASSWORD: ${AIOSTREMIO_ADMIN_PASSWORD} - MEDIAFLOW_API_PASSWORD: ${MEDIAFLOW_API_PASSWORD} + ADMIN_USERNAME: ${AIOSTREMIO_ADMIN_USERNAME?} + ADMIN_PASSWORD: ${AIOSTREMIO_ADMIN_PASSWORD?} + MEDIAFLOW_API_PASSWORD: ${MEDIAFLOW_API_PASSWORD:-} REDIS_HOST: redis REDIS_PORT: 6379 REDIS_PASSWORD: DEBRID_API_KEY: ${DEBRID_API_KEY} labels: - "traefik.enable=true" - - "traefik.http.routers.aiostremio.rule=Host(`${AIOSTREMIO_HOSTNAME}`)" + - "traefik.http.routers.aiostremio.rule=Host(`${AIOSTREMIO_HOSTNAME?}`)" - "traefik.http.routers.aiostremio.entrypoints=websecure" - "traefik.http.routers.aiostremio.tls.certresolver=myresolver" - "flame.type=app" - "flame.name=AIOStreams" - "flame.url=https://${AIOSTREMIO_HOSTNAME}" + profiles: + - stremio + - all + + + omg-tv-stremio-addon: + build: + context: https://github.com/mccoy88f/OMG-Premium-TV.git + dockerfile: Dockerfile + image: omg-tv-stremio-addon + container_name: omg-tv-stremio-addon + restart: unless-stopped + expose: + - 7860 + environment: + - PORT=7860 + - HOST=0.0.0.0 + labels: + - "traefik.enable=true" + - "traefik.http.routers.omg-tv-stremio-addon.rule=Host(`${OMG_TV_STREMIO_ADDON_HOSTNAME?}`)" + - "traefik.http.routers.omg-tv-stremio-addon.entrypoints=websecure" + - "traefik.http.routers.omg-tv-stremio-addon.tls.certresolver=myresolver" + - "traefik.http.services.omg-tv-stremio-addon.loadbalancer.server.port=7860" + - "flame.type=app" + - "flame.name=OMG TV Stremio Addon" + - "flame.url=https://${OMG_TV_STREMIO_ADDON_HOSTNAME}" + profiles: + - stremio + - all + + addon-manager: image: reddravenn/stremio-addon-manager:latest @@ -780,13 +859,16 @@ services: - 80 labels: - "traefik.enable=true" - - "traefik.http.routers.addon-manager.rule=Host(`${ADDON_MANAGER_HOSTNAME}`)" + - "traefik.http.routers.addon-manager.rule=Host(`${ADDON_MANAGER_HOSTNAME?}`)" - "traefik.http.routers.addon-manager.entrypoints=websecure" - "traefik.http.routers.addon-manager.tls.certresolver=myresolver" - "flame.type=app" - "flame.name=Stremio Addon Manager" - "flame.url=https://${ADDON_MANAGER_HOSTNAME}" - + profiles: + - stremio + - all + ravenn-catalogs: image: reddravenn/stremio-catalog-providers @@ -796,10 +878,10 @@ services: environment: PORT: 7000 BASE_URL: https://${RAVENN_CATALOGS_HOSTNAME?} - DB_USER: ${POSTGRES_USER} + DB_USER: ${POSTGRES_USER:-postgres} DB_HOST: ravenn-postgres DB_NAME: stremio_catalog_db - DB_PASSWORD: ${POSTGRES_PASSWORD} + DB_PASSWORD: ${POSTGRES_PASSWORD:-postgres} DB_PORT: 5432 DB_MAX_CONNECTIONS: 20 DB_IDLE_TIMEOUT: 30000 @@ -807,8 +889,8 @@ services: REDIS_HOST: ravenn-redis REDIS_PORT: 6379 REDIS_PASSWORD: - TRAKT_CLIENT_ID: ${TRAKT_CLIENT_ID} - TRAKT_CLIENT_SECRET: ${TRAKT_CLIENT_SECRET} + TRAKT_CLIENT_ID: ${TRAKT_CLIENT_ID?} + TRAKT_CLIENT_SECRET: ${TRAKT_CLIENT_SECRET?} TRAKT_HISTORY_FETCH_INTERVAL: 1d CACHE_CATALOG_CONTENT_DURATION_DAYS: 1 CACHE_POSTER_CONTENT_DURATION_DAYS: 7 @@ -831,6 +913,9 @@ services: - "flame.type=app" - "flame.name=Stremio Catalogs" - "flame.url=https://${RAVENN_CATALOGS_HOSTNAME}" + profiles: + - stremio + - all ravenn-trakt: image: reddravenn/stremio-trakt-addon @@ -840,10 +925,10 @@ services: environment: PORT: 7000 BASE_URL: https://${RAVENN_TRAKT_HOSTNAME?} - DB_USER: ${POSTGRES_USER} + DB_USER: ${POSTGRES_USER:-postgres} DB_HOST: ravenn-postgres DB_NAME: stremio_trakt_db - DB_PASSWORD: ${POSTGRES_PASSWORD} + DB_PASSWORD: ${POSTGRES_PASSWORD:-postgres} DB_PORT: 5432 DB_MAX_CONNECTIONS: 20 DB_IDLE_TIMEOUT: 30000 @@ -851,8 +936,8 @@ services: REDIS_HOST: ravenn-redis REDIS_PORT: 6379 REDIS_PASSWORD: - TRAKT_CLIENT_ID: ${TRAKT_CLIENT_ID} - TRAKT_CLIENT_SECRET: ${TRAKT_CLIENT_SECRET} + TRAKT_CLIENT_ID: ${TRAKT_CLIENT_ID?} + TRAKT_CLIENT_SECRET: ${TRAKT_CLIENT_SECRET?} TMDB_CACHE_DURATION: 1d TRAKT_CACHE_DURATION: 1d TRAKT_HISTORY_FETCH_INTERVAL: 1d @@ -876,13 +961,16 @@ services: - "flame.type=app" - "flame.name=Stremio Trakt" - "flame.url=https://${RAVENN_TRAKT_HOSTNAME}" + profiles: + - stremio + - all ravenn-postgres: container_name: ravenn-postgres image: postgres:16.4 environment: - POSTGRES_USER: ${POSTGRES_USER} - POSTGRES_PASSWORD: ${POSTGRES_PASSWORD} + POSTGRES_USER: ${POSTGRES_USER:-postgres} + POSTGRES_PASSWORD: ${POSTGRES_PASSWORD:-postgres} volumes: - ravenn-postgres:/var/lib/postgresql/data healthcheck: @@ -891,6 +979,9 @@ services: timeout: 10s retries: 5 start_period: 10s + profiles: + - stremio + - all ravenn-redis: container_name: ravenn-redis @@ -902,97 +993,561 @@ services: interval: 30s timeout: 10s retries: 5 + start_period: 10s + profiles: + - stremio + - all + + + # https://github.com/5rahim/seanime + # App/Server for anime. + seanime: + image: umagistr/seanime + container_name: seanime + command: + volumes: + - /mnt/user/anime:/anime + - /mnt/user/downloads:/downloads + - /mnt:/mnt + - ./data/seanime:/root/.config/Seanime + expose: + - 43211 + restart: unless-stopped + labels: + - "traefik.enable=true" + - "traefik.http.routers.seanime.rule=Host(`${SEANIME_HOSTNAME?}`)" + - "traefik.http.routers.seanime.entrypoints=websecure" + - "traefik.http.routers.seanime.tls.certresolver=myresolver" + - "traefik.http.routers.seanime.middlewares=seanime-auth" + - "traefik.http.middlewares.seanime-auth.basicauth.users=${SEANIME_USERNAME?}:${SEANIME_HASHED_PASSWORD?}" + - "flame.type=app" + - "flame.name=Seanime" + - "flame.url=https://${SEANIME_HOSTNAME}" + healthcheck: + test: wget -qO- http://localhost:43211/api/v1/status + interval: 5m + timeout: 10s + retries: 5 + start_period: 10s + profiles: + - seanime + - all - # plausible_db: - # image: postgres:16-alpine - # restart: unless-stopped - # container_name: plausible-db + searxng: + container_name: searxng + image: docker.io/searxng/searxng:latest + restart: unless-stopped + expose: + - 8080 + volumes: + - ./data/searxng:/etc/searxng:rw + environment: + - SEARXNG_BASE_URL=https://${SEARXNG_HOSTNAME:-localhost}/ + - UWSGI_WORKERS=${SEARXNG_UWSGI_WORKERS:-4} + - UWSGI_THREADS=${SEARXNG_UWSGI_THREADS:-4} + logging: + driver: "json-file" + options: + max-size: "1m" + max-file: "1" + labels: + - "traefik.enable=true" + - "traefik.http.routers.searxng.rule=Host(`${SEARXNG_HOSTNAME}`)" + - "traefik.http.routers.searxng.entrypoints=websecure" + - "traefik.http.routers.searxng.tls.certresolver=myresolver" + - "flame.type=app" + - "flame.name=SearxNG" + - "flame.url=https://${SEARXNG_HOSTNAME}" + profiles: + - searxng + - all + + plausible_db: + image: postgres:16-alpine + restart: unless-stopped + container_name: plausible-db + volumes: + - plausible-db:/var/lib/postgresql/data + environment: + POSTGRES_USER: ${POSTGRES_USER:-postgres} + POSTGRES_PASSWORD: ${POSTGRES_PASSWORD:-postgres} + healthcheck: + test: ["CMD-SHELL", "pg_isready -U postgres"] + start_period: 1m + profiles: + - plausible + - all + + plausible_events_db: + image: clickhouse/clickhouse-server:24.3.3.102-alpine + restart: unless-stopped + container_name: plausible-events-db + volumes: + - plausible-event-db:/var/lib/clickhouse + - plausible-event-logs:/var/log/clickhouse-server + - ./data/plausible/clickhouse/logs.xml:/etc/clickhouse-server/config.d/logs.xml:ro + - ./data/plausible/clickhouse/ipv4-only.xml:/etc/clickhouse-server/config.d/ipv4-only.xml:ro + - ./data/plausible/clickhouse/low-resources.xml:/etc/clickhouse-server/config.d/low-resources.xml:ro + ulimits: + nofile: + soft: 262144 + hard: 262144 + healthcheck: + test: ["CMD-SHELL", "wget --no-verbose --tries=1 -O - http://127.0.0.1:8123/ping || exit 1"] + start_period: 1m + profiles: + - plausible + - all + + plausible: + image: ghcr.io/plausible/community-edition:latest + container_name: plausible + restart: unless-stopped + command: sh -c "/entrypoint.sh db createdb && /entrypoint.sh db migrate && /entrypoint.sh run" + depends_on: + plausible_db: + condition: service_healthy + plausible_events_db: + condition: service_healthy + volumes: + - plausible-data:/var/lib/plausible + ulimits: + nofile: + soft: 65535 + hard: 65535 + expose: + - 8000 + environment: + TMPDIR: /var/lib/plausible/tmp + BASE_URL: https://${PLAUSIBLE_HOSTNAME?} + SECRET_KEY_BASE: ${PLAUSIBLE_SECRET_KEY_BASE?} + HTTP_PORT: 8000 + labels: + - "traefik.enable=true" + - "traefik.http.routers.plausible.rule=Host(`${PLAUSIBLE_HOSTNAME}`)" + - "traefik.http.routers.plausible.entrypoints=websecure" + - "traefik.http.routers.plausible.tls.certresolver=myresolver" + - "traefik.http.services.plausible.loadbalancer.server.port=8000" + - "flame.type=app" + - "flame.name=Plausible" + - "flame.url=https://${PLAUSIBLE_HOSTNAME}" + profiles: + - plausible + - all + + # ================================================================================================== + # DEBRID MEDIA SERVER + # ================================================================================================== + # This is incomplete and will be updated in the future with a proper guide. + # The below stack does mostly work, but there could be some permission issues which can be resolved with (not recommended): + # - sudo chmod -R 777 /mnt/symlinks + # You should only use the below as a reference. + # blackhole: + # image: ghcr.io/westsurname/scripts/blackhole:latest + # container_name: blackhole + # user: "1000:1000" # volumes: - # - plausible-db:/var/lib/postgresql/data + # - ${REALDEBRID_MOUNT_TORRENTS_PATH:-/dev/null}:${REALDEBRID_MOUNT_TORRENTS_PATH:-/dev/null} + # - ${TORBOX_MOUNT_TORRENTS_PATH:-/dev/null}:${TORBOX_MOUNT_TORRENTS_PATH:-/dev/null} + # - ${BLACKHOLE_BASE_WATCH_PATH}/${BLACKHOLE_SONARR_PATH}:/${BLACKHOLE_BASE_WATCH_PATH}/${BLACKHOLE_SONARR_PATH} + # - ${BLACKHOLE_BASE_WATCH_PATH}/${BLACKHOLE_RADARR_PATH}:/${BLACKHOLE_BASE_WATCH_PATH}/${BLACKHOLE_RADARR_PATH} + # - ./data/blackhole/logs:/app/logs + # - /mnt:/mnt + # env_file: + # - ./data/blackhole/.env # environment: - # POSTGRES_USER: ${POSTGRES_USER} - # POSTGRES_PASSWORD: ${POSTGRES_PASSWORD} - # healthcheck: - # test: ["CMD-SHELL", "pg_isready -U postgres"] - # start_period: 1m - - # plausible_events_db: - # image: clickhouse/clickhouse-server:24.3.3.102-alpine + # - PUID=1000 + # - PGID=1000 + # - UMASK=002 # restart: unless-stopped - # container_name: plausible-events-db - # volumes: - # - plausible-event-db:/var/lib/clickhouse - # - plausible-event-logs:/var/log/clickhouse-server - # - ./data/plausible/clickhouse/logs.xml:/etc/clickhouse-server/config.d/logs.xml:ro - # - ./data/plausible/clickhouse/ipv4-only.xml:/etc/clickhouse-server/config.d/ipv4-only.xml:ro - # - ./data/plausible/clickhouse/low-resources.xml:/etc/clickhouse-server/config.d/low-resources.xml:ro - # ulimits: - # nofile: - # soft: 262144 - # hard: 262144 - # healthcheck: - # test: ["CMD-SHELL", "wget --no-verbose --tries=1 -O - http://127.0.0.1:8123/ping || exit 1"] - # start_period: 1m - - # plausible: - # image: ghcr.io/plausible/community-edition:latest - # container_name: plausible - # restart: unless-stopped - # command: sh -c "/entrypoint.sh db createdb && /entrypoint.sh db migrate && /entrypoint.sh run" # depends_on: - # plausible_db: + # rclone: + # condition: service_started + # sonarr: # condition: service_healthy - # plausible_events_db: + # radarr: # condition: service_healthy + # profiles: + # - debrid_media_server + # - all + + # blackhole4k: + # image: ghcr.io/westsurname/scripts/blackhole:latest + # container_name: blackhole4k + # user: "1000:1000" # volumes: - # - plausible-data:/var/lib/plausible - # ulimits: - # nofile: - # soft: 65535 - # hard: 65535 - # expose: - # - 8000 + # - ${REALDEBRID_MOUNT_TORRENTS_PATH:-/dev/null}:${REALDEBRID_MOUNT_TORRENTS_PATH:-/dev/null} + # - ${TORBOX_MOUNT_TORRENTS_PATH:-/dev/null}:${TORBOX_MOUNT_TORRENTS_PATH:-/dev/null} + # - ${BLACKHOLE_BASE_WATCH_PATH}/${BLACKHOLE_SONARR_PATH}4k:/${BLACKHOLE_BASE_WATCH_PATH}/${BLACKHOLE_SONARR_PATH} + # - ${BLACKHOLE_BASE_WATCH_PATH}/${BLACKHOLE_RADARR_PATH}4k:/${BLACKHOLE_BASE_WATCH_PATH}/${BLACKHOLE_RADARR_PATH} + # - ./data/blackhole4k/logs:/app/logs + # - /mnt:/mnt + # env_file: + # - ./data/blackhole/.env # environment: - # TMPDIR: /var/lib/plausible/tmp - # BASE_URL: https://${PLAUSIBLE_HOSTNAME} - # SECRET_KEY_BASE: ${PLAUSIBLE_SECRET_KEY_BASE} - # HTTP_PORT: 8000 - # labels: - # - "traefik.enable=true" - # - "traefik.http.routers.plausible.rule=Host(`${PLAUSIBLE_HOSTNAME}`)" - # - "traefik.http.routers.plausible.entrypoints=websecure" - # - "traefik.http.routers.plausible.tls.certresolver=myresolver" - # - "traefik.http.services.plausible.loadbalancer.server.port=8000" - # - "flame.type=app" - # - "flame.name=Plausible" - # - "flame.url=https://${PLAUSIBLE_HOSTNAME}" - - - # searxng: - # container_name: searxng - # image: docker.io/searxng/searxng:latest + # - BLACKHOLE_BASE_WATCH_PATH=${BLACKHOLE_BASE_WATCH_PATH} + # - PUID=1000 + # - PGID=1000 + # - UMASK=002 # restart: unless-stopped - # expose: - # - 8080 + # depends_on: + # rclone: + # condition: service_started + # sonarr4k: + # condition: service_healthy + # radarr4k: + # condition: service_healthy + # profiles: + # - debrid_media_server + # - all + + # blackholeanime: + # image: ghcr.io/westsurname/scripts/blackhole:latest + # container_name: blackholeanime + # user: "1000:1000" # volumes: - # - ./data/searxng:/etc/searxng:rw + # - ${REALDEBRID_MOUNT_TORRENTS_PATH:-/dev/null}:${REALDEBRID_MOUNT_TORRENTS_PATH:-/dev/null} + # - ${TORBOX_MOUNT_TORRENTS_PATH:-/dev/null}:${TORBOX_MOUNT_TORRENTS_PATH:-/dev/null} + # - ${BLACKHOLE_BASE_WATCH_PATH}/${BLACKHOLE_SONARR_PATH}anime:/${BLACKHOLE_BASE_WATCH_PATH}/${BLACKHOLE_SONARR_PATH} + # - ${BLACKHOLE_BASE_WATCH_PATH}/${BLACKHOLE_RADARR_PATH}anime:/${BLACKHOLE_BASE_WATCH_PATH}/${BLACKHOLE_RADARR_PATH} + # - ./data/blackholeanime/logs:/app/logs + # - /mnt:/mnt + # env_file: + # - ./data/blackhole/.env # environment: - # - SEARXNG_BASE_URL=https://${SEARXNG_HOSTNAME:-localhost}/ - # - UWSGI_WORKERS=${SEARXNG_UWSGI_WORKERS:-4} - # - UWSGI_THREADS=${SEARXNG_UWSGI_THREADS:-4} - # logging: - # driver: "json-file" - # options: - # max-size: "1m" - # max-file: "1" + # - BLACKHOLE_BASE_WATCH_PATH=${BLACKHOLE_BASE_WATCH_PATH} + # - PUID=1000 + # - PGID=1000 + # - UMASK=002 + # restart: unless-stopped + # depends_on: + # rclone: + # condition: service_started + # sonarranime: + # condition: service_healthy + # radarranime: + # condition: service_healthy + # profiles: + # - debrid_media_server + # - all + + # radarr: + # container_name: radarr + # environment: + # - PUID=1000 + # - PGID=1000 + # expose: + # - 7878 + # hostname: radarr + # image: ghcr.io/hotio/radarr:release + # restart: unless-stopped + # volumes: + # - /mnt:/mnt + # - /opt/radarr:/config + # - /opt/scripts:/scripts + # - /usr/bin/rclone:/usr/bin/rclone # labels: # - "traefik.enable=true" - # - "traefik.http.routers.searxng.rule=Host(`${SEARXNG_HOSTNAME}`)" - # - "traefik.http.routers.searxng.entrypoints=websecure" - # - "traefik.http.routers.searxng.tls.certresolver=myresolver" + # - "traefik.http.routers.radarr.rule=Host(`${RADARR_HOSTNAME}`)" + # - "traefik.http.routers.radarr.entrypoints=websecure" + # - "traefik.http.routers.radarr.tls.certresolver=myresolver" + # - "traefik.http.services.radarr.loadbalancer.server.port=7878" # - "flame.type=app" - # - "flame.name=SearxNG" - # - "flame.url=https://${SEARXNG_HOSTNAME}" + # - "flame.name=Radarr" + # - "flame.url=https://${RADARR_HOSTNAME}" + # depends_on: + # - rclone + # healthcheck: + # test: ["CMD-SHELL", "curl -s http://localhost:7878/ping | grep -q '\"status\": \"OK\"' || exit 1"] + # interval: 1m + # timeout: 10s + # retries: 5 + # start_period: 10s + # profiles: + # - debrid_media_server + # - all + + + # radarr4k: + # container_name: radarr4k + # expose: + # - 7878 + # environment: + # - PUID=1000 + # - PGID=1000 + # image: ghcr.io/hotio/radarr:release + # restart: unless-stopped + # volumes: + # - /mnt:/mnt + # - /opt/radarr4k:/config + # - /opt/scripts:/scripts + # - /usr/bin/rclone:/usr/bin/rclone + # labels: + # - "traefik.enable=true" + # - "traefik.http.routers.radarr4k.rule=Host(`${RADARR4K_HOSTNAME}`)" + # - "traefik.http.routers.radarr4k.entrypoints=websecure" + # - "traefik.http.routers.radarr4k.tls.certresolver=myresolver" + # - "traefik.http.services.radarr4k.loadbalancer.server.port=7878" + # - "flame.type=app" + # - "flame.name=Radarr4k" + # - "flame.url=https://${RADARR4K_HOSTNAME}" + # depends_on: + # - rclone + # healthcheck: + # test: ["CMD-SHELL", "curl -s http://localhost:7878/ping | grep -q '\"status\": \"OK\"' || exit 1"] + # interval: 1m + # timeout: 10s + # retries: 5 + # start_period: 10s + # profiles: + # - debrid_media_server + # - all + + # radarranime: + # container_name: radarranime + # expose: + # - 7878 + # image: ghcr.io/hotio/radarr:release + # environment: + # - PUID=1000 + # - PGID=1000 + # restart: unless-stopped + # volumes: + # - /mnt:/mnt + # - /opt/radarranime:/config + # - /opt/scripts:/scripts + # - /usr/bin/rclone:/usr/bin/rclone + # labels: + # - "traefik.enable=true" + # - "traefik.http.routers.radarranime.rule=Host(`${RADARRANIME_HOSTNAME}`)" + # - "traefik.http.routers.radarranime.entrypoints=websecure" + # - "traefik.http.routers.radarranime.tls.certresolver=myresolver" + # - "traefik.http.services.radarranime.loadbalancer.server.port=7878" + # - "flame.type=app" + # - "flame.name=RadarrAnime" + # - "flame.url=https://${RADARRANIME_HOSTNAME}" + # depends_on: + # - rclone + # healthcheck: + # test: ["CMD-SHELL", "curl -s http://localhost:7878/ping | grep -q '\"status\": \"OK\"' || exit 1"] + # interval: 1m + # timeout: 10s + # retries: 5 + # start_period: 10s + # profiles: + # - debrid_media_server + # - all + + # sonarr: + # container_name: sonarr + # expose: + # - 8989 + # image: ghcr.io/hotio/sonarr:release + # restart: unless-stopped + # environment: + # - PUID=1000 + # - PGID=1000 + # labels: + # - "traefik.enable=true" + # - "traefik.http.routers.sonarr.rule=Host(`${SONARR_HOSTNAME}`)" + # - "traefik.http.routers.sonarr.entrypoints=websecure" + # - "traefik.http.routers.sonarr.tls.certresolver=myresolver" + # - "traefik.http.services.sonarr.loadbalancer.server.port=8989" + # - "flame.type=app" + # - "flame.name=Sonarr" + # - "flame.url=https://${SONARR_HOSTNAME}" + # volumes: + # - /mnt:/mnt + # - /opt/sonarr:/config + # - /opt/scripts:/scripts + # - /usr/bin/rclone:/usr/bin/rclone + # depends_on: + # - rclone + # healthcheck: + # test: ["CMD-SHELL", "curl -s http://localhost:8989/ping | grep -q '\"status\": \"OK\"' || exit 1"] + # interval: 1m + # timeout: 10s + # retries: 5 + # start_period: 10s + # profiles: + # - debrid_media_server + # - all + + # sonarr4k: + # container_name: sonarr4k + # environment: + # - PUID=1000 + # - PGID=1000 + # expose: + # - 8989 + # image: ghcr.io/hotio/sonarr:release + # restart: unless-stopped + # labels: + # - "traefik.enable=true" + # - "traefik.http.routers.sonarr4k.rule=Host(`${SONARR4K_HOSTNAME}`)" + # - "traefik.http.routers.sonarr4k.entrypoints=websecure" + # - "traefik.http.routers.sonarr4k.tls.certresolver=myresolver" + # - "traefik.http.services.sonarr4k.loadbalancer.server.port=8989" + # - "flame.type=app" + # - "flame.name=Sonarr4k" + # - "flame.url=https://${SONARR4K_HOSTNAME}" + # volumes: + # - /mnt:/mnt + # - /opt/sonarr4k:/config + # - /opt/scripts:/scripts + # - /usr/bin/rclone:/usr/bin/rclone + # depends_on: + # - rclone + # healthcheck: + # test: ["CMD-SHELL", "curl -s http://localhost:8989/ping | grep -q '\"status\": \"OK\"' || exit 1"] + # interval: 1m + # timeout: 10s + # retries: 5 + # start_period: 10s + # profiles: + # - debrid_media_server + # - all + + + # sonarranime: + # container_name: sonarranime + # expose: + # - 8989 + # image: ghcr.io/hotio/sonarr:release + # environment: + # - PUID=1000 + # - PGID=1000 + # restart: unless-stopped + # labels: + # - "traefik.enable=true" + # - "traefik.http.routers.sonarranime.rule=Host(`${SONARRANIME_HOSTNAME}`)" + # - "traefik.http.routers.sonarranime.entrypoints=websecure" + # - "traefik.http.routers.sonarranime.tls.certresolver=myresolver" + # - "traefik.http.services.sonarranime.loadbalancer.server.port=8989" + # - "flame.type=app" + # - "flame.name=SonarrAnime" + # - "flame.url=https://${SONARRANIME_HOSTNAME}" + # volumes: + # - /mnt:/mnt + # - /opt/sonarranime:/config + # - /opt/scripts:/scripts + # - /usr/bin/rclone:/usr/bin/rclone + # depends_on: + # - rclone + # healthcheck: + # test: ["CMD-SHELL", "curl -s http://localhost:8989/ping | grep -q '\"status\": \"OK\"' || exit 1"] + # interval: 1m + # timeout: 10s + # retries: 5 + # start_period: 10s + # profiles: + # - debrid_media_server + # - all + + # autosync: + # image: ghcr.io/pukabyte/autosync:latest + # container_name: autosync + # expose: + # - 3536 + # volumes: + # - ./data/autosync/config.yaml:/app/config.yaml:ro + # restart: unless-stopped + # labels: + # - "traefik.enable=true" + # - "traefik.http.routers.autosync.rule=Host(`${AUTOSYNC_HOSTNAME}`)" + # - "traefik.http.routers.autosync.entrypoints=websecure" + # - "traefik.http.routers.autosync.tls.certresolver=myresolver" + # - "traefik.http.services.autosync.loadbalancer.server.port=3536" + # - "flame.type=app" + # - "flame.name=AutoSync" + # - "flame.url=https://${AUTOSYNC_HOSTNAME}" + # profiles: + # - debrid_media_server + # - all + # plex: + # image: plexinc/pms-docker:latest + # container_name: plex + # restart: unless-stopped + # ports: + # - 1900/udp + # - "32400:32400/tcp" + # - 32410/udp + # - 32412/udp + # - 32413/udp + # - 32414/udp + # - 32469/tcp + # - 8324/tcp + # expose: + # - 32400 + # environment: + # - PLEX_UID=1000 + # - PLEX_GID=1000 + # - PLEX_CLAIM=${PLEX_CLAIM} + # - TZ=Europe/London + # volumes: + # - /dev/shm:/dev/shm + # - /mnt/local/transcodes/plex:/transcode + # - /mnt:/mnt + # - /opt/plex:/config + # - /opt/scripts:/scripts + # labels: + # - "traefik.enable=true" + # - "traefik.http.routers.plex.rule=Host(`${PLEX_HOSTNAME}`)" + # - "traefik.http.routers.plex.entrypoints=websecure" + # - "traefik.http.routers.plex.tls.certresolver=myresolver" + # - "traefik.http.services.plex.loadbalancer.server.port=32400" + # - "traefik.http.middlewares.plex-https-redirect.redirectscheme.scheme=https" + # - "traefik.http.routers.plex.middlewares=plex-https-redirect" + # - "flame.type=app" + # - "flame.name=Plex" + # - "flame.url=https://${PLEX_HOSTNAME}" + # depends_on: + # - rclone + # profiles: + # - debrid_media_server + # - all + # zurg: + # image: ghcr.io/debridmediamanager/zurg-testing:v0.9.3-final + # container_name: zurg + # restart: unless-stopped + # healthcheck: + # test: curl -f localhost:9999/dav/version.txt || exit 1 + # ports: + # - 9999:9999 + # volumes: + # - ./data/zurg/config.yml:/app/config.yml + # - ./data/zurg/data:/app/data + # profiles: + # - debrid_media_server + # - all + + # rclone: + # image: rclone/rclone:latest + # container_name: rclone + # restart: unless-stopped + # environment: + # TZ: ${TZ:-UTC} + # PUID: 1000 + # PGID: 1000 + # volumes: + # - /mnt/remote/realdebrid:/data:rshared + # - ./data/zurg/rclone.conf:/config/rclone/rclone.conf + # - /mnt:/mnt + # cap_add: + # - SYS_ADMIN + # security_opt: + # - apparmor:unconfined + # devices: + # - /dev/fuse:/dev/fuse:rwm + # depends_on: + # zurg: + # condition: service_healthy + # restart: true + # command: "mount zurg: /data --allow-non-empty --allow-other --uid=1000 --gid=1000 --umask=002 --dir-cache-time 10s" + # profiles: + # - debrid_media_server + # - all + volumes: zilean-tmp: redis-data: @@ -1000,8 +1555,15 @@ volumes: mongodb-data: ravenn-postgres: ravenn-redis: - # plausible-db: - # plausible-data: - # plausible-event-db: - # plausible-event-logs: - # # garnet-data: + plausible-db: + plausible-data: + plausible-event-db: + plausible-event-logs: + garnet-data: + + + +networks: + default: + name: ${DOCKER_NETWORK:-aio_default} + external: ${DOCKER_NETWORK_EXTERNAL:-false} \ No newline at end of file diff --git a/install.sh b/install.sh new file mode 100644 index 0000000..2297d58 --- /dev/null +++ b/install.sh @@ -0,0 +1,6 @@ +curl https://raw.githubusercontent.com/Viren070/stremio-addons-docker-compose-template/refs/heads/main/.env -o .env +curl https://raw.githubusercontent.com/Viren070/stremio-addons-docker-compose-template/refs/heads/main/compose.yaml -o compose.yaml +mkdir -p ./data/mediafusion +mkdir -p ./data/honey +curl https://raw.githubusercontent.com/Viren070/stremio-addons-docker-compose-template/refs/heads/main/honey.config.json -o ./data/honey/config.json +curl https://raw.githubusercontent.com/Viren070/stremio-addons-docker-compose-template/refs/heads/main/.env.mediafusion -o ./data/mediafusion/.env \ No newline at end of file