Skip to main content

Template

This guide will show you how to use my template Docker Compose file to quickly deploy services.

Having followed my previous guides, you should have a basic understanding of how to deploy services with Docker Compose. This section will focus on using my template compose.yaml.

What is it for?

The "template" is just a standard compose.yaml file that contains a bunch of services in one file. It makes use of environment variables so that the compose.yaml file can be used by anyone without having to edit the file itself. Only the .env file needs to be edited to fill in the necessary environment variables.

This compose.yaml uses Traefik as a reverse proxy to route traffic to the correct service. All our services are put behind Traefik, which allows us to access all services on the same port (80/443) and Traefik will route the traffic to the correct service. This means that port 80 and 443 are the only ports that need to be open on your server.

A quick summary of what is included in this template is:

  • Default server management services
  • Stremio related services
  • Seanime
  • Minecraft server
  • Plausible analytics
  • Vaultwarden
  • SearXNG
What is the full list of services that are available in the template?

Traefik is included as our reverse proxy. It is used to route traffic to the correct service. It means that you can access all services on the same port (80/443) and Traefik will route the traffic to the correct service. It also allows for automatic SSL certificate generation using Let's Encrypt, which is required for Stremio addons as Stremio requires HTTPS to install addons.

To help with managing the server, the following services are included:

  • Dozzle - A simple real time log viewer for docker containers with a web based UI.
  • Watchtower - Automatically update your Docker containers to the latest version.
  • Uptime Kuma - A self-hosted monitoring tool for your services.
    • This is useful for monitoring the status of your services and receiving alerts. You do have to set up your services manually, but this can be done through the web interface.
  • Dash. - A simple dashboard to monitor your server.
  • Honey - Beautiful, customisable, startpage for your server to access all your services.
  • Flame - A simple startpage, requiring minimal setup, for your server.

I have provided 2 startpages, Honey and Flame. You can choose which one you want to use. You can also use both if you want. The reason being that Honey requires a bit more setup, as you need to edit honey's config.json file and replace the urls with your own. I have provided my template which has all the images, so its not too hard to do. Flame is a bit more simple and requires no setup. But, it also has no images and you would have to provide that yourself for each service. Honey, IMO, looks far better.

Stremio Addons and Utilities
Debrid Media Server
danger

These services require a lot of work to set up, and documentation for it is not finished yet, I suggest only using this template as a reference

Indexers and Utilities
  • Prowlarr
  • Jackett
  • NZBHydra2
    • This is an indexer for NZB indexers. Which is mostly useful for Torbox users with the BYOI feature.
  • Zilean
    • This is a DMM scraper.
  • FlareSovlerr / Byparr
    • Useful for bypassing Cloudflare's anti-bot protection for scraping purposes.
  • Cloudflare Warp
    • This is a Cloudflare Warp client. It allows you to bypass blocks. For example, Torrentio blocks requests from some VPS providers (like Oracle Cloud). In this case, you can use Cloudflare Warp to proxy your requests through it which can be used for AIOStreams, Prowlarr, etc.

This template also includes other applications:

  • Seanime - Beautiful open-source media server with a web interface and desktop app for anime and manga.
  • SearXNG - Privacy-respecting metasearch engine.
  • Plausible Analytics - Simple, privacy-friendly and open-source web analytics. (Used on this site)
  • Minecraft server
  • Vaultwarden - An unofficial Bitwarden compatible server written in Rust.

Profiles

My compose.yaml makes use of profiles to make it easier to deploy only specific services. A profile is a group of services that are related to each other. For example, the stremio profile contains services that are related to Stremio.

The profiles are as follows:

  • default
  • stremio
  • debrid_media_server
  • nzbhydra2
  • indexers
  • seanime
  • plausible
  • searxng
  • all

The default profile cannot be specified, it will always be included no matter what profiles you choose or don't choose. Other profiles contain services that are related to the profile name.

What services are included in each profile?

The obvious ones are as follows:

  • all includes all services.
  • nzbhydra2 only includes NZBHydra2.
  • seanime only includes Seanime.
  • plausible only includes Plausible.
  • searxng only includes SearXNG.

The rest can be seen in the table below:

Service / Profiledefaultstremiodebrid_media_serverindexers
Traefik---
Flame---
dash.---
honey---
Uptime Kuma---
Watchtower---
Dozzle---
AIOStreams
TMDB Addon
Easynews+
Comet
MediaFlow Proxy
MediaFusion
StremThru
Stremio-Jackett
Jackettio
Zilean
Prowlarr
Jackett
NZBHydra2
Flaresolverr
Byparr
Stremio Server
Warp
AIOStremio
OMG TV Addon
Addon Manager
Stremio Catalogs
Stremio Trakt
Seanime
SearXNG
Plausible
Blackholes
Radarr/Sonarr
Plex
Zurg
RClone

After you have chosen which profiles you are going to use, keep them in mind, as you will now need to fill in the .env file with the necessary environment variables.

Setup

  1. First, you should ensure Docker is installed per https://get.docker.com/ (If you followed my previous guides, you should already have Docker installed).

  2. Next, you should make sure both port 80 and 443 are open on your server. This is required for Traefik to work correctly.

    tip

    If you are using Oracle Cloud, you can follow these steps to open the ports.

  3. Then, connect to your server on a terminal. Typically using the command below, or if you created a Windows Terminal profile, you can use that.

    ssh ubuntu@your-server-ip
  4. Next, you should clone the repository by running the following command:

    git clone https://github.com/Viren070/docker-compose-vps-template.git docker-apps

    This will clone the repository into a directory called docker-apps.

  5. Next, you should navigate into the directory by running the following command:

    cd docker-apps
  6. You can now confirm that the files have been downloaded by running the following command:

    ls -a

    You should see the following files and directories:

    . ..  .env  compose.yaml  data
  7. Next, you should edit the .env file to fill in the necessary environment variables. You can do this by running the following command.

    nano .env
    • You should only fill in the environment variables for the services you are going to deploy. However, note that if you want to omit a service from a profile, you will have to edit the compose.yaml file. This is detailed later. Otherwise, the full profile environment variables will be required. e.g. If you are using the stremio profile, all the environment variables under the stremio profile will be required, unless you edit the compose.yaml file.
    tip

    If you are having issues using a CLI text editor like nano, you can instead edit the file on your local machine using a text editor like Notepad++ or Visual Studio Code. And then upload the file to your server using scp or simply copy-pasting the contents.

  8. Now, you should ensure that for every hostname you set in the .env file, you have a DNS A record handling it pointing it to your servers public IP.

    warning

    If you are using Cloudflare, you should disable the proxy (orange cloud) for the DNS record. This is because Traefik needs to connect directly to your server.

    tip

    You can create a wildcard DNS by using an A record with * as the subdomain. e.g. *.yourdomain.com. This will allow you to use any subdomain while only needing to create one DNS record.

  9. After you have filled in the environment variables, you can now deploy the services. You should make sure you defined the COMPOSE_PROFILES environment variables as this will determine which profiles are started. If you did not set it, then only the services in the default profile would be started.

    Then, you can run the following command:

    docker compose up -d
    • You can also specify the profiles through the --profile flag, e.g.
      docker compose --profile stremio --profile seanime up -d
  10. After running the command, it may take some time for the services to start up. Once it is done, you should be able to access them at the hostnames you set in the .env file.

Modifying the profiles

You may want to deploy only 1 or 2 services from a profile, or maybe you want to omit a few services from a profile.

This section will show you how to do that.

I want to use the stremio profile but don't want the TMDB Addon

Within the compose.yaml file, you can remove the stremio profile from the tmdb-addon service.

  services:
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 <--- Remove this line to not deploy the TMDB Addon in the stremio profile
- all

I only want to deploy AIOStreams and MediaFlow

You can start by only deploying the default services

sudo docker compose up -d

Then you can deploy the services you want by specifying the services you want to deploy using their service names which can be found in the compose.yaml file.

sudo docker compose up -d aiostreams mediaflow
warning

For this specific example, you would also have to edit the environment variables for AIOStreams to not refer to the self hosted instances of the other addons.

If your VPS is blocked by Torrentio, so include that as well.