Skip to content

Latest commit

ย 

History

7 Commits

Folders and files

NameName
Last commit message
Last commit date
ย 
ย 
ย 
ย 
ย 
ย 

Repository files navigation

This document is intended to provide a docker-compose of the Docker Containers I am using on my Synology DS1513+ and 2 Mini PCs as my home server. If you are using a different device, that should be fine as well, just make sure you define the $PERSIST location in your .env file that corresponds to the docker folder on your host device.

If you are not familiar with how to use a compose file, you can change the compose to docker CLI command by using a docker-compose Converter

Below are some ports that I have found to be reserved and cannot be used on my host, I always avoid using them

A CONSOLIDATED docker-compose.yml FILE CAN BE FOUND HERE , AND TO START, JUST TYPE IN docker-compose up -d AND ALL CONTAINERS WILL START. NOTE THAT SOME CONTAINERS REQUIRES CONFIGURATION BEFORE STARTING, AS WELL AS MAKING SURE ALL REQUIRED FOLDERS ARE CREATED ON THE HOST MACHINE WITH THE CORRESPONDING NAMES AS IN THE COMPOSE

RESERVED PORTS NOT BE USED IN ANY CONTAINER

80        HTTP
443       HTTPS
1234      SSH
1986      DSM HTTP
1991      DSM HTTPS
5050      Unknown Port Used
5432      Unknown Port Used
7575      Reserved for the Docker Dashboard (personal choice)
8080      TCP/UDP

DATABASES

Container Port Description Docker Image
Authelia-Redis 6379 Used for Authelia redis:alpine
Bazarr-Postgres - Used for Bazarr postgres:18-alpine
Databases-Backup 6379 Backups All Redis, MariaDB and Postgres using CRON tiredofit/db-backup:latest
DockHand-Postgres - Used for DockHand postgres:18-alpine
HomeAssistant-MariaDB - Used for HomeAssistant jbergstroem/mariadb-alpine:latest
Immich-Redis - Used for Immich redis:alpine
Immich-Postgres - Postgres extension provides vector similarity search functions ghcr.io/immich-app/postgres:16-vectorchord0.3.0-pgvectors0.3.0
InfluxDB 3004 Time series database influxdb:alpine
Invidious-Postgres - Used for Invidious postgres:alpine
Loki 3002 Multi-tenant log aggregation system grafana/loki:latest
Manyfold-Postgres - Used for Manyfold postgres:18-alpine
Manyfold-Redis - Used for Manyfold redis:alpine
NextCloud-MariaDB - Used for NextCloud (long-term-support) mariadb:lts
NextCloud-Redis - Used for NextCloud redis:alpine
MariaDB 3306 MariaDB Database (MySQL Clone) jbergstroem/mariadb-alpine:10.6.13
Paperless-NGX-Postgres - Used for Paperless-NGX postgres:16-alpine
Paperless-NGX-Redis - Used for Paperless-NGX redis:alpine
Pastefy-MariaDB - Used for Pastefy jbergstroem/mariadb-alpine:latest
ProjectSend-MariaDB - Used for ProjectSend jbergstroem/mariadb-alpine:latest
Promtail - Sending log data to Loki grafana/promtail:latest
Prawlarr-Postgres - Used for Prawlarr postgres:18-alpine
Radarr-Postgres - Used for Radarr postgres:18-alpine
Seerr-Postgres - Used for Seerr postgres:18-alpine
Sonarr-Postgres - Used for Sonrr postgres:18-alpine
TracCar-MariaDB 3307 Used for TracCar jbergstroem/mariadb-alpine:latest
Tracearr-Postgres - Used for Tracearr timescale/timescaledb-ha:pg18.1-ts2.25.0
Tracearr-Redis - Used for Tracearr redis:alpine

DOCKER RELATED

Container Port Description Docker Image
Backrest 9898 A web UI and orchestrator for restic backup garethgeorge/backrest:latest
Diun - Docker images status monitor and notifier using CRON crazymax/diun:latest
Docker Socket Proxy 2375 A security-enhanced proxy for the Docker Socket tecnativa/docker-socket-proxy:latest
DockHand 9000 All-in-One Docker Management Tool replacing Portainer fnsys/dockhand:latest
Monocker - Live MONitor doCKER with notifications petersem/monocker:latest
Portainer-EE 9000,9443,8000 Docker management tool (Business Edition) portainer/portainer-ee:alpine
PruneMate 7676 Docker image & resource cleanup helper, on a schedule! anoniemerd/prunemate:latest
WatchTower - Auto-Update containers with latest images nickfedor/watchtower:latest

LINKS AND PAGE ORGANISATION

Container Port Description Docker Image
Homarr 5050 Links manager ghcr.io/homarr-labs/homarr:latest
Karakeep 3421 A self-hostable bookmark-everything app with a touch of AI ghcr.io/karakeep-app/karakeep:latest

MEDIA PLAYING

Container Port Description Docker Image
AudioBookShelf 13378 Self-hosted audiobook and podcast server ghcr.io/advplyr/audiobookshelf:latest
ErsatzTV 8407 Transform media library into a personalized live TV experience ghcr.io/ersatztv/legacy:latest
Jellyfin 8096 Media server jellyfin/jellyfin:latest
NaviDrome 4533 Web-based music collection server and streamer ghcr.io/navidrome/navidrome:latest
Maloja 42010 Music scrobble for personal listening statistics krateng/maloja:latest
SubSyncarr-Plus 3333 An automated subtitle synchronization tool tomtomw123/subsyncarr-plus:latest
Tracearr 3300 Real-time monitoring for Plex, Jellyfin, and Emby servers ghcr.io/connorgallopo/tracearr:latest

NETWORKING AND SECURITY

Container Port Description Docker Image
Authelia 9091 2Factor Authentication authelia/authelia:latest
Cloudflared - A secure way to publibly connect to local network cloudflare/cloudflared:latest
Cloudflared-Mon - Cloudflare Zero Tunnel health monitor techblog/cloudflared-mon:latest
Dash. 7512 Modern server dashboard monitor for the host mauricenino/dashdot:latest
NetAlertX 20211 Monitoring WIFI/LAN and alerting of new devices jokobsk/netalertx:latest
PeaNUT 8999 A tiny dashboard for Network UPS Tools brandawg93/peanut:latest
Speedtest-Tracker 8765,8766 A self-hosted internet performance tracking application lscr.io/linuxserver/speedtest-tracker:latest
Uptime-Kuma 3001 Monitoring tool for local DNS louislam/uptime-kuma:latest
VaultWarden-Backup - Backs up database for VaultWarden bruceforce/vaultwarden-backup:latest

PROGRAMMING

Container Port Description Docker Image
ESPHome 6052,6123 Programming tool for ESP82 chipsets esphome/esphome:latest
FlareSolverr 8191 A proxy server to bypass Cloudflare and DDoS-GUARD protection ghcr.io/flaresolverr/flaresolverr:latest
Karakeep-MeiliSearch 7700 A lightning-fast search engine getmeili/meilisearch:v1.13.3
JellySearch-MeiliSearch 7700 A lightning-fast search engine getmeili/meilisearch:v1.33.3
MQTT 1883,9001 Mosquitto broker eclipse-mosquitto:latest
OctoPrint 3015 A snappy web interface for your 3D printer! octoprint/octoprint:latest
TasmoAdmin 9999 Manages Sonoff Devices flashed with Tasmota raymondmm/tasmoadmin:latest
TasmoBackup 8259 Backups/manages Sonoff Devices flashed with Tasmota danmed/tasmobackupv1:latest
VSCodium-Web 8000 Visual Studio Code editor lscr.io/linuxserver/vscodium-web:latest
Zigbee2MQTT 9002 Convert Zigbee protocol to Mosquitto koenkk/zigbee2mqtt:latest

SYSTEM MONITORING AND MANAGEMENT

Container Port Description Docker Image
FileBrowser 7888 A modern web-based file browser gtstef/filebrowser:stable
HomeAssistant 8123 Smart home monitoring and management ghcr.io/home-assistant/home-assistant:stable

SELF-HOSTED

Container Port Description Docker Image
Apprise 8001 Push notification using POST lscr.io/linuxserver/apprise-api:latest
Bazarr 6767 Automating subtitles requests lscr.io/linuxserver/bazarr:latest
Checkrr 8585 Scans your library files for corrupt media aetaric/checkrr:latest
DeGoog 4444 Search aggregator that queries multiple engines ghcr.io/fccview/degoog:latest
DumbAssets 3000 Asset tracker for physical assets, components, and warranties dumbwareio/dumbassets:latest
ExcaliDraw 3765 Virtual whiteboard for sketching hand-drawn like diagrams excalidraw/excalidraw:latest
Gotify 9999 A self-hosted push notification service replacing Pushover gotify/server:latest
Hauk 9435 A fully open source self-hosted location sharing service bilde2910/hauk:latest
Immich 8212 A high performance self-hosted photo and video backup solution ghcr.io/immich-app/immich-server:release
Immich Folder Album Creator - Automatically create albums in Immich from a folder structure salvoxia/immich-folder-album-creator:latest
Immich-Machine-Learning - ML that alleviate performance issues on low-memory systems ghcr.io/immich-app/immich-machine-learning:release
Kavita 8778 A rocket fueled self-hosted digital library for ebook jvmilazz0/kavita:latest
Manyfold 7214 Web application for managing a collection of 3D models ghcr.io/manyfold3d/manyfold:latest
Mozhi 6455 An alternative frontend for many translation engines codeberg.org/aryak/mozhi:latest
NextCloud 8082 A safe home for all your data nextcloud:latest
NextCloud-Cron - Apache Web server for NextCloud nextcloud:apache
PairDrop 3005 Local file sharing in your web browser inspired by AirDrop lscr.io/linuxserver/pairdrop:latest
Paperless-NGX 8777 A document management system ghcr.io/paperless-ngx/paperless-ngx:latest
Paperless-NGX-Gotenberg - API for converting numerous document formats into PDF files gotenberg/gotenberg:latest
Paperless-NGX-Tika - Detects and extracts metadata/text for different file types docker.io/apache/tika:latest
PasteFy 9980 Pastebin interaapps/pastefy:latest
ProjectSend 8516 Clients-oriented, private file sharing web application lscr.io/linuxserver/projectsend:latest
Prowlarr 9696 Indexer manager/proxy to integrate with your various PVR apps lscr.io/linuxserver/prowlarr:latest
QR Code 8895 UI to generate a QR Code from a provided URL (supports Wifi SSID) bizzycolah/qrcode-generator:latest
Quillnote-Server 3020 Self hosated and deployed NextCloud DB server for Quillpad arunk140/quillnote-server
Radarr 7878 Automating movies requests lscr.io/linuxserver/radarr:latest
Seerr 5055 Managing requests for your media library ghcr.io/seerr-team/seerr:latest
Sonarr 8989 Automating TV shows requests lscr.io/linuxserver/sonarr:latest
Squoosh 7701 Ultimate image optimiser with compress and compare dko0/squoosh:latest
SyncThing 8384 Syncing platfrom between Mobile-NAS syncthing/syncthing:1.26
SMTP-to-Gotify 2525 Forwards SMTP messages (emails) to Gotify (mainly used for Synology) imoshtokill/smtp-to-gotify-docker:latest
TinyMediaManager 4000,5900 Organize movie and TV show collections tinymediamanager/tinymediamanager:latest
TracCar 8082,5055 GPS Tracking System traccar/traccar:alpine
Transmission 9091 A lightweight BitTorrent client lscr.io/linuxserver/transmission:latest
VaultWarden 8089,3012 Password management application vaultwarden/server:alpine
wDOSg 3003 (web DOS games) Centralized DOS game library soulraven1980/wdosg:latest
YTPTube 8081 A WebUI for yt-dlp with concurrent downloads support ghcr.io/arabcoders/ytptube:latest

To begin with, I defined my own networks to use, which makes my setup easier for IP allocation of some containers.

version: '3'

networks:

# Bridge Network
  my_bridge:
    name: my_bridge
    driver: bridge
    attachable: true
    ipam:
     config:
       - subnet: $BRIDGE_SUBNET
         gateway: $BRIDGE_GATEWAY

# MacVLAN Network
  dockervlan:
    name: dockervlan
    driver: macvlan
    driver_opts:
      parent: $ETHCARD
      macvlan_mode: bridge
    ipam:
      config:
        - subnet: "$SUBNET"
          gateway: "$MACVLAN_GATEWAY"
          ip_range: "$MACVLAN_RANGE"

services:

Now assuming that every docker-compose file you use, will have the standard parameters on top, then you just paste each compose below that corresponds to your need. I have included those in the network definition above.

You can add them to each file separately if needed. I assume that you will be using 1 file for all of the containers, and then docker-compose up -d CONTAINER_NAME to start every single container. You can add as many CONTAINER_NAME as needed i.e.

docker-compose up -d adguard will start the Adguard container only. If you use docker-compose up -d then all containers in the compose file will be started in one command.

version: '3'

# name: $STACK_NAME

services:

AppRise

  apprise:
    container_name: apprise-api
    restart: $ALWAYS_ON_POLICY
    hostname: apprise
    environment:
      - PUID=$PUID
      - PGID=$PGID
      - TZ=$TZ
    networks:
      my_bridge:
    ports:
      - 8001:8000
    volumes:
      - $PERSIST/apprise:/config
    image: 'lscr.io/linuxserver/apprise-api:latest'

๐Ÿ”ผ Back to top

AudioBookShelf

  audiobookshelf:
    container_name: audiobookshelf
    restart: $RESTART_POLICY
    hostname: audiobookshelf
    environment:
      - TZ=$TZ
    volumes:
      - $MEDIA_PATH/AudioBooks:/audiobooks
      - $MEDIA_PATH/Podcasts:/podcasts
      - $PERSIST/audiobookshelf/config:/config
      - $PERSIST/audiobookshelf/metadata:/metadata
    ports:
      - 13378:80
    networks:
      my_bridge:
    image: 'ghcr.io/advplyr/audiobookshelf:latest'

๐Ÿ”ผ Back to top

Authelia

  authelia:
    container_name: authelia    
    restart: $ALWAYS_ON_POLICY
    hostname: authelia
    environment:
      - TZ=$TZ
    volumes:
      - $PERSIST/authelia/config:/config
      - $PERSIST/authelia/log:/var/log/authelia
      - $PERSIST/authelia/assets:/etc/authelia/assets
    ports:
      - 9091:9091
    networks:
      my_bridge:
    healthcheck:
      disable: true
    depends_on:
      authelia-redis:
        condition: service_started
    labels: 
      monocker.enable: $MONOCKER_ENABLE
    image: 'authelia/authelia:latest'

๐Ÿ”ผ Back to top

Authelia-Redis

  authelia-redis:
    container_name: authelia-redis
    restart: $ALWAYS_ON_POLICY
    hostname: authelia-redis
    environment:
      - TZ=$TZ
    volumes:
      - $PERSIST/authelia/redis:/data
    expose:
      - 6379
    networks:
      my_bridge:
    healthcheck:
      test: redis-cli ping
      interval: 30s
      timeout: 5s
      retries: 2
    labels: 
      autoheal: $AUTOHEAL_RESTART
      monocker.enable: $MONOCKER_ENABLE
    image: 'redis:alpine'

๐Ÿ”ผ Back to top

Backrest

  backrest:
    container_name: backrest
    restart: $RESTART_POLICY
    hostname: backrest
    environment:
      - BACKREST_DATA=/data
      - BACKREST_CONFIG=/config/config.json
      - XDG_CACHE_HOME=/cache
      - TMPDIR=/tmp
      - TZ=$TZ
      - DOCKER_HOST=$DOCKER_HOST
      - RESTIC_PASSWORD=$RESTIC_PASSWORD
      - ISSUE_1139_FIX_PASSWORDS=true # https://github.com/garethgeorge/backrest/issues/1139
    volumes:
      - $PERSIST/backrest/data:/data
      - $PERSIST/backrest/config:/config
      - $PERSIST/backrest/cache:/cache
      - $PERSIST/backrest/tmp:/tmp
      - $PERSIST:/docker_volumes:ro # Mount local paths to backup
      - $PERSIST/backrest/restores:/restores # Mount for restored content
      - $BACKUPS:/repos # Mount local repos (optional for remote storage)
      # - /var/run/docker.sock:/var/run/docker.sock:ro
    ports:
      - 9898:9898
    networks:
      my_bridge:
    image: 'garethgeorge/backrest:latest'

๐Ÿ”ผ Back to top

Bazarr

  bazarr:
    container_name: bazarr
    restart: $RESTART_POLICY
    hostname: bazarr
    environment:
      - PUID=$PUID
      - PGID=$PGID
      - TZ=$TZ
      - POSTGRES_ENABLED=true
      - POSTGRES_HOST=bazarr-postgres
      - POSTGRES_PORT=5432
      - POSTGRES_DATABASE=bazarr
      - POSTGRES_USERNAME=bazarruser
      - POSTGRES_PASSWORD=$DB_PASSWORD
    volumes:
      - $PERSIST/bazarr/config:/config
      - $MEDIA_PATH/Movies/English:/movies #optional
      - $MEDIA_PATH/Shows/English:/tv #optional
    ports:
      - 6767:6767
    networks:
      my_bridge:
    depends_on:
      bazarr-postgres:
          condition: service_healthy
    image: 'lscr.io/linuxserver/bazarr:latest'

๐Ÿ”ผ Back to top

Bazarr-Postgres

  bazarr-postgres:
    container_name: bazarr-postgres
    hostname: bazarr-postgres
    restart: $RESTART_POLICY
    environment:
      POSTGRES_DB: bazarr
      POSTGRES_USER: bazarruser
      POSTGRES_PASSWORD: $DB_PASSWORD
    volumes:
      - $PERSIST/bazarr/db:/var/lib/postgresql:rw
    networks:
      my_bridge:
    labels: 
      com.centurylinklabs.watchtower.enable: false
      com.centurylinklabs.watchtower.monitor-only: true
    healthcheck:
      test: ["CMD", "pg_isready", "-q", "-d", "bazarr", "-U", "bazarruser"]
      timeout: 45s
      interval: 10s
      retries: 10
    image: 'postgres:18-alpine'

๐Ÿ”ผ Back to top

Checkrr

  checkrr:
    container_name: checkrr
    restart: $RESTART_POLICY
    hostname: checkrr
    volumes:
      - $PERSIST/checkrr/checkrr.yaml:/etc/checkrr.yaml
      - $PERSIST/checkrr/checkrr.db:/checkrr.db
      - $MEDIA_PATH:/media
    ports:
      - 8585:8585
    networks:
      my_bridge:
    image: 'aetaric/checkrr:latest'

๐Ÿ”ผ Back to top

CloudFlared

  cloudflared:
    container_name: cloudflared
    restart: $ALWAYS_ON_POLICY
    hostname: cloudflared
    user: root
    environment:
      - NO_AUTOUPDATE=true
      - TUNNEL_TOKEN=$TUNNEL_TOKEN
    networks:
      my_bridge:
         ipv4_address: $BRIDGE_NET.201
    command: 'tunnel --no-autoupdate run' # 'tunnel --config /etc/tunnel/config.yml run' 
    labels: 
      monocker.enable: $MONOCKER_ENABLE
    image: 'cloudflare/cloudflared:latest'

๐Ÿ”ผ Back to top

Cloudflared-Mon

  cloudflared-mon:
    container_name: cloudflared-mon
    restart: $RESTART_POLICY
    hostname: cloudflared-mon
    environment:
      - CHECK_INTERVALS=10
      - NOTIFIERS=pover://$PUSHOVER_USER_KEY@$PUSHOVER_CLOUDFLARED_MON_API
      - CF_TOKEN=$CLOUDFLARED_MON_TOKEN
      - CF_EMAIL=$GM_USER
      - CF_ACCOUNT_ID=$ACCOUNT_ID
    volumes:
      - $PERSIST/cloudflared-mon:/app/db
    networks:
      my_bridge:
    image: 'techblog/cloudflared-mon:latest'

๐Ÿ”ผ Back to top

DashDot

  dashdot:
    container_name: dashdot
    restart: $RESTART_POLICY
    hostname: dashdot
    environment:
      - DASHDOT_SHOW_HOST=true
      #- DASHDOT_ENABLE_STORAGE_SPLIT_VIEW=true #all drives must be mounted in the container
      - DASHDOT_PAGE_TITLE=My Server Monitor
      #- DASHDOT_ACCEPT_OOKLA_EULA=true
      #- DASHDOT_USE_NETWORK_INTERFACE=bond0 # use (ifconfig -a | sed 's/[ \t].*//;/^$/d') in SSH
      - DASHDOT_ENABLE_CPU_TEMPS=true
      - DASHDOT_DISABLE_TILT=true
      - DASHDOT_DISABLE_HOST=true
      - DASHDOT_OVERRIDE_OS=Synology DSM
      - DASHDOT_OVERRIDE_RAM_BRAND=A-Tech
      - DASHDOT_OVERRIDE_RAM_TYPE=DDR3
      - DASHDOT_OVERRIDE_RAM_FREQUENCY=1600
    volumes:
      - /:/mnt/host:ro
    ports:
      - 7512:3001
    networks:
      my_bridge:
    privileged: false
    image: 'mauricenino/dashdot:latest'

๐Ÿ”ผ Back to top

Databases-Backup

  databases-backup:
    container_name: databases-backup
    restart: $RESTART_POLICY
    hostname: databases-backup
    volumes:
      - $BACKUPS:/backup
      #- ./post-script.sh:/assets/custom-scripts/post-script.sh
    environment:
      - TIMEZONE=$TZ
      - USER_DBBACKUP=$PUID
      - GROUP_DBBACKUP=$PGID
      - CONTAINER_ENABLE_MONITORING=FALSE
      - LOG_PATH=/logs/logs
      - ENABLE_NOTIFICATIONS=true # only on job failure
      - NOTIFICATION_TYPE=email
      - MAIL_FROM=$GM_USER
      - MAIL_TO=$PUSHOVER_EMAIL_DATABASES_BACKUP
      - SMTP_HOST=$GM_HOST
      - SMTP_PORT=$GM_PORT

    # redis-backup
      - DB01_TYPE=redis
      - DB01_HOST=redisdb
      - DB01_PORT=6379
      - DB01_BACKUP_LOCATION=FILESYSTEM
      - DB01_FILESYSTEM_PATH=/backup/redis/
      - DB01_BACKUP_INTERVAL=1440 #once per day
      - DB01_BACKUP_BEGIN="2355" # @23:55 midnight
      - DB01_CLEANUP_TIME=8640 # keep for 6 days
      - DB01_CHECKSUM=SHA1
      - DB01_COMPRESSION=ZSTD
      - DB01_COMPRESSION_LEVEL=10
      - DB01_SPLIT_DB=false
      - DB01_MYSQL_SINGLE_TRANSACTION=true

    # mariadb-backup
      - DB02_TYPE=mariadb
      - DB02_HOST=mariadb
      - DB02_PORT=3306
      - DB02_NAME=mariadb-name
      - DB02_USER=mariadbuser
      - DB02_PASS=$DB_PASSWORD
      - DB02_BACKUP_LOCATION=FILESYSTEM
      - DB02_FILESYSTEM_PATH=/backup/mariadb/
      - DB02_BACKUP_INTERVAL=1440 #once per day
      - DB02_BACKUP_BEGIN="0000" # @00:00 midnight
      - DB02_CLEANUP_TIME=8640 # keep for 6 days
      - DB02_CHECKSUM=SHA1
      - DB02_COMPRESSION=ZSTD
      - DB02_COMPRESSION_LEVEL=10
      - DB02_SPLIT_DB=false
      - DB02_MYSQL_SINGLE_TRANSACTION=true

    # postgres-backup
      - DB03_TYPE=pgsql
      - DB03_HOST=postgresdb
      - DB03_USER=postgres-user
      - DB03_AUTH=postgres-user
      - DB03_PASS=$DB_PASSWORD
      - DB03_NAME=postgresdb
      - DB03_BACKUP_LOCATION=FILESYSTEM
      - DB03_FILESYSTEM_PATH=/backup/postgres/
      - DB03_SPLIT_DB=false
      - DB03_BACKUP_INTERVAL=1440 #once per day
      - DB03_BACKUP_BEGIN="0030" # @00:30 midnight
      - DB03_CLEANUP_TIME=8640 # keep for 6 days
      - DB03_COMPRESSION=ZSTD
      - DB03_COMPRESSION_LEVEL=10
      - DB03_CHECKSUM=SHA1
      - DB03_MYSQL_SINGLE_TRANSACTION=true

    networks:
      my_bridge:
    links:
      - redisdb
      - mariadb
      - postgresdb
    labels: 
      monocker.enable: $MONOCKER_ENABLE
    image: 'tiredofit/db-backup:latest'

๐Ÿ”ผ Back to top

Diun

  diun:
    container_name: diun
    restart: $RESTART_POLICY
    hostname: diun
    environment:
      - TZ=$TZ
      - LOG_LEVEL=info
      - LOG_JSON=false
    volumes:
      - $PERSIST/diun:/data
      - $PERSIST/diun/diun.yml:/diun.yml:ro
    networks:
      my_bridge:
    command: serve
    image: 'crazymax/diun:latest'

๐Ÿ”ผ Back to top

DeGoog

  degoog:
    container_name: degoog
    hostname: degoog
    restart: $RESTART_POLICY
    volumes:
      - $PERSIST/degoog:/app/data
    ports:
      - 4444:4444
    networks:
      my_bridge:
    image: 'ghcr.io/fccview/degoog:latest'

๐Ÿ”ผ Back to top

DockHand

  dockhand:
    container_name: dockhand
    hostname: dockhand
    restart: $RESTART_POLICY
    environment:
      TZ: $TZ
      DOCKER_HOST: $DOCKER_HOST
      DATABASE_URL: postgres://dockhand:$DB_PASSWORD@dockhand-postgres:5432/dockhand
    volumes:
      # - /var/run/docker.sock:/var/run/docker.sock
      - $PERSIST/dockhand/data:/app/data
    networks:
      my_bridge:
    ports:
      - 9000:3000
    depends_on:
      - dockhand-postgres
    image: 'fnsys/dockhand:latest'

๐Ÿ”ผ Back to top

DockHand-Postgres

  dockhand-postgres:
    container_name: dockhand-postgres
    hostname: dockhand-postgres
    restart: $RESTART_POLICY
    environment:
      POSTGRES_USER: dockhand
      POSTGRES_DB: dockhand
      POSTGRES_PASSWORD: $DB_PASSWORD
    volumes:
      - $PERSIST/dockhand/db:/var/lib/postgresql:rw
    networks:
      my_bridge:
    healthcheck:
      test: ["CMD", "pg_isready", "-q", "-d", "dockhand", "-U", "dockhand"]
      timeout: 45s
      interval: 10s
      retries: 10
    image: 'postgres:18-alpine'

๐Ÿ”ผ Back to top

DumbAssets

  dumbassets:
    container_name: dumbassets
    restart: $RESTART_POLICY
    hostname: dumbassets
    environment:
      TZ: $TZ
      # NODE_ENV: production
      # DEBUG: true
      SITE_TITLE: DumbAssets
      # BASE_URL: http://localhost:3000
      # DUMBASSETS_PIN: 1234
      # ALLOWED_ORIGINS: '*'
      # APPRISE_URL: 
      CURRENCY_CODE: AUD
      CURRENCY_LOCALE: en-GB
    volumes:
      - $PERSIST/dumbassets:/app/data
    networks:
      my_bridge:
    ports: 
      - 3000:3000
    image: 'dumbwareio/dumbassets:latest'

๐Ÿ”ผ Back to top

ESPHome

  esphome:
    container_name: esphome
    restart: $RESTART_POLICY
    hostname: esphome
    privileged: true
    environment:
      - DEBUG=true
      - CLEANUP=false
      - PUID=$PUID
      - PGID=$PGID
      - TZ=$TZ
      - ESPHOME_DASHBOARD_USE_PING=true
    ports:
      - 6052:6052/tcp
      - 6123:6123/tcp
    networks:
      my_bridge:
    volumes:
      - $PERSIST/esphome/:/config:rw
    # devices:
    #   - /dev/ttyUSB0
    working_dir: /config
    image: 'esphome/esphome:latest'

๐Ÿ”ผ Back to top

ErsatzTV

  ersatztv:
    container_name: ersatztv
    hostname: ersatztv
    restart: $RESTART_POLICY
    environment:
      - TZ=$TZ
    ports:
      - 8409:8409
    networks:
      my_bridge:
    volumes:
      - $PERSIST/ersatztv:/config
      - $MEDIA_PATH:/media:ro
    tmpfs:
      - /transcode
    image: 'ghcr.io/ersatztv/legacy:latest'

๐Ÿ”ผ Back to top

ExcaliDraw

  excalidraw:
    container_name: excalidraw
    restart: $RESTART_POLICY
    hostname: excalidraw
    ports:
      - 3765:80
    networks:
      my_bridge:
    healthcheck:
     test: curl -f http://localhost:80/ || exit 1
    stdin_open: true
    environment:
      - NODE_ENV=production
    image: 'excalidraw/excalidraw:latest'

๐Ÿ”ผ Back to top

FileBrowser

  filebrowser:
    container_name: filebrowser
    hostname: filebrowser
    restart: $RESTART_POLICY
    volumes:
      # - /:/host # Do not use a root "/" directory or include the "/var" folder
      - $PERSIST:/docker
      - $PERSIST/filebrowser/data:/home/filebrowser/data
      - $PERSIST/filebrowser/cache:/tmp  # Mount cache directory
      # - $PERSIST/filebrowser/config.yaml:/home/filebrowser/data/config.yaml # https://github.com/gtsteffaniak/filebrowser/blob/main/frontend/public/config.generated.yaml
    ports:
      - 7888:80
    networks:
      my_bridge:
    image: 'gtstef/filebrowser:stable'

๐Ÿ”ผ Back to top

FlareSolverr

  flaresolverr:
    container_name: flaresolverr
    hostname: flaresolverr
    restart: $RESTART_POLICY
    environment:
      - LOG_LEVEL=info
      - LOG_FILE=none
      - LOG_HTML=false
      - CAPTCHA_SOLVER=hcaptcha-solver #none
      - TZ=$TZ
    volumes:
      - $PERSIST/flaresolver:/config
    ports:
      - 8191:8191
    networks:
      my_bridge:
    image: 'ghcr.io/flaresolverr/flaresolverr:latest'

๐Ÿ”ผ Back to top

Gotify

  gotify:
    container_name: gotify
    hostname: gotify
    restart: $ALWAYS_ON_POLICY
    environment:
      - TZ=$TZ
      - GOTIFY_PLUGIN_DIR=/app/plugins
      - GOTIFY_DEFAULTUSER_NAME=admin
      - GOTIFY_DEFAULTUSER_PASS=$GOTIFY_USER_PASS
      # - GOTIFY_DATABASE_DIALECT=postgres
      # - GOTIFY_DATABASE_CONNECTION=host=gotify-postgres port=5432 user=gotify dbname=gotifydb password=$DB_PASSWORD sslmode=disable
      # - GOTIFY_DATABASE_DIALECT=postgres # sqlite3, mysql, postgres
      # - GOTIFY_DATABASE_CONNECTION=postgres=host=localhost port=5432 user=gotify dbname=gotifydb password=secret sslmode=disable
    volumes:
      - $PERSIST/gotify:/app/data
    networks:
      my_bridge:
    ports:
      - 9999:80
    labels: 
      monocker.enable: $MONOCKER_ENABLE
    healthcheck:
      test: timeout 10s bash -c ':> /dev/tcp/127.0.0.1/80' || exit 1
      interval: 10s
      timeout: 5s
      retries: 3
      start_period: 90s
    image: 'gotify/server:latest'

๐Ÿ”ผ Back to top

Hauk

  hauk:
    container_name: hauk
    restart: $RESTART_POLICY
    hostname: hauk
    volumes:
      - $PERSIST/hauk:/etc/hauk:rw
    ports:
      - 9435:80
    networks:
      my_bridge:
    healthcheck:
      test: curl -f http://localhost:80/ || exit 1
    image: 'bilde2910/hauk:latest'

๐Ÿ”ผ Back to top

Homarr

  homarr:
    container_name: homarr
    restart: $RESTART_POLICY
    hostname: homarr
    environment:
      - TZ=$TZ
      - PASSWORD=$DASH_PWD
      - SECRET_ENCRYPTION_KEY=$HOMARR_SECRET_ENCRYPTION_KEY # openssl rand -hex 32
      - DOCKER_HOSTNAMES=192.168.1.10,192.168.1.11,192.168.1.14
      - DOCKER_PORTS= 2375,2375,2375
      - DB_DRIVER=better-sqlite3
      - DB_URL=/appdata/db/db.sqlite
      - BASE_URL=https://homarr.$DOMAINNAME/
      # - DOCKER_HOST=$DOCKER_HOST
      - EDIT_MODE_PASSWORD=$DASH_PWD
      - DEFAULT_COLOR_SCHEME=dark
      # - DISABLE_EDIT_MODE=TRUE
    volumes:
      - $PERSIST/homarr/data:/appdata
    ports:
      - 7575:7575
    networks:
      my_bridge:
    labels: 
      monocker.enable: $MONOCKER_ENABLE
    image: 'ghcr.io/homarr-labs/homarr:latest'

๐Ÿ”ผ Back to top

HomeAssistant

  homeassistant:
    container_name: homeassistant
    restart: $ALWAYS_ON_POLICY
    hostname: homeassistant
    privileged: true
    environment:
      - DOCKER_HOST=$SOCKET
      - PUID=$PUID
      - PGID=$PGID
      - TZ=$TZ
    volumes:
      - $LOCAL_TIME:/etc/localtime:ro
      - $PERSIST/homeassistant:/config:rw
      - $MEDIA_PATH:/config/media/synology:ro
      # - /run/dbus:/run/dbus:ro
    #devices:
    #  - /dev/ttyUSB0:/dev/ttyUSB0
    #  - /dev/ttyUSB1:/dev/ttyUSB1
    #  - /dev/ttyACM0:/dev/ttyACM0
    #  - /dev/bus/usb:/dev/bus/usb
    ports:
      - 8123:8123
    labels: 
      monocker.enable: $MONOCKER_ENABLE
    healthcheck:
      test: curl -fSs http://127.0.0.1:8123 || exit 1
      start_period: 90s
      timeout: 10s
      interval: 5s
      retries: 3
    network_mode: host
    working_dir: /config
      homeassistant-mariadb:
        condition: service_healthy
    image: 'ghcr.io/home-assistant/home-assistant:stable'

๐Ÿ”ผ Back to top

HomeAssistant-MariaDB

  homeassistant-mariadb:
    container_name: homeassistant-mariadb
    restart: $ALWAYS_ON_POLICY
    hostname: homeassistant-mariadb
    environment:
      MARIADB_ROOT_PASSWORD: $DB_PASSWORD
      MARIADB_USER: homeassistant
      MARIADB_PASSWORD: $DB_PASSWORD
      MARIADB_DATABASE: homeassistant
      MARIADB_ROOT_HOST: 192.168.1.10
      MARIADB_AUTO_UPGRADE: "1"
      MARIADB_DISABLE_UPGRADE_BACKUP: "1"
      MARIADB_INITDB_SKIP_TZINFO: "1"
      PGID: $PGID
      PUID: $PUID
      TZ: $TZ
      # SKIP_INNODB: "yes" #only with jbergstroem/mariadb-alpine:latest, but not recommended
    volumes:
        - $PERSIST/homeassistant/db:/var/lib/mysql
    ports:
      - 3306:3306
    networks:
      my_bridge:
    tty: true
    labels: 
      monocker.enable: $MONOCKER_ENABLE  
    image: 'jbergstroem/mariadb-alpine:latest' #10.6.13'

๐Ÿ”ผ Back to top

Immich Folder Album Creator

``` immich-folder-album-creator: container_name: immich-folder-album-creator restart: $RESTART_POLICY hostname: immich-folder-album-creator environment: API_URL: http://192.168.1.10:8212/api API_KEY: $IMMICH_API ROOT_PATH: /mnt/photos # to match the IMMICH inside-of-container mount path CRON_EXPRESSION: "0 4 * * *" # Daily At 04:00, Immich scans library daily at 3am ALBUM_LEVELS: 2 ALBUM_SEPARATOR: " - " MODE: CREATE DELETE_CONFIRM: True TZ: $TZ LOG_LEVEL: INFO networks: my_bridge: image: 'salvoxia/immich-folder-album-creator:latest' ```

๐Ÿ”ผ Back to top

Immich-Machine-Learning

``` immich-machine-learning: container_name: immich-machine-learning restart: $ALWAYS_ON_POLICY hostname: immich-machine-learning environment: - IMMICH_ENV=production - IMMICH_LOG_LEVEL=log volumes: - $MEDIA_PATH/Photos/immich/cache:/cache networks: my_bridge: depends_on: immich-postgres: condition: service_started # extends: # uncomment this section for hardware acceleration - see https://immich.app/docs/features/ml-hardware-acceleration # file: hwaccel.ml.yml # service: cpu # set to one of [armnn, cuda, openvino, openvino-wsl] for accelerated inference - use the `-wsl` version for WSL2 where applicable image: 'ghcr.io/immich-app/immich-machine-learning:release' ```

๐Ÿ”ผ Back to top

Immich-Postgres

  immich-postgres:
    container_name: immich-postgres
    restart: $ALWAYS_ON_POLICY
    hostname: immich-postgres
    environment:
      TZ: $TZ
      POSTGRES_DB: immich
      POSTGRES_USER: immichuser
      POSTGRES_PASSWORD: $DB_PASSWORD
      POSTGRES_INITDB_ARGS: '--data-checksums'
      DB_STORAGE_TYPE: 'HDD'
    volumes:
      - $PERSIST/immich/db:/var/lib/postgresql/data
    networks:
      my_bridge:
    labels: 
      com.centurylinklabs.watchtower.enable: false
      com.centurylinklabs.watchtower.monitor-only: true
    shm_size: 128mb
    image: 'ghcr.io/immich-app/postgres:16-vectorchord0.3.0-pgvectors0.3.0'

๐Ÿ”ผ Back to top

Immich-Redis

  immich-redis:
    container_name: immich-redis
    restart: $ALWAYS_ON_POLICY
    hostname: immich-redis
    environment:
      - TZ=$TZ
    volumes:
      - $PERSIST/immich/redis:/data
    networks:
      my_bridge:
    healthcheck:
      test: redis-cli ping || exit 1
      interval: 30s
      timeout: 5s
      retries: 2
    image: 'redis:alpine'

๐Ÿ”ผ Back to top

Immich

To migrate from Google Photos to Immich use this repo
  immich:
    container_name: immich-server
    restart: $ALWAYS_ON_POLICY
    hostname: immich-server
    environment:
      - UPLOAD_LOCATION=./library
      - TZ=$TZ
      - IMMICH_ENV=production
      - IMMICH_LOG_LEVEL=log
      - DB_HOSTNAME=immich-postgres
      - DB_USERNAME=immichuser
      - DB_PASSWORD=$DB_PASSWORD
      - DB_DATABASE_NAME=immich
      - REDIS_HOSTNAME=immich-redis
    volumes:
      - $MEDIA_PATH/Photos/immich/upload:/usr/src/app/upload
      - $MEDIA_PATH/Photos:/mnt/photos:ro
      - $LOCAL_TIME:/etc/localtime:ro
    ports:
      - 8212:3001
    networks:
      my_bridge:
    depends_on:
      immich-redis:
        condition: service_healthy
      immich-postgres:
        condition: service_started
      immich-machine-learning:
        condition: service_started
    healthcheck:
      disable: false
    # devices: # https://bhtechhub.com/how-to-check-gpu-on-linux/
    #   - /dev/dri:/dev/dri
    # extends:
    #   file: hwaccel.transcoding.yml
    #   service: cpu # set to one of [nvenc, quicksync, rkmpp, vaapi, vaapi-wsl] for accelerated transcoding
    image: 'ghcr.io/immich-app/immich-server:release'

๐Ÿ”ผ Back to top

InfluxDB

  influxdb:
    container_name: influxdb
    restart: $RESTART_POLICY
    hostname: influxdb
    ports:
       - 3004:8086
       - 8088:8088
    expose:
      - 8088
    environment:
       - TZ=$TZ
       - DOCKER_INFLUXDB_INIT_MODE=setup
       - DOCKER_INFLUXDB_INIT_USERNAME=inlfuxdb
       - DOCKER_INFLUXDB_INIT_PASSWORD=$DB_PASSWORD
       - DOCKER_INFLUXDB_INIT_ORG=influxdb
       - DOCKER_INFLUXDB_INIT_BUCKET=homeassistant
       - INFLUXDB_BIND_ADDRESS=:8088
    volumes:
       - $PERSIST/influxdb/data:/var/lib/influxdb2
       - $PERSIST/influxdb/config:/etc/influxdb2
       - $LOCAL_TIME:/etc/localtime:ro
    networks:
      my_bridge:
    image: 'influxdb:alpine'

๐Ÿ”ผ Back to top

Jellyfin

  jellyfin:
    container_name: jellyfin
    restart: $RESTART_POLICY
    hostname: jellyfin
    environment:
      - JELLYFIN_PublishedServerUrl=https://jellyfin.$DOMAINNAME  # Optional - alternative address used for autodiscovery
      - JELLYFIN_playlists:allowDuplicates=False
    volumes:
      - $PERSIST/jellyfin/config:/config
      - $PERSIST/jellyfin/cache:/cache
      - $MEDIA_PATH:/media
    ports:
      - 8096:8096
    networks:
      my_bridge:
    labels: 
      monocker.enable: $MONOCKER_ENABLE
    # network_mode: 'host'
    # Optional - may be necessary for docker healthcheck to pass if running in host network mode
    # extra_hosts:
    #   - "host.docker.internal:host-gateway"
    user: $PUID:$PGID
    image: 'jellyfin/jellyfin:latest'

๐Ÿ”ผ Back to top

JellySearch-MeiliSearch

To be integrated with its Jellyfin plugin
  jellysearch-meilisearch:
    container_name: jellysearch-meilisearch
    restart: $RESTART_POLICY
    hostname: jellysearch-meilisearch
    environment:
      TZ: $TZ
      MEILI_MASTER_KEY: $JELLYSEARCH_MEILI_KEY
    volumes:
      - $PERSIST/jellyfin/jellysearch-meilisearch:/meili_data
    ports:
      - 7700:7700
    networks:
      my_bridge:
    image: 'getmeili/meilisearch:v1.33.0'

๐Ÿ”ผ Back to top

Karakeep

  karakeep:
    container_name: karakeep
    hostname: karakeep
    restart: $RESTART_POLICY
    environment:
      MEILI_ADDR: http://karakeep-meilisearch:7700
      MEILI_MASTER_KEY: $KARAKEEP_MEILI_KEY
      DATA_DIR: /data
      NEXTAUTH_URL: http://localhost:3000
      NEXTAUTH_SECRET: $KARAKEEP_AUTH_SECRET
      # BROWSER_WEB_URL: http://chrome:9222 #USED FOR CRAWLING WEBSITES
      # OPENAI_API_KEY: ...
    volumes:
      - $PERSIST/karakeep:/data
    ports:
      - 3421:3000
    networks:
      my_bridge:
    depends_on:
      karakeep-meilisearch:
        condition: service_started
    image: 'ghcr.io/karakeep-app/karakeep:latest'

๐Ÿ”ผ Back to top

Karakeep-MeiliSearch

  karakeep-meilisearch:
    container_name: karakeep-meilisearch
    hostname: karakeep-meilisearch
    restart: $RESTART_POLICY
    environment:
      MEILI_NO_ANALYTICS: "true"
    volumes:
      - $PERSIST/karakeep/meilisearch:/meili_data
    networks:
      my_bridge:
    image: 'getmeili/meilisearch:v1.13.3'

๐Ÿ”ผ Back to top

Kavita

  kavita:
    container_name: kavita
    restart: $ALWAYS_ON_POLICY
    hostname: kavita
    volumes:
        - $DOCUMENTS/books:/books     # ebooks should be in a folder named "library", Use as many as you want with different mapping on both sides
        - $PERSIST/kavita:/kavita/config
    environment:
        - TZ=$TZ
    ports:
        - 8778:5000
    networks:
        my_bridge:
    image: 'jvmilazz0/kavita:latest'

๐Ÿ”ผ Back to top

Loki

  loki:
    container_name: loki
    restart: $RESTART_POLICY
    hostname: loki
    volumes:
      - $PERSIST/loki/config.yaml:/etc/loki/local-config.yaml
      - $PERSIST/loki/data:/data/loki
    ports:
      - 3002:3100
    networks:
      my_bridge:
    command: -config.file=/etc/loki/local-config.yaml
    image: 'grafana/loki:latest'

๐Ÿ”ผ Back to top

Maloja

  maloja:
    container_name: maloja
    restart: $RESTART_POLICY
    hostname: maloja
    environment:
      - PUID=$PUID
      - PGID=$PGID
      - MALOJA_DATA_DIRECTORY=/data
      - MALOJA_FORCE_PASSWORD=$MALOJA_PWD
      - MALOJA_NAME=My Music
      - MALOJA_CHARTS_DISPLAY_TILES=true
      - MALOJA_DISPLAY_ART_ICONS=true
    volumes:
      - $PERSIST/maloja:/data
    networks:
      my_bridge:
    ports:
      - 42010:42010
    image: 'krateng/maloja:latest'

๐Ÿ”ผ Back to top

Manyfold

  manyfold:
    container_name: manyfold
    hostname: manyfold
    restart: $ALWAYS_ON_POLICY
    environment:
      REDIS_URL: redis://:$DB_PASSWORD@manyfold-redis:6379/1
      DATABASE_URL: postgresql://manyfolduser:$DB_PASSWORD@manyfold-postgres/manyfold?pool=5
      SECRET_KEY_BASE: $APP_KEY
      PUID: $PUID
      PGID: $PGID
    volumes:
      - $PERSIST/manyfold/libraries:/models:rw
    ports:
      - 7214:3214
    networks:
      my_bridge:
    security_opt:
      - no-new-privileges:true
    depends_on:
      manyfold-redis:
        condition: service_healthy
      manyfold-postgres:
        condition: service_healthy
    labels:
      - "docktail.service.enable=true"
      - "docktail.service.name=3dmodels"
      - "docktail.service.port=3214"  # CONTAINER port (RIGHT side of "8080:80")
      - "docktail.service.service-port=443"
    image: 'ghcr.io/manyfold3d/manyfold:latest'

๐Ÿ”ผ Back to top

Manyfold-Postgres

  manyfold-postgres:
    container_name: manyfold-postgres
    hostname: manyfold-postgres
    restart: $RESTART_POLICY
    environment:
      POSTGRES_DB: manyfold
      POSTGRES_USER: manyfolduser
      POSTGRES_PASSWORD: $DB_PASSWORD
    volumes:
      - $PERSIST/manyfold/db:/var/lib/postgresql:rw
    networks:
      my_bridge:
    healthcheck:
      test: ["CMD", "pg_isready", "-q", "-d", "manyfold", "-U", "manyfolduser"]
      timeout: 45s
      interval: 10s
      retries: 10
    image: 'postgres:18-alpine'

๐Ÿ”ผ Back to top

Manyfold-Redis

  manyfold-redis:
    container_name: manyfold-redis
    hostname: manyfold-redis
    restart: $ALWAYS_ON_POLICY
    environment:
      TZ: $TZ
    volumes:
      - $PERSIST/manyfold/redis:/data:rw
    networks:
      my_bridge:
    command:
      - /bin/sh
      - -c
      - redis-server --requirepass $DB_PASSWORD
    read_only: true
    user: $PUID:$PGID
    healthcheck:
      test: ["CMD-SHELL", "redis-cli ping || exit 1"]
    image: 'redis:alpine'

๐Ÿ”ผ Back to top

Monocker

  monocker:
    container_name: monocker
    restart: $RESTART_POLICY
    hostname: monocker
    environment:
      DOCKER_HOST: $DOCKER_HOST
      MESSAGE_PLATFORM: 'pushover@$PUSHOVER_USER_KEY@$PUSHOVER_MONOCKER_API'
      LABEL_ENABLE: 'true'
      ONLY_OFFLINE_STATES: 'false'
      EXCLUDE_EXITED: 'false'      
    # volumes:
    #   - $DOCKER_SOCKET:/var/run/docker.sock:ro
    networks:
      my_bridge:
    image: 'petersem/monocker:latest'

๐Ÿ”ผ Back to top

Mozhi

Get the android app from here
  mozhi:
    container_name: mozhi
    restart: $RESTART_POLICY
    hostname: mozhi
    ports:
      - 6455:3000
    networks:
      my_bridge: 
    healthcheck:
      test: wget -nv --tries=1 --spider http://127.0.0.1:3000/api/version || exit 1
      interval: 30s
      timeout: 5s
      retries: 2
    labels: 
      monocker.enable: $MONOCKER_ENABLE  
    image: 'codeberg.org/aryak/mozhi:latest'

๐Ÿ”ผ Back to top

MQTT

  mqtt:
    container_name: mqtt
    restart: $RESTART_POLICY
    hostname: mqtt
    volumes:
      - $PERSIST/mqtt/config:/mosquitto/config
      - $PERSIST/mqtt/data:/mosquitto/data
      - $PERSIST/mqtt/log:/mosquitto/log
      - $PERSIST/mqtt/config/mosquitto.conf:/mosquitto/config/mosquitto.conf
    ports:
      - 1883:1883
      - 9001:9001
    networks:
      my_bridge:
    labels: 
      monocker.enable: $MONOCKER_ENABLE
    image: 'eclipse-mosquitto:latest'

๐Ÿ”ผ Back to top

NaviDrome

  navidrome:
    container_name: navidrome
    restart: $ALWAYS_ON_POLICY
    hostname: navidrome
    environment:
      ND_SCANSCHEDULE: 1h
      ND_AUTHREQUESTLIMIT: 5
      ND_AUTHWINDOWLENGTH: 30s
      ND_LASTFM_ENABLED: false
      ND_ENABLEEXTERNALSERVICES: true
      ND_LISTENBRAINZ_ENABLED: true
      ND_LISTENBRAINZ_BASEURL: http://192.168.1.10:42010/apis/listenbrainz/1/
      ND_LISTENBRAINZ_APIKEY: $LISTENBRAINZ_APIKEY
    volumes:
      - $PERSIST/navidrome:/data
      - $MEDIA_PATH/Music:/music:ro
    ports:
      - 4533:4533
    networks:
      my_bridge:
    labels: 
      monocker.enable: $MONOCKER_ENABLE
    user: $PUID$:$PGID # should be owner of volumes
    image: 'ghcr.io/navidrome/navidrome:latest'

๐Ÿ”ผ Back to top

NetAlertX

  netalertx:  
    container_name: netalertx
    restart: $ALWAYS_ON_POLICY
    hostname: netalertx
    environment:
      - TZ=$TZ
      - PORT=20211
      - HOST_USER_ID=$PUID
      - HOST_USER_GID=$PGID
    volumes:
      - $PERSIST/netalertx:/app/config
      - $PERSIST/netalertx/app.db:/app/db/app.db
      - $PERSIST/netalertx/logs:/app/front/log
    network_mode: host
    labels: 
      monocker.enable: $MONOCKER_ENABLE
    security_opt:
      - no-new-privileges:true
    healthcheck:
      test: curl -f http://localhost:20211/ || exit 1
    image: 'jokobsk/netalertx:latest'

๐Ÿ”ผ Back to top

NextCloud

  nextcloud:
    container_name: nextcloud
    restart: $RESTART_POLICY
    hostname: nextcloud
    environment:
      # - NEXTCLOUD_ADMIN_USER=admin
      # - NEXTCLOUD_ADMIN_PASSWORD=$DB_PASSWORD
      - REDIS_HOST=nextcloud-redis
      - NEXTCLOUD_TRUSTED_DOMAINS=192.168.1.11 nextcloud.$DOMAINNAME
      - TRUSTED_PROXIES=192.168.1.11 nextcloud.$DOMAINNAME
      - OVERWRITEHOST=nextcloud.$DOMAINNAME
      - OVERWRITEPROTOCOL=https
      - MYSQL_PASSWORD=$DB_PASSWORD
      - MYSQL_DATABASE=nextcloud
      - MYSQL_USER=nextclouduser
      - MYSQL_HOST=nextcloud-mariadb
      - SMTP_HOST=$GM_HOST
      - SMTP_SECURE=ssl
      - SMTP_PORT=$GM_PORT
      - SMTP_AUTHTYPE=LOGIN
      - SMTP_NAME=$GM_USER
      - SMTP_PASSWORD=$GM_PSW
      - MAIL_FROM_ADDRESS=$GM_USER_MAIL
      - MAIL_DOMAIN=gmail.com
    volumes:
      - $PERSIST/nextcloud/config:/var/www/html:rw
    ports:
      - 8082:80
    networks:
      my_bridge:
    healthcheck:
      test: curl -f http://localhost:80/ || exit 1
    depends_on:
      nextcloud-mariadb:
        condition: service_started
      nextcloud-redis:
        condition: service_healthy
      nextcloud-cron:
        condition: service_started
    image: 'nextcloud:latest'

๐Ÿ”ผ Back to top

NextCloud-Cron

  nextcloud-cron:
    container_name: nextcloud-cron
    restart: $ALWAYS_ON_POLICY
    hostname: nextcloud-redis
    volumes:
      - $PERSIST/nextcloud/config:/var/www/html:rw
    networks:
      my_bridge:
    entrypoint: /cron.sh
    depends_on:
      nextcloud-mariadb:
        condition: service_started
      nextcloud-redis:
        condition: service_started
    image: 'nextcloud:apache'

๐Ÿ”ผ Back to top

NextCloud-MariaDB

  nextcloud-mariadb:
    container_name: nextcloud-mariadb
    restart: $RESTART_POLICY
    hostname: nextcloud-mariadb
    environment:
      - MYSQL_ROOT_PASSWORD=$DB_PASSWORD
      - MYSQL_PASSWORD=$DB_PASSWORD
      - MYSQL_DATABASE=nextcloud
      - MYSQL_USER=nextclouduser
      - TZ=$TZ
    volumes:
      - $PERSIST/nextcloud/db:/var/lib/mysql:rw
    networks:
      my_bridge:
    user: $PUID:$PGID
    security_opt:
      - no-new-privileges:false
    command: --transaction-isolation=READ-COMMITTED
    image: 'mariadb:lts'

๐Ÿ”ผ Back to top

NextCloud-Redis

  nextcloud-redis:
    container_name: nextcloud-redis
    restart: $ALWAYS_ON_POLICY
    hostname: nextcloud-redis
    environment:
      TZ: $TZ
    volumes:
      - $PERSIST/nextcloud/redis:/data:rw
    expose:
      - 6379
    networks:
      my_bridge:
    user: $PUID:$PGID
    healthcheck:
      test: ["CMD-SHELL", "redis-cli ping || exit 1"]
    image: 'redis:alpine'

๐Ÿ”ผ Back to top

OctoPrint

  octoprint: # Android app: OctoRemote
    container_name: octoprint
    hostname: octoprint
    restart: $RESTART_POLICY
    # uncomment the lines below to ensure camera streaming is enabled when you add a video device
    #environment:
    #  - ENABLE_MJPG_STREAMER=true
    volumes:
     - $PERSIST/octoprint:/octoprint
    networks:
      my_bridge:
    ports:
      - 3015:80
    devices:
    # use `python3 -m serial.tools.miniterm` to see what the name is of the printer, this requires pyserial
     - /dev/ttyUSB0:/dev/ttyUSB0
    #  - /dev/video0:/dev/video0
    labels: 
      com.centurylinklabs.watchtower.enable: false
      com.centurylinklabs.watchtower.monitor-only: true
    image: 'octoprint/octoprint:latest'

๐Ÿ”ผ Back to top

PairDrop

  pairdrop:
    container_name: pairdrop
    hostname: pairdrop
    restart: $RESTART_POLICY
    environment:
        - PUID=$PUID
        - PGID=$PGID
        - WS_FALLBACK=false # Set to true to enable websocket fallback if the peer to peer WebRTC connection is not available to the client.
        - RATE_LIMIT=false # Set to true to limit clients to 1000 requests per 5 min.
        - RTC_CONFIG=/config/rtc_config.json #false # Set to the path of a file that specifies the STUN/TURN servers.
        - DEBUG_MODE=false # Set to true to debug container and peer connections.
        - TZ=$TZ
    volumes:
      - $PERSIST/pairdrop:/config
    ports:
        - 3005:3000
    networks:
      my_bridge:
    image: 'lscr.io/linuxserver/pairdrop:latest'

๐Ÿ”ผ Back to top

Paperless-NGX

  paperless-ngx:
    container_name: paperless-ngx
    restart: $RESTART_POLICY
    hostname: paperless-ngx
    environment:
      PAPERLESS_REDIS: redis://:$DB_PASSWORD@paperless-ngx-redis:6379
      PAPERLESS_DBENGINE: postgresql
      PAPERLESS_DBHOST: paperless-ngx-postgres
      PAPERLESS_DBNAME: paperless
      PAPERLESS_DBUSER: paperless
      PAPERLESS_DBPASS: $DB_PASSWORD 
      PAPERLESS_TRASH_DIR: ../trash
      PAPERLESS_FILENAME_FORMAT: '{created_year}/{document_type}/{title}'
      PAPERLESS_OCR_ROTATE_PAGES_THRESHOLD: 6
      PAPERLESS_TASK_WORKERS: 1
      USERMAP_UID: $PUID
      USERMAP_GID: $PGID
      PAPERLESS_TIME_ZONE: $TZ
      PAPERLESS_ADMIN_USER: admin
      PAPERLESS_ADMIN_PASSWORD: $PAPERLESS_PWD
      PAPERLESS_URL: https://paperless.$DOMAINNAME
      PAPERLESS_CSRF_TRUSTED_ORIGINS: https://paperless.$DOMAINNAME
      PAPERLESS_OCR_LANGUAGES: ara eng # check what is installed by  sudo docker exec -it paperless-ngx tesseract --list-langs
      PAPERLESS_TIKA_ENABLED: 1
      PAPERLESS_TIKA_GOTENBERG_ENDPOINT: http://paperless-ngx-gotenberg:3000
      PAPERLESS_TIKA_ENDPOINT: http://paperless-ngx-tika:9998
      PAPERLESS_EMAIL_HOST: $GM_HOST
      PAPERLESS_EMAIL_PORT: $GM_PORT
      PAPERLESS_EMAIL_HOST_USER: $GM_USER
      PAPERLESS_EMAIL_FROM: $GM_USER
      PAPERLESS_EMAIL_HOST_PASSWORD: $GM_PSW
      PAPERLESS_EMAIL_USE_SSL: true
    volumes:
      - $PERSIST/paperless-ngx/data:/usr/src/paperless/data:rw
      - $DOCUMENTS:/usr/src/paperless/media:rw
      - $PERSIST/paperless-ngx/export:/usr/src/paperless/export:rw
      - $PERSIST/paperless-ngx/consume:/usr/src/paperless/consume:rw
      - $PERSIST/paperless-ngx/trash:/usr/src/paperless/trash:rw
    ports:
      - 8777:8000
    networks:
      my_bridge:
    healthcheck:
      test: ["CMD", "curl", "-fs", "-S", "--max-time", "2", "http://localhost:8000"]
      interval: 30s
      timeout: 10s
      retries: 5
    depends_on:
      paperless-ngx-postgres:
        condition: service_healthy
      paperless-ngx-redis:
        condition: service_healthy
      paperless-ngx-tika:
        condition: service_started
      paperless-ngx-gotenberg:
        condition: service_started
    image: 'ghcr.io/paperless-ngx/paperless-ngx:latest'

๐Ÿ”ผ Back to top

Paperless-NGX-Gotenberg

  paperless-ngx-gotenberg:
    container_name: paperless-ngx-gotenberg
    restart: $RESTART_POLICY
    hostname: paperless-ngx-gotenberg
    networks:
      my_bridge:
    user: $PUID:$PGID
    command:
      - "gotenberg"
      - "--chromium-disable-javascript=true"
      - "--chromium-allow-list=file:///tmp/.*"
    image: 'docker.io/gotenberg/gotenberg:latest'

๐Ÿ”ผ Back to top

Paperless-NGX-Postgres

  paperless-ngx-postgres:
    container_name: paperless-ngx-postgres
    hostname: paperless-ngx-postgres
    restart: $RESTART_POLICY
    environment:
      POSTGRES_DB: paperless
      POSTGRES_USER: paperless
      POSTGRES_PASSWORD: $DB_PASSWORD
    volumes:
      - $PERSIST/paperless-ngx/db:/var/lib/postgresql/data:rw
    networks:
      my_bridge:
    healthcheck:
      test: ["CMD", "pg_isready", "-q", "-d", "paperless", "-U", "paperless"]
      timeout: 45s
      interval: 10s
      retries: 10
    image: 'postgres:16-alpine'

๐Ÿ”ผ Back to top

Paperless-NGX-Redis

  paperless-ngx-redis:
    restart: $RESTART_POLICY
    container_name: paperless-ngx-redis
    hostname: paperless-ngx-redis
    environment:
      TZ: $TZ
    volumes:
      - $PERSIST/paperless-ngx/redis:/data:rw
    networks:
      my_bridge:
    command:
      - /bin/sh
      - -c
      - redis-server --requirepass $DB_PASSWORD
    read_only: true
    user: $PUID:$PGID
    healthcheck:
      test: ["CMD-SHELL", "redis-cli ping || exit 1"]
    image: 'redis:alpine'

๐Ÿ”ผ Back to top

Paperless-NGX-Tika

  paperless-ngx-tika:
    restart: $RESTART_POLICY
    container_name: paperless-ngx-tika
    hostname: paperless-ngx-tika
    networks:
      my_bridge:
    user: $PUID:$PGID
    image: 'docker.io/apache/tika:latest'

๐Ÿ”ผ Back to top

PasteFy

  pastefy:
    container_name: pastefy
    restart: $RESTART_POLICY
    hostname: pastefy
    environment:
      HTTP_SERVER_PORT: 80
      HTTP_SERVER_CORS: "*"
      DATABASE_DRIVER: mysql
      DATABASE_NAME: pastefy
      DATABASE_USER: pastefy
      DATABASE_PASSWORD: $DB_PASSWORD
      DATABASE_HOST: pastefy-mariadb
      DATABASE_PORT: 3306
      SERVER_NAME: https://paste.$DOMAINNAME
      AUTH_PROVIDER: $PROVIDER
      OAUTH2_INTERAAPPS_CLIENT_ID: $CLIENT_ID
      OAUTH2_INTERAAPPS_CLIENT_SECRET: $CLIENT_SECRET
      PASTEFY_INFO_CUSTOM_NAME: My Home Server
      PASTEFY_INFO_CUSTOM_FOOTER: Say My Name
      #PASTEFY_INFO_CUSTOM_LOGO: https://urltoimage
      PASTEFY_LOGIN_REQUIRED: false
      PASTEFY_LOGIN_REQUIRED_CREATE: true
      PASTEFY_LOGIN_REQUIRED_READ: false
      PASTEFY_ENCRYPTION_DEFAULT: false
    ports:
      - 9980:80
    networks:
      my_bridge:
    depends_on:
      - pastefy-mariadb
    image: "interaapps/pastefy:latest"

๐Ÿ”ผ Back to top

PasteFy-MariaDB

  pastefy-mariadb:
    container_name: pastefy-mariadb
    restart: $ALWAYS_ON_POLICY
    hostname: pastefy-mariadb
    environment:
      MARIADB_ROOT_PASSWORD: $DB_PASSWORD
      MARIADB_ROOT_HOST: 192.168.1.10
      MARIADB_AUTO_UPGRADE: "1"
      MARIADB_DISABLE_UPGRADE_BACKUP: "1"
      MARIADB_INITDB_SKIP_TZINFO: "1"
      PGID: $PGID
      PUID: $PUID
      TZ: $TZ
      # SKIP_INNODB: "yes" #only with jbergstroem/mariadb-alpine:latest, but not recommended
    volumes:
        - $PERSIST/pastefy/db:/var/lib/mysql
    networks:
      my_bridge:
    tty: true
    labels: 
      monocker.enable: $MONOCKER_ENABLE  
    image: 'jbergstroem/mariadb-alpine:latest''

๐Ÿ”ผ Back to top

PeaNUT

This was a challenging one on Ubuntu, refer this guide for more details
  peanut:
    container_name: peanut
    hostname: peanut
    restart: $RESTART_POLICY
    environment:
      - NUT_HOST=192.168.1.11
      - NUT_PORT=3493
      - WEB_PORT=8080
      - WEB_USERNAME=$PEANUT_USR
      - WEB_PASSWORD=$PEANUT_PWD
    volumes:
      - $PERSIST/peanut:/config
    networks:
      my_bridge:
    ports:
      - 8999:8080
    user: $PUID:$PGID
    image: 'brandawg93/peanut:latest'

๐Ÿ”ผ Back to top

Portainer-EE

  portainer:
    container_name: portainer-ee
    restart: $ALWAYS_ON_POLICY
    hostname: portainer
    privileged: true
    command: -H $DOCKER_HOST --tlsskipverify
    environment:
      DOCKER_HOST: $SOCKET
      TZ: $TZ
    volumes:
      - $DOCKER_SOCKET:/var/run/docker.sock
      - $PERSIST/portainer:/data
    ports:
      - 8000:8000
      - 9000:9000
      - 9443:9443
    networks:
      my_bridge:
    image: 'portainer/portainer-ee:alpine'

๐Ÿ”ผ Back to top

ProjectSend

  projectsend:
    container_name: projectsend
    restart: $RESTART_POLICY
    hostname: projectsend
    environment:
      - PUID=$PUID
      - PGID=$PGID
      - TZ=$TZ
      - MAX_UPLOAD=20000
      - MYSQL_DATABASE=projectsend
      - MYSQL_USER=projectsend
      - MYSQL_PASSWORD=$DB_PASSWORD
      - MYSQL_PORT=3306
    volumes:
      - $PERSIST/projectsend/config:/config
      - $PERSIST/projectsend/data:/data
    ports:
      - 8516:80
    networks:
      my_bridge:
    depends_on:
      projectsend-mariadb:
        condition: service_healthy
    healthcheck:
      test: curl -f http://localhost:80/ || exit 1
    image: 'lscr.io/linuxserver/projectsend:latest'

๐Ÿ”ผ Back to top

ProjectSend-MariaDB

  projectsend-mariadb:
    container_name: projectsend-mariadb
    restart: $ALWAYS_ON_POLICY
    hostname: projectsend-mariadb
    environment:
      MARIADB_ROOT_PASSWORD: $DB_PASSWORD
      MARIADB_ROOT_HOST: 192.168.1.10
      MARIADB_AUTO_UPGRADE: "1"
      MARIADB_DISABLE_UPGRADE_BACKUP: "1"
      MARIADB_INITDB_SKIP_TZINFO: "1"
      PGID: $PGID
      PUID: $PUID
      TZ: $TZ
      # SKIP_INNODB: "yes" #only with jbergstroem/mariadb-alpine:latest, but not recommended
    volumes:
        - $PERSIST/projectsend/db:/var/lib/mysql
    networks:
      my_bridge:
    tty: true
    labels: 
      monocker.enable: $MONOCKER_ENABLE  
    image: 'jbergstroem/mariadb-alpine:latest' #10.6.13'

๐Ÿ”ผ Back to top

Promtail

  promtail:
    container_name: promtail
    restart: $RESTART_POLICY
    hostname: promtail
    volumes:
      - $PERSIST/promtail/config.yml:/etc/promtail/config.yml
    networks:
      my_bridge:
    depends_on:
      - loki
    command: -config.file=/etc/promtail/config.yml
    image: 'grafana/promtail:latest'

๐Ÿ”ผ Back to top

Prowlarr

  prowlarr:
    container_name: prowlarr
    restart: $RESTART_POLICY
    hostname: prowlarr
    environment:
      - PUID=$PUID
      - PGID=$PGID
      - TZ=$TZ
    volumes:
      - $PERSIST/prowlarr/config:/config
    ports:
      - 9696:9696
    networks:
      my_bridge:
    depends_on:
      prowlarr-postgres:
          condition: service_healthy
    image: 'lscr.io/linuxserver/prowlarr:latest'

๐Ÿ”ผ Back to top

Prawlarr-Postgres

  prowlarr-postgres:
    container_name: prowlarr-postgres
    hostname: prowlarr-postgres
    restart: $RESTART_POLICY
    environment:
      POSTGRES_DB: prowlarr
      POSTGRES_USER: prowlarruser
      POSTGRES_PASSWORD: $DB_PASSWORD
    volumes:
      - $PERSIST/prowlarr/db:/var/lib/postgresql:rw
    networks:
      my_bridge:
    healthcheck:
      test: ["CMD", "pg_isready", "-q", "-d", "prowlarr", "-U", "prowlarruser"]
      timeout: 45s
      interval: 10s
      retries: 10
    image: 'postgres:18-alpine'

๐Ÿ”ผ Back to top

PruneMate

  prunemate:
    container_name: prunemate
    restart: $RESTART_POLICY
    hostname: prunemate
    volumes:
    #   - $DOCKER_SOCKET:/var/run/docker.sock
      - $PERSIST/prunemate/logs:/var/log
      - $PERSIST/prunemate/config:/config
    environment:
    #   - DOCKER_HOST= $DOCKER_HOST
      - PRUNEMATE_TZ=$TZ
      - PRUNEMATE_TIME_24H=true #false for 12-Hour format (AM/PM)
    networks:
      my_bridge:
    ports:
      - 7676:8080
    image: 'anoniemerd/prunemate:latest'

๐Ÿ”ผ Back to top

Quillnote-Server

Self built docker contianer from
https://github.com/arunk140/quillnote-server

SSH into host then execute:
`git clone https://github.com/arunk140/quillnote-server.git`
`cd quillnote-server`

`docker build -f "Dockerfile" -t quillnoteserver:latest "."`

SSH into container and then execute:
`./server user add [username] [password]`
  quillnote-server:
    container_name: quillnote-server
    hostname: quillnote-server
    restart: $RESTART_POLICY
    privileged: true
    environment:
      - PUID=$PUID
      - PGID=$PGID
    volumes:
      - $PERSIST/quillnote-server/notes.db:/app/notes.db
    networks:
      my_bridge:
    ports:
      - 3020:3000
    cap_add:
      - NET_ADMIN
    labels: 
      diun.enable: false
      com.centurylinklabs.watchtower.enable: false
    image: 'quillnoteserver:local'

๐Ÿ”ผ Back to top

QR-code

  qrcode:
    container_name: qrcode
    restart: $RESTART_POLICY
    hostname: qrcode
    networks:
      my_bridge:
    ports:
      - 8895:80
    healthcheck:
     test: curl -f http://localhost:80/ || exit 1
    security_opt:
      - no-new-privileges:true
    image: 'bizzycolah/qrcode-generator:latest'

๐Ÿ”ผ Back to top

Radarr

  radarr:
    container_name: radarr
    restart: $RESTART_POLICY
    hostname: radarr
    environment:
      - PUID=$PUID
      - PGID=$PGID
      - TZ=$TZ
    volumes:
      - $PERSIST/radarr/config:/config
      - $MEDIA_PATH/Movies/English:/movies #optional
      - $DOWNLOADS:/downloads #optional
    ports:
      - 7878:7878
    networks:
      my_bridge:
    depends_on:
      prowlarr:
          condition: service_started
      transmission:
          condition: service_started
      radarr-postgres:
          condition: service_healthy
    image: 'lscr.io/linuxserver/radarr:latest'

๐Ÿ”ผ Back to top

Radarr-Postgres

  radarr-postgres:
    container_name: radarr-postgres
    hostname: radarr-postgres
    restart: $RESTART_POLICY
    environment:
      POSTGRES_DB: radarr
      POSTGRES_USER: radarruser
      POSTGRES_PASSWORD: $DB_PASSWORD
    volumes:
      - $PERSIST/radarr/db:/var/lib/postgresql:rw
    networks:
      my_bridge:
    healthcheck:
      test: ["CMD", "pg_isready", "-q", "-d", "radarr", "-U", "radarruser"]
      timeout: 45s
      interval: 10s
      retries: 10
    image: 'postgres:18-alpine'

๐Ÿ”ผ Back to top

Seerr

  seerr:
    container_name: seerr
    restart: $RESTART_POLICY
    hostname: seerr
    environment:
      - LOG_LEVEL=debug
      - TZ=$TZ
      - PORT=5055 #optional
      - DB_TYPE=postgres # Which DB engine to use, either sqlite or postgres. The default is sqlite.
      - DB_HOST=seerr-postgres
      - DB_PORT=5432
      - DB_USER=seerruser
      - DB_PASS=$DB_PASSWORD
      - DB_NAME=seerr
      - DB_LOG_QUERIES=false # (optional) Whether to log the DB queries for debugging. The default is "false".
    volumes:
      - $PERSIST/seerr/config:/app/config
    ports:
      - 5055:5055
    networks:
      my_bridge:
    init: true
    healthcheck:
      test: wget --no-verbose --tries=1 --spider http://localhost:5055/api/v1/status || exit 1
      start_period: 20s
      timeout: 3s
      interval: 15s
      retries: 3
    depends_on:
      transmission:
          condition: service_started
      sonarr:
          condition: service_started
      radarr:
          condition: service_started
      seerr-postgres:
          condition: service_healthy
    image: 'ghcr.io/seerr-team/seerr:latest'

๐Ÿ”ผ Back to top

Seerr-Postgres

  seerr-postgres:
    container_name: seerr-postgres
    hostname: seerr-postgres
    restart: $RESTART_POLICY
    environment:
      POSTGRES_DB: seerr
      POSTGRES_USER: seerruser
      POSTGRES_PASSWORD: $DB_PASSWORD
    volumes:
      - $PERSIST/seerr/db:/var/lib/postgresql:rw
    networks:
      my_bridge:
    healthcheck:
      test: ["CMD", "pg_isready", "-q", "-d", "seerr", "-U", "seerruser"]
      timeout: 45s
      interval: 10s
      retries: 10
    image: 'postgres:18-alpine'

๐Ÿ”ผ Back to top

SMTP-to-Gotify

  smtp-to-gotify:
    container_name: smtp-to-gotify
    hostname: smtp-to-gotify
    restart: $ALWAYS_ON_POLICY
    environment:
    - GOTIFY_URL=$HTTPS_GOTIFY_URL
    - GOTIFY_TOKEN=$GOTIFY_SYNOLOGY_TOKEN
    - API_KEY=$APP_KEY
    network_mode: "host"
    ports:
      - 2525:2525
    labels: 
      monocker.enable: $MONOCKER_ENABLE
    depends_on:
      gotify:
        condition: service_healthy
    image: 'imoshtokill/smtp-to-gotify-docker:latest'

๐Ÿ”ผ Back to top

Socket-Proxy

  socket:
    container_name: socketproxy
    restart: $ALWAYS_ON_POLICY
    hostname: socketproxy
    environment:
        PUID: $PUID
        PGID: $PGID
        LOG_LEVEL: err # debug,info,notice,warning,err,crit,alert,emerg
        ## Variables match the URL prefix (i.e. AUTH blocks access to /auth/* parts of the API, etc.).
        # 0 to revoke access.
        # 1 to grant access.
        ## Granted by Default
        EVENTS: 1
        PING: 1
        VERSION: 1
        ## Revoked by Default
        # Security critical
        AUTH: 0
        SECRETS: 0
        POST: 1 # HA, Watchtower
        # Not always needed
        BUILD: 1 # HA
        COMMIT: 1 # HA
        CONFIGS: 1 # HA
        CONTAINERS: 1 # HA, Container-Mon, Portainer
        DISTRIBUTION: 1 #HA
        EXEC: 1 # HA, ContainerWebTTy
        IMAGES: 1 # HA, Portainer, Container-Mon
        INFO: 1 # HA, Portainer
        NETWORKS: 1 # HA, Portainer
        NODES: 1 # HA
        PLUGINS: 1 # HA
        SERVICES: 1 # HA, Portainer
        SESSION: 1 # HA
        SWARM: 1 # HA
        SYSTEM: 0
        TASKS: 1 # Portainer
        VOLUMES: 1 # Portainer
    volumes:
        - $DOCKER_SOCKET:/var/run/docker.sock
        - /dev/log:/dev/log
    ports:
        - 2375:2375
    network_mode: host
    labels: 
      monocker.enable: $MONOCKER_ENABLE
    privileged: true
    image: 'tecnativa/docker-socket-proxy:latest'

๐Ÿ”ผ Back to top

Sonarr

  sonarr:
    container_name: sonarr
    restart: $RESTART_POLICY
    hostname: sonarr
    environment:
      - PUID=$PUID
      - PGID=$PGID
      - TZ=$TZ
    volumes:
      - $PERSIST/sonarr/config:/config
      - $MEDIA_PATH/Shows/English:/tv #optional
      - $DOWNLOADS:/downloads #optional
    ports:
      - 8989:8989
    networks:
      my_bridge:
    depends_on:
      prowlarr:
          condition: service_started
      transmission:
          condition: service_started
      sonarr-postgres:
          condition: service_healthy
    image: 'lscr.io/linuxserver/sonarr:latest'

๐Ÿ”ผ Back to top

Sonarr-Postgres

  sonarr-postgres:
    container_name: sonarr-postgres
    hostname: sonarr-postgres
    restart: $RESTART_POLICY
    environment:
      POSTGRES_DB: sonarr
      POSTGRES_USER: sonarruser
      POSTGRES_PASSWORD: $DB_PASSWORD
    volumes:
      - $PERSIST/sonarr/db:/var/lib/postgresql:rw
    networks:
      my_bridge:
    healthcheck:
      test: ["CMD", "pg_isready", "-q", "-d", "sonarr", "-U", "sonarruser"]
      timeout: 45s
      interval: 10s
      retries: 10
    image: 'postgres:18-alpine'

๐Ÿ”ผ Back to top

Speedtest-Tracker

This has a native integration in Home Assistant, hence I use it, and not any other
  speedtest-tracker:
    container_name: speedtest-tracker
    restart: $RESTART_POLICY
    hostname: speedtest-tracker
    environment:
        - PUID=$PUID
        - PGID=$PGID
        - APP_KEY=base64:$ST_APP_KEY
        - DB_CONNECTION=sqlite
        - APP_NAME=My Speedtest Tracker
        - APP_TIMEZONE=$TZ
        - DISPLAY_TIMEZONE=$TZ
        - ADMIN_NAME=Administrator
        - ADMIN_EMAIL=$GM_USER
        - ADMIN_PASSWORD=$SPEEDTEST_PWD
        - SPEEDTEST_SCHEDULE=*/5 * * * * #At every 5th minute #0 * * * * #At every hour
        # - SPEEDTEST_INTERFACE=eth0
    volumes:
        - $PERSIST/speedtest-tracker/data:/config
        - $PERSIST/speedtest-tracker/ssl-keys:/config/keys
    networks:
      my_bridge:
    ports:
        - 8765:80
        - 8766:443
    image: 'lscr.io/linuxserver/speedtest-tracker:latest'

๐Ÿ”ผ Back to top

Squoosh

  squoosh:
    container_name: squoosh
    restart: $RESTART_POLICY 
    hostname: squoosh
    ports:
      - 7701:8080
    networks:
      my_bridge:
    image: 'dko0/squoosh:latest'

๐Ÿ”ผ Back to top

SubSyncarr-Plus

  subsyncarr-plus:
    container_name: subsyncarr-plus
    hostname: subsyncarr-plus
    restart: $RESTART_POLICY
    environment:
      - TZ=$TZ
      - PUID=$PUID
      - PGID=$PGID
      - CRON_SCHEDULE=0 0 * * * # Runs every day at midnight by default
      - SCAN_PATHS=/movies,/tv # Comma-separated paths to scan
      # - EXCLUDE_PATHS=/movies/temp,/tv/downloads # Optional: exclude directories
      - MAX_CONCURRENT_SYNC_TASKS=1 # Number of parallel processing tasks
      - INCLUDE_ENGINES=ffsubsync,autosubsync,alass # Engines to use
      - SYNC_ENGINE_TIMEOUT_MS=1800000
      - WEB_PORT=3000                 # Port for web UI (default: 3000)
      - WEB_HOST=0.0.0.0              # Host to bind to (default: 127.0.0.1, use 0.0.0.0 for all interfaces)
      # - DB_PATH=/app/data/subsyncarr-plus.db # SQLite database location (default: /app/data/subsyncarr-plus.db)
    volumes:
      - $PERSIST/subsyncarr:/app/data
      - $MEDIA_PATH/Movies/English:/movies
      - $MEDIA_PATH/Shows/English:/tv
    ports:
    - 3333:3000
    networks:
      my_bridge:
    user: '$PUID:$PGID'
    deploy:
      resources:
        limits:
          memory: 768M # Hard limit
        reservations:
          memory: 128M # Minimum guaranteed memory
    image: 'tomtomw123/subsyncarr-plus:latest'

๐Ÿ”ผ Back to top

SyncThing

  syncthing:
    container_name: syncthing
    restart: $ALWAYS_ON_POLICY
    hostname: synchthing
    environment:
      - PUID=$PUID
      - PGID=$PGID
      - TZ=$TZ
    volumes:
      - $PERSIST/syncthing:/var/syncthing
      - $PERSIST/syncthing/config:/var/syncthing/config
    ports:
      - 8384:8384
      - 22000:22000/tcp
      - 22000:22000/udp
      - 21027:21027/udp
    networks:
      my_bridge:
    labels: 
      monocker.enable: $MONOCKER_ENABLE
    image: 'syncthing/syncthing:1.26' #latest'

๐Ÿ”ผ Back to top

TasmoAdmin

  tasmoadmin:
    container_name: tasmoadmin
    restart: $RESTART_POLICY
    hostname: tasmoadmin
    volumes:
      - $PERSIST/tasmoadmin:/data:rw
    ports:
      - 0.0.0.0:9999:80/tcp
    networks:
      my_bridge:
    image: 'raymondmm/tasmoadmin:latest'

๐Ÿ”ผ Back to top

TasmoBackup

  tasmobackup:
    container_name: tasmobackup
    restart: $RESTART_POLICY
    hostname: tasmobackup
    environment:
      - TZ=$TZ
      - PUID=$PUID
      - PGID=$PGID
      - DBTYPE=mysql #sqlite
      - MYSQL_SERVER=192.168.1.10
      - DBNAME=tasmobackupdb #data/tasmobackup
      - MYSQL_USERNAME=tasmobackup
      - MYSQL_PASSWORD=$DB_PASSWORD
    volumes:
      - $PERSIST/tasmobackup:/var/www/html/data
    ports:
      - 8259:80
    networks:
      my_bridge:
    image: 'danmed/tasmobackupv1:latest'

๐Ÿ”ผ Back to top

TinyMediaManager

  tinymediamanager:
    container_name: tinymediamanager
    restart: $RESTART_POLICY
    hostname: tinymediamanager
    environment:
      - USER_ID=$PUID
      - GROUP_ID=$PGID
      - ALLOW_DIRECT_VNC=true
      - LC_ALL=en_US.UTF-8 # force UTF8
      - LANG=en_US.UTF-8   # force UTF8
      - TZ=$TZ
      - LC_TIME=C.UTF-8 #for 24 hour format
      # - PASSWORD=<password>
    volumes:
      - $PERSIST/tinymediamanager:/data
      - $PERSIST/tinymediamanager/addons:/app/addons:rw
      - $MEDIA_PATH:/media
      # - $MEDIA_PATH/Movies/English:/media/movies
      # - $MEDIA_PATH/Shows/English:/media/tv_shows
    ports:
      - 5900:5900 # VNC port
      - 4000:4000 # Webinterface
      - 5800:5800
    networks:
      my_bridge:
    image: 'tinymediamanager/tinymediamanager:latest'

๐Ÿ”ผ Back to top

TracCar

  traccar:
    container_name: traccar
    restart: $ALWAYS_ON_POLICY
    hostname: traccar
    environment:
      - TZ=$TZ
    volumes:
      - $LOCAL_TIME:/etc/localtime:ro
      - $PERSIST/traccar/logs:/opt/traccar/logs:rw
      - $PERSIST/traccar/traccar.xml:/opt/traccar/conf/traccar.xml:ro
    ports:
      - 8082:8082
      - 5055:5055/tcp # https://www.traccar.org/osmand/
      - 5055:5055/udp # https://www.traccar.org/osmand/
    depends_on: #https://www.traccar.org/mysql/
      traccar-mariadb:
        condition: service_healthy
    network_mode: host #to be able to integrate in HA
    labels: 
      monocker.enable: $MONOCKER_ENABLE
    image: 'traccar/traccar:alpine'

๐Ÿ”ผ Back to top

TracCar-MariaDB

  traccar-mariadb:
    container_name: traccar-mariadb
    restart: $ALWAYS_ON_POLICY
    hostname: traccar-mariadb
    environment:
      MARIADB_ROOT_PASSWORD: $DB_PASSWORD
      MARIADB_ROOT_HOST: 192.168.1.10
      MARIADB_AUTO_UPGRADE: "1"
      MARIADB_DISABLE_UPGRADE_BACKUP: "1"
      MARIADB_INITDB_SKIP_TZINFO: "1"
      PGID: $PGID
      PUID: $PUID
      TZ: $TZ
      # SKIP_INNODB: "yes" #only with jbergstroem/mariadb-alpine:latest, but not recommended
    volumes:
        - $PERSIST/traccar/db:/var/lib/mysql
    ports:
      - 3307:3306
    networks:
      my_bridge:
    tty: true
    labels: 
      monocker.enable: $MONOCKER_ENABLE  
    image: 'jbergstroem/mariadb-alpine:latest'

๐Ÿ”ผ Back to top

Tracearr

  tracearr:
    container_name: tracearr
    hostname: tracearr
    restart: $RESTART_POLICY
    environment:
      - NODE_ENV=production
      - PORT=3000
      - HOST=0.0.0.0
      - TZ=$TZ
      - DATABASE_URL=postgres://tracearruser:$DB_PASSWORD@tracearr-timescale-db/tracearr
      - REDIS_URL=redis://tracearr-redis:6379
      - JWT_SECRET=$TRACEARR_JWT_SECRET # openssl rand -hex 32
      - COOKIE_SECRET=$TRACEARR_COOKIE_SECRET # openssl rand -hex 32
      - CORS_ORIGIN=*
      - LOG_LEVEL=info
      # - DATABASE_POOL_MAX=50  # Database connection pool size (default: 50)
    volumes:
      - $PERSIST/tracearr/backups:/data/backup
    ports:
      - 3300:3000
    networks:
      my_bridge:
    depends_on:
      tracearr-timescale-db:
        condition: service_healthy
      tracearr-redis:
        condition: service_healthy
    image: 'ghcr.io/connorgallopo/tracearr:latest'

๐Ÿ”ผ Back to top

Tracearr-Postgres

  tracearr-timescale-db:
    container_name: tracearr-timescale-db
    hostname: tracearr-timescale-db
    restart: $RESTART_POLICY
    environment:
      - POSTGRES_USER=tracearruser
      - POSTGRES_PASSWORD=$DB_PASSWORD
      - POSTGRES_DB=tracearr
    volumes:
      - $PERSIST/tracearr/db/timescale:/home/postgres/pgdata/data
    networks:
      my_bridge:
    command: postgres -c timescaledb.max_tuples_decompressed_per_dml_transaction=0 -c max_locks_per_transaction=4096 -c timescaledb.telemetry_level=off
    healthcheck:
      test: ["CMD", "pg_isready", "-q", "-d", "tracearr", "-U", "tracearruser"]
      interval: 10s
      timeout: 5s
      retries: 5
    shm_size: 512mb  # Required for PostgreSQL shared memory (increase for large imports)
    ulimits:
      nofile:
        soft: 65536
        hard: 65536  # TimescaleDB chunks require many file descriptors
    image: 'timescale/timescaledb-ha:pg18.1-ts2.25.0'

๐Ÿ”ผ Back to top

Tracearr-Redis

  tracearr-redis:
    container_name: tracearr-redis
    hostname: tracearr-redis
    restart: $RESTART_POLICY
    volumes:
      - $PERSIST/tracearr/db/redis:/data
    command: redis-server --appendonly yes
    networks:
      my_bridge:
    healthcheck:
      test: ["CMD", "redis-cli", "ping"]
      interval: 10s
      timeout: 5s
      retries: 5
    image: 'redis:alpine'

๐Ÿ”ผ Back to top

Transmission

  transmission:
    container_name: transmission
    restart: $RESTART_POLICY
    hostname: transmission
    environment:
      - PUID=$PUID
      - PGID=$PGID
      - TZ=$TZ
      - USER=admin
      - PASS=$TRANSMISSION_PWD
    volumes:
      - $PERSIST/transmission:/config
      - $DOWNLOADS:/downloads
    ports:
      - 9091:9091
      - 51413:51413
      - 51413:51413/udp
    networks:
      my_bridge:
    image: 'lscr.io/linuxserver/transmission:latest'

๐Ÿ”ผ Back to top

Uptime-Kuma

  uptime-kuma:
    container_name: uptime-kuma
    restart: $ALWAYS_ON_POLICY
    hostname: uptime-kuma
    environment:
      - TZ=$TZ
      - UPTIME_KUMA_CLOUDFLARED_TOKEN=$UPTIME_KUMA_TUNNEL_TOKEN
      - PUID=$PUID
      - PGID=$PGID
    volumes:
      - $PERSIST/uptime-kuma:/app/data
    ports:
      - 3001:3001
    labels: 
      monocker.enable: $MONOCKER_ENABLE
    network_mode: host
    image: 'louislam/uptime-kuma:latest' #alpine' CloudFlared not working (depracted)

๐Ÿ”ผ Back to top

VaultWarden

  vaultwarden:
    container_name: vaultwarden
    restart: $ALWAYS_ON_POLICY
    hostname: vaultwarden
    environment: #https://github.com/dani-garcia/vaultwarden/blob/main/.env.template#L98
      - LOG_FILE=/data/vaultwarden.log
      - PUID=$PUID
      - PGID=$PGID
      - TZ=$TZ
      - DATABASE_URL=data/db.sqlite3 # SQLite
      # - DATABASE_URL=mysql://user:password@host[:port]/database_name #MySQL    https://docs.diesel.rs/diesel/mysql/struct.MysqlConnection.html
      - SIGNUPS_ALLOWED=false
      - INVITATIONS_ALLOWED=true
      - LOG_LEVEL=warn
      - EXTENDED_LOGGING=true
      - DOMAIN=https://vw.$DOMAINNAME
      - ROCKET_PORT=8089
      - WEBSOCKET_ENABLED=true
      - ADMIN_TOKEN=$VW_TOKEN
      - SMTP_HOST=$GM_HOST
      - SMTP_FROM=$GM_USER
      - SMTP_PORT=$GM_PORT
      - SMTP_SECURITY=force_tls #starttls (SMTP_SSL=true), force_tls (SMTP_EXPLICIT_TLS=true)
      - SMTP_USERNAME=$GM_USER
      - SMTP_PASSWORD=$GM_PSW
    volumes:
      - $PERSIST/vaultwarden:/data
      - $LOCAL_TIME:/etc/localtime:ro
    ports:
      - 8089:8089
      - 3012:3012
    networks:
      my_bridge:
    user: $PUID:$PGID
    labels: 
      monocker.enable: $MONOCKER_ENABLE
    image: 'vaultwarden/server:alpine'

๐Ÿ”ผ Back to top

VaultWarden-Backup

  vaultwarden-backup:
    container_name: vaultwarden-backup
    restart: $RESTART_POLICY
    hostname: vaultwarden-backup
    environment:
      - CRON_TIME=0 0 * * 6 # At 00:00 on Saturday
      - TZ=$TZ
      - GID=$PGID
      - UID=$PUID
      - TIMESTAMP=true
      - DELETE_AFTER=21
      - BACKUP_DIR=/backups/
      - BACKUP_ADD_DATABASE=true
      - BACKUP_ADD_ATTACHMENTS=true
      - BACKUP_ADD_CONFIG_JSON=true
      - BACKUP_ADD_ICON_CACHE=true
      - BACKUP_ADD_RSA_KEY=true
      - LOG_LEVEL=INFO #WARN 
      - LOG_DIR=/logs/
      - LOG_DIR_PERMISSIONS=-1
    volumes:
      - $PERSIST/vaultwarden:/data/
      - $PERSIST/vaultwarden-backup/logs:/logs/
      - $BACKUPS/vaultwarden-backup:/backups/
    networks:
      my_bridge:
    init: true
    depends_on:
      - vaultwarden
    labels: 
      autoheal: $AUTOHEAL_RESTART
      monocker.enable: $MONOCKER_ENABLE
    image: 'bruceforce/vaultwarden-backup:latest'

๐Ÿ”ผ Back to top

VSCodium-Web

  vscodium-web:
    container_name: vscodium-web
    restart: $RESTART_POLICY
    hostname: vscodium-web
    environment:
      - PUID=$PUID
      - PGID=$PGID
      - TZ=$TZ
      - DEFAULT_WORKSPACE=/home/coder/project #optional
      # - CONNECTION_TOKEN= #optional
      # - CONNECTION_TOKEN_FILE= #optional
      # - SUDO_PASSWORD=password #optional
      # - SUDO_PASSWORD_HASH= #optional
      # - CODE_ARGS= #optional
    volumes:
      - $PERSIST/vscodium-web:/config
      - $PERSIST:/home/coder/project:rw
    ports:
      - 8000:8000
    networks:
      my_bridge:
    image: 'lscr.io/linuxserver/vscodium-web:latest'

๐Ÿ”ผ Back to top

WatchTower

  watchtower:
    container_name: watchtower
    restart: $RESTART_POLICY
    hostname: watchtower
    environment:
      DOCKER_HOST: $DOCKER_HOST
      TZ: $TZ
      WATCHTOWER_REMOVE_VOLUMES: "true"
      WATCHTOWER_CLEANUP: "true"
      WATCHTOWER_LABEL_ENABLE: "false"
      WATCHTOWER_NO_STARTUP_MESSAGE: "true"
      WATCHTOWER_LOG_LEVEL: "info"
      WATCHTOWER_WARN_ON_HEAD_FAILURE: "never"
      WATCHTOWER_INCLUDE_STOPPED: "false" # Update stopped containers
      WATCHTOWER_INCLUDE_RESTARTING: "true" # Restart containers after update
      WATCHTOWER_ROLLING_RESTART: "false"
      WATCHTOWER_LOG_FORMAT: "pretty"
      WATCHTOWER_SCHEDULE: 0 0/15 1 * * ? #Daily (?) at every 15th minute (0/15) from 0 (0) through 59 past hour 1am (1)
      WATCHTOWER_TIMEOUT: 15s
      WATCHTOWER_NOTIFICATIONS_LEVEL: info
      WATCHTOWER_NOTIFICATIONS_HOSTNAME: "My host"
    networks:
      my_bridge:
    depends_on:
      socket:
        condition: service_started
    labels: 
      monocker.enable: $MONOCKER_ENABLE
    image: 'nickfedor/watchtower:latest'

๐Ÿ”ผ Back to top

wDOSg

Games can be downloaded from here
  wdosg:
    container_name: wdosg
    restart: $RESTART_POLICY
    hostname: wdosg
    environment:
      - TOKEN_SECRET=$APP_KEY
      - TWITCH_CLIENT_ID=$TWITCH_CLIENT_ID # Your IGDB (Twitch) client ID
      - TWITCH_CLIENT_SECRET=$TWITCH_CLIENT_SECRET #Your IGDB (Twitch) client secret
      - EMAIL_SERVICE=gmail
      - EMAIL_USER=$GM_USER 
      - EMAIL_PASS=$GM_PSW
      - SERVER_FRIENDLY_URL=https://wdosg.$DOMAINNAME
      # - TWITCH_APP_ACCESS_TOKEN= # Your IGDB (Twitch) Token - **NOT your secret**
    volumes:
      - $MEDIA_PATH/Games:/app/wdosglibrary # directory containing your library
      - $PERSIST/wdosg:/app/database # directory containing your database
    ports:
      - 3003:3001
    networks:
      my_bridge:
    image: 'soulraven1980/wdosg:latest'

๐Ÿ”ผ Back to top

YTPTube

  ytptube:
    container_name: ytptube
    hostname: ytptube
    restart: $RESTART_POLICY
    environment:
      - TZ=$TZ
      - YTP_INSTANCE_TITLE="MyTube"
      - YTP_TEMP_PATH=/downloads/tmp
      - YTP_DOWNLOAD_PATH=/downloads
      - YTP_FLARESOLVERR_URL=http://192.168.1.11:8191/v1
      - YTP_AUTH_USERNAME=admin
      - YTP_AUTH_PASSWORD=$YTPTUBE_PASSWORD
    networks:
      my_bridge:
    ports:
      - 8081:8081
    volumes:
      - $PERSIST/ytptube:/config:rw
      - $DOWNLOADS/YouTube:/downloads:rw
    user: $PUID:$PGID
    image: 'ghcr.io/arabcoders/ytptube:latest'

๐Ÿ”ผ Back to top

Zigbee2MQTT

  zigbee2mqtt:
    container_name: zigbee2mqtt
    restart: $RESTART_POLICY
    hostname: zigbee2mqtt
    environment:
      - TZ=$TZ
    volumes:
      - $PERSIST/zigbee2mqtt:/app/data
      # - /run/udev:/run/udev:ro
    ports:
      - 9002:8080
    networks:
      my_bridge:
    # devices:
    #   - /dev/ttyUSB0:/dev/ttyUSB0
    depends_on:
      - mqtt
    labels: 
      monocker.enable: $MONOCKER_ENABLE
    image: 'koenkk/zigbee2mqtt:latest'

๐Ÿ”ผ Back to top

About

A YAML compose file with all useful images, explanation and details

Resources

Stars

8 stars

Watchers

1 watching

Forks

Releases

Packages

Contributors