ITGOIT - Wiki

Welcome

In this page we have carefully selected our favorite services and created an organized set of containers for you to choose from. Each container is bundled with all the necessary configurations to make it work seamlessly on your system.

To get started, simply copy and paste the YAML code of your desired container onto your system. However, please note that you need to change the username to match your own Linux username and ensure that the volume paths are correct for your system.

Additionally, you'll need to update the subnet to your own preferred network in the networks section of the file, under the ipam configuration. Be sure to set both the subnet and gateway to the appropriate values for your network.

Enjoy exploring the world of Docker containers and let us know if you have any questions or concerns!

The arrs

This group is the All-in-One multimedia server.
A network will be automaticly created called: media on 10.0.30.0/24
These will have the following services:

cd /home/myusername/docker
mkdir arrs && cd "$_"
mkdir -p data/torrents/{books,movies,music,tv} data/usenet/{incomplete,complete/{books,movies,music,tv}}

If you want to use a external disk for the data folder you need to change the ./data path to /media/disk/exthdd01/extarrs/data
For example: ./data/torrents will turn into /media/disk/exthdd01/extarrs/data/torrents
./data/usenet will turn into /media/disk/exthdd01/extarrs/data/usenet
./data will turn into /media/disk/exthdd01/extarrs/data

/media vs /mnt in Linux

Both /media and /mnt directories exist in the root folder of Ubuntu (and other Linux systems), but they are used for slightly different purposes related to mounting file systems.

Key Differences

Directory Purpose Use Case
/media Primarily for automatically mounted external media like USB drives, CDs, DVDs, or other removable media External drives are often auto-mounted by the system in subdirectories of /media (e.g., /media/username/drive).
/mnt Primarily for manual mounts or temporary mounts, often by system administrators Used for temporary, manual mounting of file systems, such as when mounting a secondary disk or network share.

nano docker-compose.yml

version: "3.8"

###--- Jellyfin Image - Media Library / Player - Used to play the media content ---###
services:
  jellyfin:
    container_name: jellyfin
    image: jellyfin/jellyfin:latest
    restart: unless-stopped
    devices:
#      - /dev/dri:/dev/dri # Directory containing all Direct Rendering Infrastructure (DRI) devices, including render and card devices, for general GPU access
#      - /dev/dri/card0:/dev/dri/card0 # FULL GPU 01 access
      - /dev/dri/card1:/dev/dri/card1 # FULL GPU 02 access
      - /dev/dri/renderD128:/dev/dri/renderD128 # GPU render only 01 access
#      - /dev/dri/renderD129:/dev/dri/renderD129 # GPU render only 02 access
#      - /dev/vcsm:/dev/vcsm # Raspberry Pi VideoCore Shared Memory (VCSM) device, used on Raspberry Pi for managing shared memory between GPU and CPU
#      - /dev/vchiq:/dev/vchiq # Raspberry Pi VideoCore Host Interface Queue (VCHIQ) device, used on Raspberry Pi for communication between the CPU and GPU
#      - /dev/video10:/dev/video10 # Video device interface 10, typically used for video capture or encoding hardware (often for camera or multimedia applications)
#      - /dev/video11:/dev/video11 # Video device interface 11, similar to video10, for additional video capture or encoding capabilities
#      - /dev/video12:/dev/video12 # Video device interface 12, another video device for capturing or encoding, usually used in multimedia or camera applications
    environment:
      PGID: 1000
      PUID: 1000
      UMASK: 002
      TZ: Etc/UTC
    volumes:
      - /media/disk/exthdd01/extarrs/data/library/tv:/media/TV
      - /media/disk/exthdd01/extarrs/data/library/movies:/media/movies
      - /media/disk/exthdd01/extarrs/data/library/music:/media/music
      - /media/disk/exthdd01/extarrs/data/library/pictures:/media/pictures
      - /media/disk/exthdd01/extarrs/data/library/books:/media/books
      - ./appdata/jellyfin/config:/config
      - ./appdata/jellyfin/cache:/cache"
      - /dev/shm:/transcode
#      - /opt/vc/lib:/opt/vc/lib # Raspberry Pi GPU libraries for multimedia operations
    ports:
      - 8110:8096
    networks:
      media:
        ipv4_address: 10.0.30.100


###--- ErsatzTV Image - IPTV Server. - configure and stream custom live TV channels using the media library. ---###
  # Latest Release Tags
  # Base (software transcoding): jasongdove/ersatztv:latest
  # Nvidia hardware-accelerated transcoding: jasongdove/ersatztv:latest-nvidia
  # VAAPI (Intel, AMD) hardware-accelerated transcoding: jasongdove/ersatztv:latest-vaapi

  # Development Tags
  # Development tags update much more frequently, but have the potential to be less stable than releases.
  # Base (software transcoding): jasongdove/ersatztv:develop
  # Nvidia hardware-accelerated transcoding: jasongdove/ersatztv:develop-nvidia
  # VAAPI (Intel, AMD) hardware-accelerated transcoding: jasongdove/ersatztv:develop-vaapi

#  ersatztv:
#    image: jasongdove/ersatztv:latest-vaapi
#    container_name: ersatztv
#    restart: unless-stopped
#    environment:
#      TZ: Etc/UTC
#    ports:
#      - 8294:8409
#    volumes:
#      - ./appdata/ersatztv/config:/root/.local/share/ersatztv
#    networks:
#      media:
#        ipv4_address: 10.0.30.112
# ---------------
# Media paths not needed if you connect ErsatzTV to jellyfin with API key      
#      - /media/disk/exthdd01/extarrs/data/library/tv:/media/TV
#      - /media/disk/exthdd01/extarrs/data/library/movies:/media/movies
#      - /media/disk/exthdd01/extarrs/data/library/music:/media/music
#      - /media/disk/exthdd01/extarrs/data/library/pictures:/media/pictures
#      - /media/disk/exthdd01/extarrs/data/library/books:/media/books
# ---------------

###--- Jellyseerr Image - Request management and media discovery tool ---###
  jellyseerr:
    image: ghcr.io/seerr-team/seerr:latest
    container_name: jellyseerr
    restart: unless-stopped
    environment:
      PGID: 1000
      PUID: 1000
      UMASK: 002
      LOG_LEVEL: debug
      TZ: Etc/UTC
    volumes:
      - ./appdata/jellyseerr/config:/app/config
    ports:
      - 8111:5055
    networks:
      media:
        ipv4_address: 10.0.30.101


###--- qBittorrent Image - Download Client - Used to download torrent files ---###
  qbittorrent:
    image: ghcr.io/hotio/qbittorrent:latest
    container_name: qbittorrent
    restart: unless-stopped
    environment:
      PUID: 1000
      PGID: 1000
      UMASK: 002
      TZ: Etc/UTC
      WEBUI_PORTS: 8080/tcp,8080/udp
    ports:
      - 8290:8080
      - 8291:6881
      - 8291:6881/udp
    volumes:
      - ./appdata/qbittorrent/config:/config
      - ./data/torrents:/data/torrents
    networks:
      media:
        ipv4_address: 10.0.30.102

###--- qBitmanage Image - qBittorrent manager - Used to run automated tasks for qBittorrent ---###
  qbitmanage:
    image: ghcr.io/stuffanthings/qbit_manage:latest
    container_name: qbitmanage
    restart: unless-stopped
    environment:
      PUID: 1000
      PGID: 1000
      UMASK: 002
      TZ: Etc/UTC
      QBT_RUN: false
      QBT_SCHEDULE: 1440
      QBT_CONFIG: config.yml
      QBT_LOGFILE: activity.log
      QBT_CROSS_SEED: false
      QBT_RECHECK: false
      QBT_CAT_UPDATE: false
      QBT_TAG_UPDATE: false
      QBT_REM_UNREGISTERED: false
      QBT_REM_ORPHANED: false
      QBT_TAG_TRACKER_ERROR: false
      QBT_TAG_NOHARDLINKS: false
      QBT_SHARE_LIMITS: false
      QBT_SKIP_CLEANUP: false
      QBT_DRY_RUN: false
      QBT_LOG_LEVEL: INFO
      QBT_DIVIDER: =
      QBT_WIDTH: 100
    volumes:
      - /media/disk/exthdd01/extarrs/data/torrents:/data/torrents
      - ./appdata/qbitmanage/config:/config
      - ./appdata/qbittorrent/data/BT_backup:/torrentdir
    networks:
      media:
        ipv4_address: 10.0.30.111


###--- SABnzbd Image - Download client - Used to download NZB from Usenet groups ---###
### This container has been disabled since you need a premium Usenet provider subscription to download files. ###
### Enable this container if you found a free provider or want to pay for usenet ###
#  sabnzbd:
#    image: ghcr.io/hotio/sabnzbd:latest
#    container_name: sabnzbd
#    restart: unless-stopped
#    environment:
#      PUID: 1000
#      PGID: 1000
#      TZ: Etc/UTC
#    volumes:
#      - /etc/localtime:/etc/localtime:ro
#      - ./appdata/sabnzbd/config:/config
#      - /media/disk/exthdd01/extarrs/data/usenet:/data/usenet:rw
#    ports:
#      - 8292:8080
#      - 8293:9090
#    logging:
#      driver: json-file
#    networks:
#      media:
#        ipv4_address: 10.0.30.103


###--- Prowlarr Image - Index and Search Management for "ARR" apps ---###
  prowlarr:
    image: ghcr.io/hotio/prowlarr:latest
    container_name: prowlarr
    restart: unless-stopped
    environment:
      PUID: 1000
      PGID: 1000
      TZ: Etc/UTC
    volumes:
      - ./appdata/prowlarr/config:/config
    ports:
      - "8113:9696"
    logging:
      driver: json-file
    networks:
      media:
        ipv4_address: 10.0.30.104


###--- Radarr Image - Library Manager for Movie content management ---###
### Do not use this container to download 4K Movie content. Enable container below to have seperate instance just for 4K Movie content ###
  radarr:
    image: ghcr.io/hotio/radarr:latest
    container_name: radarr
    restart: unless-stopped
    environment:
      PUID: 1000
      PGID: 1000
      TZ: Etc/UTC
    volumes:
      - ./appdata/radarr/config:/config
      - /media/disk/exthdd01/extarrs/data:/data
    ports:
      - 8114:7878
    logging:
      driver: json-file
    networks:
      media:
        ipv4_address: 10.0.30.105

###--- Radarr 4K Image - Library Manager for Movie 4K content management ---###
### Enable this container to get seperate instance for 4K Movie content ###
#  radarr4k:
#    image: ghcr.io/hotio/radarr:latest
#    container_name: radarr4k
#    restart: unless-stopped
#    environment:
#      PUID: 1000
#      PGID: 1000
#      TZ: Etc/UTC
#    volumes:
#      - ./appdata/radarr4k/config:/config
#      - /media/disk/exthdd01/extarrs/data:/data
#    ports:
#      - 8344:7878
#    logging:
#      driver: json-file
#    networks:
#      media:
#        ipv4_address: 10.0.30.115


###--- Sonarr Image - Library Manager for TV Show / Series / Anime content management ---###
### Do not use this container to download 4K TV content. Enable container below to have seperate instance just for 4K TV content ###
  sonarr:
    image: ghcr.io/hotio/sonarr:latest
    container_name: sonarr
    restart: unless-stopped
    environment:
      PUID: 1000
      PGID: 1000
      TZ: Etc/UTC
    volumes:
      - ./appdata/sonarr/config:/config
      - /media/disk/exthdd01/extarrs/data:/data
    ports:
      - 8115:8989
    logging:
      driver: json-file
    networks:
      media:
        ipv4_address: 10.0.30.106

###--- Sonarr 4K Image - Library Manager for 4K TV Show / Series / Anime content management ---###
### Enable this container to get seperate instance for 4K TV content ###
#  sonarr4k:
#    image: ghcr.io/hotio/sonarr:latest
#    container_name: sonarr
#    restart: unless-stopped
#    environment:
#      PUID: 1000
#      PGID: 1000
#      TZ: Etc/UTC
#    volumes:
#      - ./appdata/sonarr4k/config:/config
#      - /media/disk/exthdd01/extarrs/data:/data
#    ports:
#      - 8345:8989
#    logging:
#      driver: json-file
#    networks:
#      media:
#        ipv4_address: 10.0.30.116


###--- Bazarr Image - Library Manager for Subtitle management ---###
  bazarr:
    image: ghcr.io/hotio/bazarr:latest
    container_name: bazarr
    restart: unless-stopped
    environment:
      PUID: 1000
      PGID: 1000
      TZ: Etc/UTC
    volumes:
      - /etc/localtime:/etc/localtime:ro
      - ./appdata/bazarr/config:/config
      - /media/disk/exthdd01/extarrs/data:/data
    ports:
      - 8116:6767
    logging:
      driver: json-file
    networks:
      media:
        ipv4_address: 10.0.30.107


###--- Lidarr Image - Library Manager for Music content management ---###
  lidarr:
    image: ghcr.io/hotio/lidarr:latest
    container_name: lidarr
    restart: unless-stopped
    environment:
      PUID: 1000
      PGID: 1000
      TZ: Etc/UTC
    volumes:
      - /etc/localtime:/etc/localtime:ro
      - ./appdata/lidarr/config:/config
      - /media/disk/exthdd01/extarrs/data:/data
    ports:
      - 8117:8686
    logging:
      driver: json-file
    networks:
      media:
        ipv4_address: 10.0.30.108


###--- Readarr Image - Library Manager for Books / Epubs content management ---###
  readarr:
    image: ghcr.io/hotio/readarr:latest
    container_name: readarr
    restart: unless-stopped
    environment:
      PUID: 1000
      PGID: 1000
      TZ: Etc/UTC
    volumes:
      - /etc/localtime:/etc/localtime:ro
      - ./appdata/readarr/config:/config
      - /media/disk/exthdd01/extarrs/data:/data
    ports:
      - 8118:8787
    logging:
      driver: json-file
    networks:
      media:
        ipv4_address: 10.0.30.109


###--- Unpackerr Image - Extracts downloads for Radarr, Sonarr, Lidarr, and Readarr - Deletes extracted files after import. ---###
  unpackerr:
    image: ghcr.io/hotio/unpackerr:latest
    container_name: unpackerr
    restart: unless-stopped
    volumes:
      - ./appdata/unpackerr/config:/config
      - /media/disk/exthdd01/extarrs/data/torrents:/data/torrents
    environment:
      PUID: 1000
      PGID: 1000
      TZ: Etc/UTC
      UN_LOG_FILE: /data/torrents/unpackerr.log
      UN_SONARR_0_URL: http://sonarr:8989/sonarr
      UN_SONARR_0_API_KEY: IMPORT_SONARR_API_KEY_HERE
#      UN_SONARR_1_URL: http://sonarr4k:8989/sonarr
#      UN_SONARR_1_API_KEY: IMPORT_SONARR4k_API_KEY_HERE
      UN_RADARR_0_URL: http://radarr:7878/radarr
      UN_RADARR_0_API_KEY: IMPORT_RADARR_API_KEY_HERE
#      UN_RADARR_1_URL: http://radarr4k:7878/radarr
#      UN_RADARR_1_API_KEY: IMPORT_RADARR4k_API_KEY_HERE
      UN_LIDARR_0_URL: http://lidarr:8686/lidarr
      UN_LIDARR_0_API_KEY: IMPORT_LIDARR_API_KEY_HERE
      UN_READARR_0_URL: http://readarr:8787/readarr
      UN_READARR_0_API_KEY: IMPORT_READARR_API_KEY_HERE
    security_opt:
      - no-new-privileges:true
    networks:
      media:
        ipv4_address: 10.0.30.110

networks:
  media:
    driver: bridge
    attachable: true
    internal: false
    ipam:
      config:
        - subnet: 10.0.30.0/24 # CHANGE THE SUBNET TO YOUR OWN PREFERRED RANGE!!!
          gateway: 10.0.30.1 # GATEWAY GOES WITH THE SUBNET!!!
docker compose up -d && until docker logs qbittorrent 2>&1 | grep -q "The WebUI administrator password was not set. A temporary password is provided for this session:"; do sleep 1; done && echo -e "\e[32mThe password for qBittorrent WebUI is: $(docker logs qbittorrent 2>&1 | grep "The WebUI administrator password was not set. A temporary password is provided for this session:" | awk '{print $NF}')\e[0m"

qBittorrent custom theme

cd /home/myusername/docker/arrs/data/torrents
mkdir -p /themes/qbittorrent && git clone https://gitlab.itgoit.nl/code-house/qbitnightwalker.git themes/qbittorrent/nightwalker
  1. Visit the qBittorrent webui and login
  2. Go to: Options --> Web UI
  3. Enable Use alternative Web UI
  4. For Files location put the following path: /data/torrents/themes/qbittorrent/qbitnightwalker
  1. Edit \qbitnightwalker\public\index.html
  2. Inside index.html find the name: bkg-pirate-pub-1.png and replace one or more with an available images from the images directory.
  3. Add new images to \qbitnightwalker\public\images

Productivity

This group is the All-in-One for your productive environment. These will have the following services:

cd /home/myusername/docker
mkdir glpi && cd "$_"
cd /home/myusername/docker
mkdir productivity && cd "$_"

nano docker-compose.yml

version: "3.8"

services:
# --- Dolibarr Image
  web:
    image: dolibarr/dolibarr:latest
    container_name: dolibarr
    environment:
      DOLI_DB_HOST: mariadb
      DOLI_DB_NAME: dolibarr
      DOLI_DB_USER: dolibarr
      DOLI_DB_PASSWORD: dolibarr!
      DOLI_ADMIN_LOGIN: admin
      DOLI_ADMIN_PASSWORD: dolibarr
      DOLI_URL_ROOT: http://localhost
      PHP_INI_DATE_TIMEZONE: Etc/UTC
    volumes:
      - ./dolibarr/documents:/var/www/documents
      - ./dolibarr/html/custom:/var/www/html/custom
    ports:
      - 8200:80
    restart: unless-stopped
    depends_on:
      - mariadb
		networks:
			- productivity

# --- Dolibarr MariaDB
  mariadb:
    image: mariadb:latest
    container_name: dolibarr-mariadb
    environment:
      MYSQL_DATABASE: dolibarr
      MYSQL_USER: dolibarr
      MYSQL_PASSWORD: dolibarr!
      MYSQL_ROOT_PASSWORD: dolibarr!!
    volumes:
      - ./dolibarr/db:/var/lib/mysql
    networks:
      - productivity


# --- GLPI MariaDB
  db:
    image: mariadb:10.7
    container_name: glpi-mariadb
    environment:
      MARIADB_DATABASE: glpi
      MARIADB_USER: glpi
      MARIADB_PASSWORD: glpi!
      MARIADB_ROOT_PASSWORD: glpi!!
    volumes:
      - ./glpi/db:/var/lib/mysql
    restart: unless-stopped
    networks:
      - productivity

# --- GLPI Image
  glpi:
    image: diouxx/glpi
    container_name: glpi
    environment:
      TIMEZONE: Etc/UTC
    volumes:
      - ./glpi/data:/var/www/html/glpi
      - /etc/timezone:/etc/timezone:ro
      - /etc/localtime:/etc/localtime:ro
    ports:
      - 8222:80
    restart: unless-stopped
    networks:
      - productivity


# --- Wiki.js Image
  wiki:
    image: ghcr.io/requarks/wiki:2
    container_name: wikijs
    environment:
      DB_TYPE: postgres
      DB_HOST: db
      DB_PORT: 5432
      DB_USER: wikijs
      DB_PASS: wikijs!
      DB_NAME: wiki
    volumes:
      - ./wikijs/data/content:/wiki/data/content
      - ./wikijs/config:/config
    ports:
      - 8141:3000
    restart: unless-stopped
    depends_on:
      - db
    networks:
      - productivity

# --- Wiki.js postgres
  db:
    image: postgres:11-alpine
    container_name: wikijs-postgres
    environment:
      POSTGRES_DB: wiki
      POSTGRES_PASSWORD: wikijs!
      POSTGRES_USER: wikijs
    logging:
      driver: none
    volumes:
      - ./wikijs/db:/var/lib/postgresql/data
    restart: unless-stopped
    networks:
      - productivity


# --- LinkAce Image with PHP 7.4 and nginx
  app:
    image: linkace/linkace:simple
    container_name: linkace
    volumes:
      - ./linkace/logs:/app/storage/logs
      - ./.env:/app/.env
    ports:
      - 8136:80
    restart: unless-stopped
    depends_on:
      - db
    networks:
      - productivity

# --- Linkace MariaDB 
  db:
    image: mariadb:10.5
    container_name: linkace-mariadb
    command: mysqld --character-set-server=utf8mb4 --collation-server=utf8mb4_bin
    environment:
      MYSQL_ROOT_PASSWORD: ${DB_PASSWORD}
      MYSQL_USER: ${DB_USERNAME}
      MYSQL_PASSWORD: ${DB_PASSWORD}
      MYSQL_DATABASE: ${DB_DATABASE}
    volumes:
      - ./linkace/mysql:/var/lib/mysql
    restart: unless-stopped
    networks:
      - productivity


# --- Seafile MariaDB 
  seafile-db:
    image: mariadb:latest
    container_name: seafile-mariadb
    environment:
      MYSQL_ROOT_PASSWORD: seafile!
      MYSQL_LOG_CONSOLE: true
    volumes:
      - ./seafile/db:/var/lib/mysql
    ports:
      - "9308:3306"
    restart: unless-stopped
    networks:
      - productivity

# --- Seafile Image 
  seafile:
    image: seafileltd/seafile-mc:latest
    container_name: seafile
    environment:
      DB_HOST: seafile-db
      DB_ROOT_PASSWD: seafile!
      TIME_ZONE: Etc/UTC
      SEAFILE_ADMIN_EMAIL: [email protected]
      SEAFILE_ADMIN_PASSWORD: seafile
      SEAFILE_SERVER_LETSENCRYPT: false
      SEAFILE_SERVER_HOSTNAME: seafile.DOMAIN.COM
    volumes:
      - ./seafile/data:/shared
    ports:
      - "8240:80"
    restart: unless-stopped
    depends_on:
      - seafile-db
      - seafile-memcached
    networks:
      - productivity

# --- Seafile memcached 
  seafile-memcached:
    image: memcached:1.6
    container_name: seafile-memcached
    command: memcached -m 256
    restart: unless-stopped
    networks:
      - productivity

# --- Seafile OnlyOffice-postgresql
  onlyoffice-postgresql:
    image: postgres:12
    container_name: onlyoffice-postgresql
    environment:
      POSTGRES_DB: onlyoffice
      POSTGRES_USER: onlyoffice
      POSTGRES_HOST_AUTH_METHOD: trust
    volumes:
      - ./onlyoffice/db:/var/lib/postgresql
    ports:
      - "9310:5432"
    restart: unless-stopped
    networks:
      - productivity

# --- Seafile OnlyOffice image
  onlyoffice-documentserver:
    image: onlyoffice/documentserver:latest
    container_name: onlyoffice-ds
    environment:
      DB_TYPE: postgres
      DB_HOST: onlyoffice-postgresql
      DB_PORT: 5432
      DB_USER: onlyoffice
      DB_NAME: onlyoffice
      AMQP_URI: amqp://guest:guest@onlyoffice-rabbitmq
      # Uncomment strings below to enable the JSON Web Token validation.
      JWT_ENABLED: true
      JWT_SECRET: onlyoffice
      JWT_HEADER: Authorization
      JWT_IN_BODY: true
    volumes:
      # Optional: see https://manual.seafile.com/deploy/only_office/
      #- ./onlyoffice/local.json:/etc/onlyoffice/documentserver/local.json
      #- ./onlyoffice/local-production-linux.json:/etc/onlyoffice/documentserver/local-production-linux.json
      - ./onlyoffice/data:/var/www/onlyoffice/Data
      - ./onlyoffice/lib:/var/lib/onlyoffice
      - ./onlyoffice/logs:/var/log/onlyoffice
    ports:
      - "8243:80"
    restart: unless-stopped
    networks:
      - productivity

# --- Seafile OnlyOffice rabbitmq
  onlyoffice-rabbitmq:
    image: rabbitmq:latest
    container_name: onlyoffice-rabbitmq
    volumes:
        - ./onlyoffice/rabbitmq/data:/var/lib/rabbitmq/
        - ./onlyoffice/rabbitmq/log:/var/log/rabbitmq
    restart: unless-stopped
    networks:
      - productivity


# --- Pwndrop Image
  pwndrop:
    image: lscr.io/linuxserver/pwndrop:latest
    container_name: pwndrop
    environment:
      PUID: 1000
      PGID: 1000
      TZ: Etc/UTC
      SECRET_PATH: /pwndrop # optional
    volumes:
      - ./pwndrop/config:/config
    ports:
      - 8133:8080
    restart: unless-stopped
    networks:
      - productivity


# --- GitLab Runner Image
  gitlab-runner:
    image: gitlab/gitlab-runner:alpine
    container_name: gitlab-runner
    volumes:
      - /var/run/docker.sock:/var/run/docker.sock
      - ./gitlab/gitlab-runner:/etc/gitlab-runner
    restart: unless-stopped
    depends_on:
      - web
    networks:
      - productivity

# --- GitLab Image
  gitlab:
    image: 'gitlab/gitlab-ce:latest'
    container_name: gitlab-ce
    hostname: 'gitlab.example.com'
    environment:
      GITLAB_OMNIBUS_CONFIG: |
        external_url 'https://gitlab.example.com'
        # Add any other gitlab.rb configuration here, each on its own line
    volumes:
      - ./gitlab/config:/etc/gitlab
      - ./gitlab/logs:/var/log/gitlab
      - ./gitlab/data:/var/opt/gitlab
    ports:
      - '8225:80'
      - '8226:443'
    restart: unless-stopped
    networks:
      - productivity


networks:
  productivity:
    driver: bridge
    attachable: true
    internal: false
    ipam:
      config:
        - subnet: 172.40.0.0/16 # CHANGE THE SUBNET TO YOUR OWN PREFERRED RANGE!!!
          gateway: 172.40.0.1 # GATEWAY GOES WITH THE SUBNET!!!
docker compose up -d

Configure GitLab

To get the admin password for GitLab use the following command:

docker exec -it gitlab-ce grep 'Password:' /etc/gitlab/initial_root_password

Network Monitoring

This group is the All-in-One for your network monitoring. These will have the following services:

cd /home/myusername/docker
mkdir prometheus && cd "$_"
nano prometheus.yml
global:
  scrape_interval:     15s # By default, scrape targets every 15 seconds.

  # Attach these labels to any time series or alerts when communicating with
  # external systems (federation, remote storage, Alertmanager).
  # external_labels:
  #  monitor: 'codelab-monitor'

# A scrape configuration containing exactly one endpoint to scrape:
# Here it's Prometheus itself.
scrape_configs:
  # The job name is added as a label `job=<job_name>` to any timeseries scraped from this config.
  - job_name: 'prometheus'
    # Override the global default and scrape targets from this job every 5 seconds.
    scrape_interval: 5s
    static_configs:
      - targets: ['localhost:9090']

  # Example job for node_exporter
  # - job_name: 'node_exporter'
  #   static_configs:
  #     - targets: ['node_exporter:9100']

  # Example job for cadvisor
  # - job_name: 'cadvisor'
  #   static_configs:
  #     - targets: ['cadvisor:8080']
cd /home/myusername/docker
mkdir netmonitor && cd "$_"

Do not forget to change myusername to your linux user name

nano docker-compose.yml

version: "3.8"

###--- Uptime Kuma Image ---###
services:
  uptimekuma:
    image: louislam/uptime-kuma:latest
    container_name: uptimekuma
    volumes:
      - /home/myusername/docker/uptime-kuma/data:/app/data
      - /var/run/docker.sock:/var/run/docker.sock
    ports:
      - "8160:3001"
    restart: unless-stopped
    networks:
      - monitoring

###--- Netdata Image ---###
  netdata:
    image: netdata/netdata
    container_name: netdata
    restart: unless-stopped
    cap_add:
      - SYS_PTRACE
      - SYS_ADMIN
    security_opt:
      - apparmor:unconfined
    volumes:
#      - ./config:/etc/netdata        # Optional
#      - ./lib:/var/lib/netdata       # Optional
#      - ./cache:/var/cache/netdata   # Optional
      - /:/host/root:ro,rslave
      - /etc/passwd:/host/etc/passwd:ro
      - /etc/group:/host/etc/group:ro
      - /etc/localtime:/etc/localtime:ro
      - /proc:/host/proc:ro
      - /sys:/host/sys:ro
      - /etc/os-release:/host/etc/os-release:ro
      - /var/log:/host/var/log:ro
      - /var/run/docker.sock:/var/run/docker.sock:ro
    ports:
      - 8166:19999
    networks:
      - monitoring


###--- Grafana Image ---###
  grafana:
    image: grafana/grafana-oss:latest
    container_name: grafana
    volumes:
      - ./grafana/data:/var/lib/grafana
    ports:
      - "8164:3000"
    restart: unless-stopped
    networks:
      - monitoring


###--- Prometheus Image - Data collector ---###
  prometheus:
    image: prom/prometheus:latest
    container_name: prometheus
    hostname: prometheus
#    restart: unless-stopped
    user: root
    command:
      - '--config.file=/etc/prometheus/prometheus.yml'
      - '--storage.tsdb.path=/prometheus'
      - '--web.console.libraries=/etc/prometheus/console_libraries'
      - '--web.console.templates=/etc/prometheus/consoles'
      - '--storage.tsdb.retention.time=240h'
      - '--web.enable-lifecycle'
    volumes:
      - ./prometheus/data:/prometheus
      - ./prometheus/prometheus.yml:/etc/prometheus/prometheus.yml
    ports:
      - 8320:9090
    labels:
      org.label-schema.group: "monitoring"
    networks:
      - monitoring
    depends_on:
      - cadvisor

###--- cadvisor Image - analyzes and exposes resource usage ---###
  cadvisor:
    image: gcr.io/cadvisor/cadvisor:latest
    container_name: cadvisor
    hostname: cadvisor
#    restart: unless-stopped
    privileged: true
    devices:
      - /dev/kmsg:/dev/kmsg
    volumes:
      - /:/rootfs:ro
      - /var/run:/var/run:ro
      - /sys:/sys:ro
      - /var/lib/docker:/var/lib/docker:ro
      - /cgroup:/cgroup:ro
    ports:
      - 8323:3000
    labels:
      org.label-schema.group: "monitoring"
    networks:
      - monitoring

###--- node-exporter Image - Analyzes Linux host metrics ---###
  nodeexporter:
    image: prom/node-exporter:latest
    container_name: nodeexporter
    hostname: nodeexporter
#    restart: unless-stopped
    command:
      - '--path.procfs=/host/proc'
      - '--path.rootfs=/rootfs'
      - '--path.sysfs=/host/sys'
      - '--collector.filesystem.mount-points-exclude=^/(sys|proc|dev|host|etc)($$|/)'
      - '--collector.systemd'
      - '--collector.processes'
    volumes:
      - /proc:/host/proc:ro
      - /sys:/host/sys:ro
      - /:/rootfs:ro
    ports:
      - 8322:9100
    labels:
      org.label-schema.group: "monitoring"
    networks:
      - monitoring

###--- node-exporter Image - Collects logs and metrics from multiple sources then forwards it ---###
  fluentbit:
    image: fluent/fluent-bit:latest
    container_name: logsvc 
    hostname: logsvc
#    restart: unless-stopped
    volumes:
      - ./fluent:/config
      - ./fluent/logs:/logs
    command: 
      - "-c"
      - "/config/fluent.yml"
    ports:
      - 8325:9880
      - 8326:4318
    networks:
      - monitoring

###--- node-exporter Image - Collects logs and metrics from multiple sources then forwards it ---###
  loki:
    image: grafana/loki:latest
    container_name: loki
    hostname: loki
#    restart: unless-stopped
    ports:
      - 8324:3100
    volumes:
      - ./loki/:/etc/loki/
    command: -config.file=/etc/loki/config.yml
    networks:
      - monitoring

###--- minio Image - Temporary storage backend for Loki ---###
  minio:
    image: minio/minio:latest
    container_name: minio
    hostname: minio
    user: root
    environment:
      MINIO_ROOT_USER: tempo
      MINIO_ROOT_PASSWORD: minio!!
    volumes:
      - ./minio/buckets:/data
    command: server /data --console-address ':9001'
    networks:
      - monitoring

###--- Tempo Image - Tracing backend for Grafana ---###
  tempo:
    image: grafana/tempo:latest
    container_name: tempo
    hostname: tempo
#    restart: unless-stopped
    command: "-target=scalable-single-binary -config.file=/etc/tempo.yaml"
    volumes:
      - ./tempo/tempo.yml:/etc/tempo.yaml
    ports:
      - 8327:3200
    networks:
      - monitoring
    depends_on:
      - minio

###--- OpenSpeedTest Image ---###
  openspeedtest:
    image: openspeedtest:latest
    container_name: openspeedtest
    ports:
      - 8161:3000 # HTTP
      - 8162:3001 # HTTPS
    restart: unless-stopped
    networks:
      - monitoring

networks:
  monitoring:
    driver: bridge
    attachable: true
    internal: false
    ipam:
      config:
        - subnet: 172.50.0.0/16 # CHANGE THE SUBNET TO YOUR OWN PREFERRED RANGE!!!
          gateway: 172.50.0.1 # GATEWAY GOES WITH THE SUBNET!!!


docker compose up -d

Remote Management

This group is the All-in-One for your Remote Management. These will have the following services:

cd /home/myusername/docker
mkdir remotemgnt && cd "$_"

Do not forget to change myusername to your linux user name

nano docker-compose.yml

version: "3.8"

# --- Portainer Image
services:
  portainer:
    image: portainer/portainer-ce:latest # For Business Edition use: portainer/portainer-ee:latest
    container_name: portainer
    volumes:
      - /var/run/docker.sock:/var/run/docker.sock
      - /home/myusername/docker/portainer:/data
    ports:
      - "8000:8000"
      - "9000:9000"
    restart: always
    networks:
      - remotemgnt

# --- Remotely Image
  remotely:
    image: immybot/remotely:latest
    container_name: remotely
    volumes:
      - /home/myusername/docker/remotely/data:/remotely-data
    ports:
      - 8215:5000
    restart: unless-stopped
    networks:
      - remotemgnt    
    
# --- Guacamole Image
  guacamole:
    image: abesnier/guacamole 	# The image didnt got updated --> jwetzell/guacamole
    container_name: guacamole
    volumes:
      - home/myusername/docker/guacamole/postgres:/config
    ports:
      - 8210:8080
    restart: unless-stopped
    networks:
      - remotemgnt

networks:
  remotemgnt:
    driver: bridge
    attachable: true
    internal: false
    ipam:
      config:
        - subnet: 172.60.0.0/16 # CHANGE THE SUBNET TO YOUR OWN PREFERRED RANGE!!!
          gateway: 172.60.0.1 # GATEWAY GOES WITH THE SUBNET!!!

volumes:
  portainer_data: