├── .bashrc ├── .env ├── README.md ├── _config.yml ├── docker-compose.yaml ├── free_ports.sh ├── revert_ports.sh └── synology-custom.sh /.bashrc: -------------------------------------------------------------------------------- 1 | # run 'source ~/.bashrc' to load latest changes in current session 2 | 3 | # ALIASES ##################################################### 4 | 5 | # Set docker aliases 6 | alias cdkr='cd /volume1/docker' 7 | alias list='sudo docker ps -a' 8 | alias down='sudo docker-compose down -v' 9 | alias up='sudo docker-compose up -d' 10 | alias pull='sudo docker-compose pull' 11 | alias inspect='sudo docker inspect' 12 | alias create='sudo docker-compose up --no-start' 13 | alias stop='sudo docker stop' 14 | alias start='sudo docker start' 15 | alias prune='sudo docker system prune -a' 16 | 17 | # FUNCTIONS #################################################### 18 | # Restarts a container 19 | cycle() { 20 | stop $1 21 | start $1 22 | } 23 | 24 | # pulls a image and then creates and starts it 25 | pullup() { 26 | pull $1 27 | up $1 28 | } 29 | 30 | # Opens a bash shell, given a supplied container name 31 | # 32 | term() { 33 | sudo docker exec -it $1 /bin/bash 34 | } 35 | 36 | # Shows 'port in use' details for a supplied port number 37 | # 38 | piu() { 39 | sudo netstat -plan | grep ":$1" 40 | } 41 | 42 | # ENVIRONMENT SETTINGS ########################################## 43 | # 44 | # Helps avoid timeouts for large yaml scripts 45 | export DOCKER_CLIENT_TIMEOUT=360 46 | export COMPOSE_HTTP_TIMEOUT=360 47 | -------------------------------------------------------------------------------- /.env: -------------------------------------------------------------------------------- 1 | # 2 | # Global 3 | # 4 | TIME_ZONE=Australia/Brisbane 5 | 6 | DOMAINNAME=your.domain.name 7 | #cloudflare details not implemented yet 8 | CLOUDFLARE_EMAIL= 9 | CLOUDFLARE_API_KEY= 10 | 11 | # 12 | # Ubuntu / rPi testing environments 13 | # - Uncomment the needed section. Can remove un-needed bits here 14 | # 15 | #PUID=1000 16 | #PGID=1000 17 | #MEDIA_PATH=/mnt/syno 18 | #PERSIST=/mnt/usb-wd4/docker 19 | #DOWNLOADS=/mnt/usb-wd4/downloads 20 | #INCOMPLETE=/mnt/usb-wd4/incomplete 21 | 22 | # 23 | # Synology production environment 24 | # - Uncomment the needed section. Can remove un-needed bits here 25 | # 26 | PUID=1026 27 | PGID=100 28 | MEDIA_PATH=/volume1/Multimedia 29 | PERSIST=/volume1/docker 30 | DOWNLOADS=/volume1/downloads/pipeline-downloads 31 | INCOMPLETE=/volume1/downloads/pipeline-incomplete 32 | 33 | # 34 | # Windows testing 35 | # - Also requires cifs volume to be uncommented 36 | # - Uncomment the needed section. Can remove un-needed bits here 37 | # 38 | #PUID=1000 39 | #PGID=1000 40 | #MEDIA_PATH=media_volume 41 | #PERSIST=c:/docker 42 | #DOWNLOADS=c:/downloads 43 | #INCOMPLETE=c:/incomplete 44 | 45 | # 46 | # GMAIL 47 | # - This section is not yet implemented, so you can leave it all as is 48 | # 49 | GM_USER__SECRET= 50 | GM_TO__SECRET= 51 | GM_PSW__SECRET= 52 | GM_SERVER=smtp.gmail.com 53 | GM_PORT=587 54 | 55 | # Bitwarden 56 | BW_TOKEN__SECRET= 57 | 58 | # 59 | # Plex 60 | # - Used in health checks and other apps. If left blank, set HEALTH_CHECK_OVERRIDE=/bin/true 61 | # 62 | PLEX_CLAIM_TOKEN__SECRET= 63 | HOST_NAME=Centaurus 64 | ADVERTISE_IP=http://192.168.1.135:32400,https://plex.yourdomain.com 65 | ALLOWED_NETWORKS=192.168.1.0/24,172.18.0.0/24 66 | PLEX_TOKEN__SECRET= 67 | VERSION=plexpass 68 | 69 | # 70 | # PI-HOLE 71 | # 72 | PH_SVR_IP=192.168.1.135 73 | PH_PSW__SECRET= 74 | REV_SERVER=true 75 | REV_SERVER_DOMAIN=local 76 | REV_SERVER_TARGET=192.168.1.1 77 | REV_SERVER_CIDR=192.168.0.0/16 78 | HOSTNAME=pihole 79 | # lan domain - optional 80 | LAN_DOMAIN_NAME=lan 81 | # 82 | # Networks 83 | # 84 | SUBNET=192.168.1.0/24 85 | # Change this to your ethernet adapter interface. "ifconfig" to list 86 | ETHCARD=ovs_bond0 87 | 88 | # 89 | # DuckDNS 90 | # 91 | DUCKSUBDOMS__SECRET= 92 | DUCKTOKEN__SECRET= 93 | 94 | # 95 | # netdata 96 | # - Root ID, which is required to show Docker container names in GUI. 97 | # 98 | NDROOTID=0 99 | 100 | # 101 | # watchtower 102 | # - Optional interval (seconds) for Watchtower updates. (Defaults to daily) 103 | # - If set, use formula: interval = numContainers x 216 104 | # 105 | WT_INTERVAL=15000 106 | 107 | # 108 | # moviematch 109 | # 110 | PURL=http://192.168.1.135:32400 111 | LIBFILTER=Movies 112 | 113 | # 114 | # Health check and restart policies 115 | # - Comment out HEALTH_CHECK_OVERRIDE once all **API Keys** entered below. 116 | # - *Needs* to be uncommented until API_KEYS entered. 117 | # - Set AUTOHEAL_RESTART to true to enable restarts of unhealthy containers 118 | # 119 | #HEALTH_CHECK_OVERRIDE=/bin/true 120 | AUTOHEAL_RESTART=true 121 | 122 | # 123 | # API_Keys 124 | # - Used in health checks. If commented, uncomment HEALTH_CHECK_OVERRIDE=/bin/true 125 | # - Never set these keys and leave "HEALTH_CHECK_OVERRIDE=/bin/true" uncommented 126 | # 127 | SONARR_API_KEY__SECRET= 128 | RADARR_API_KEY__SECRET= 129 | BAZARR_API_KEY__SECRET= 130 | RADARR4K_API_KEY__SECRET= 131 | 132 | # 133 | # Bookstack 134 | # 135 | BSDB=bookstackapp 136 | BSUSER__SECRET= 137 | BSPSW__SECRET= 138 | #BSBASEURL=http://192.168.1.135:6875 139 | BSBASEURL=https://bs.yourdomain.com 140 | 141 | # 142 | # Telegram 143 | # 144 | TELEGRAM_BOT_TOKEN__SECRET= 145 | TELEGRAM_CHAT_ID__SECRET= 146 | 147 | 148 | # Not frequently Used ########################################################################################## 149 | 150 | # 151 | # Pushover 152 | # 153 | PUSHOVER_USER_API__SECRET= 154 | PUSHOVER_APP_API__SECRET= 155 | PUSHOVER_DEVICE=oneplus5 156 | 157 | # 158 | # Pushbullet 159 | # 160 | PUSHBULLET_API__SECRET= 161 | 162 | # 163 | # Chevereto 164 | # 165 | CDB=chevereto 166 | CUSER__SECRET= 167 | CPSW__SECRET= 168 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # DockerStack 2 | My docker container definitions (docker compose) that I run. Plus a few other little bits. 3 | 4 | Just update the values in the .env file and run "docker-compose up -d". I normally persist my local docker files to /home/user/docker/appName, but put them where you like. 5 | 6 | Once everything is installed, you will still have to configure each app. 7 | 8 | Dont forget to create directories under your docker folder for the volumes mapped in the yaml 9 | 10 | Note: I generally organise my media under one top-level directory and all lower case. I find this makes it easier with container references. 11 | e.g. 12 | media - with the following as sub-direcories: 13 | - movies 14 | - 4k 15 | - pictures 16 | - 3d 17 | - tv 18 | - audiobooks 19 | - ebooks 20 | - music 21 | - anime 22 | 23 | This yaml will run on Synology NAS, Ubuntu, 95% on Windows (with WSL 2), and at least 70% on a Raspberry Pi (but not all at once). 24 | 25 | Join me and others on the Dockerholics fb group. 26 | 27 | https://www.facebook.com/groups/205764024543769/?ref=share 28 | -------------------------------------------------------------------------------- /_config.yml: -------------------------------------------------------------------------------- 1 | theme: jekyll-theme-modernist -------------------------------------------------------------------------------- /docker-compose.yaml: -------------------------------------------------------------------------------- 1 | # Matt's DockerStack 2 | # ------------------ 3 | # A list of all the containers that I run. "Gotta catch 'em all!" :) 4 | # 5 | # *** Join me and others on the Dockerholics FB group https://www.facebook.com/groups/205764024543769 6 | # 7 | # 8 | # Networking & Security 9 | # ------------------------------------------------------------ 10 | # 9443,980 - Nginx Proxy Manager Reverse proxy app with LetsEncrypt included 11 | # As needed - VPN OpenVpn client - used for torrent-related activities 12 | # As needed - VPNPrivoxy OpenVPN client - used for web proxy 'privoxy' for bypassing geo-block 13 | # 5801 - filezilla FTP Client 14 | # 80 - Nginx1 Basic web server 15 | # 80 - Nginx2 Basic web server 16 | # 8383 - LibreSpeed Server to device speed test utility 17 | # 80, 6443 - Pi-Hole (with unbound) Ad blocker and DHCP, using unbound dns lookup 18 | # - - DuckDNS Dynamic DNS updater for DuckDNS 19 | # 8118 - Privoxy Web proxy server, using VPNPrivoxy for accessing geo-blocked web sites 20 | # 8089 - VaultWarden Passowrd management application 21 | # 22 | # Media Playing or Provisioning 23 | # ------------------------------------------------------------ 24 | # 32400 - Plex Media Server Media server 25 | # 8096 - JellyFin Media server 26 | # 8056 - jfa-go JellyFin managent tool 27 | # 8000 - DizQtv Simulateds HDHomeRun device, but reads from selected Plex content 28 | # 2001 - MovieMatch Allows user matching of movies to watch (think Tinder for movies) 29 | # 34400 - Xteve Allows multiple TV guides to be consolidated into one 30 | # 8083 - Calibre-web E-book browsing and viewing 31 | # 9876 - Poster Plex, sonarr, radarr media display 32 | # 33 | # Photo/Video Management 34 | # ------------------------------------------------------------ 35 | # 880 - Pwigo Self-hosted image manager 36 | # 90 - Lychee Photo manager 37 | # 8282 - Photoshow Photo manager 38 | # 4343 - Chevereto Stock image manager 39 | # 8010 - Papermerge Document storage and OCR 40 | # 6969 - Stash Video collection manager 41 | # 42 | # Collaboration and Synchronisation 43 | # ------------------------------------------------------------ 44 | # 8384 - SyncThing Synchronisation of files between devices 45 | # 9001 - TheLounge IRC Client 46 | # 6875 - BookStack Shared documentation hub 47 | # 7777 - HasteBin Private PasteBin clone 48 | # 2525 - Privatebin Pastebin alternative 49 | # 50 | # Media Gathering 51 | # ------------------------------------------------------------ 52 | # 8989 - Sonarr Search for TV shows 53 | # 7878 - Radarr Search for movies 54 | # 7879 - Radarr4k Search for 4k movies 55 | # 8686 - Lidarr Search for music 56 | # 8787 - Readarr Search for e-books 57 | # 5299 - LazyLibrarian Search for e-books and audio books 58 | # 8080 - Sabnzbd Usenet downloader 59 | # 9991 - Qbittorrent Torrent downloader 60 | # 9117 - Jackett Presents an API-callable interface over a number of torrent sites 61 | # 5076 - NzbHydra2 NZB and Jacket aggregator 62 | # 6767 - Bazarr Downloads subtitles 63 | # 3579 - OMBI End-user media requester 64 | # 8265 - Tdarr Media conversion tool 65 | # 5800 - Handbrake Media conversion tool 66 | # 7080, 7081- Calibre E-book metadata manager 67 | # 5055 - Overseer Media request tool 68 | # 8484 - Gaps Plex missing media searcher 69 | # 6789 - NzbGet Usenet downloader 70 | # 8282 - Rutorrent Torrent download app 71 | # 8800 - Alltube Youtube downloader 72 | # 73 | # Docker Related 74 | # ------------------------------------------------------------ 75 | # - - Watchtower Update containers with latest images 76 | # - - Autoheal Restarts unhealthy containers 77 | # 9000 - Portainer Docker management tool 78 | # 9999 - Dozzle Container log aggregator 79 | # 80 | # System Monitoring & Management 81 | # ------------------------------------------------------------ 82 | # 19999 - Netdata Monitors and presents graphs for system attributes 83 | # 88 - Monitorr Web page monitor 84 | # 8082 - NextCloud Collaboration platform 85 | # 8123 - HomeAssistant Smart home monitoring and management 86 | # 8181 - Tautulli Plex monitoring and statistics 87 | # 8085 - Domoticz Smart home montioring and management 88 | # 6080 - Scrutiny Hard Drive monitoring app 89 | # 5050 - ChangeDetection Web site monitoring app 90 | # 91 | # Databases 92 | # ------------------------------------------------------------ 93 | # 3306 - MariaDB MariaDB Database(MySQL Clone) 94 | # 3306 - MySQL MySQL Database 95 | # 3001 - MySQLWorkBench Client query tool for MySQL and MariaDB databases 96 | # 97 | # Programming 98 | # ------------------------------------------------------------ 99 | # 1880 - Node-Red Develop code for linking smart devices 100 | # 101 | # Link / Page Organisation 102 | # ------------------------------------------------------------ 103 | # 5443 - Organizr Link / Page manager 104 | # 2000 - DashMachine Link manager 105 | # 8282 - Homer Link / Page manager 106 | # 107 | # Information 108 | # ------------------------------------------------------------ 109 | # 8585 - FreshRSS RSS Feed 110 | # 5555 - MagicMirror Magic mirror presentation software 111 | # 112 | # Gaming 113 | # ------------------------------------------------------------ 114 | # 1234 - OpenRA Open Red Alert game server 115 | # 116 | # CRM 117 | # ------------------------------------------------------------ 118 | # 8008 - Monica CRM system 119 | # 120 | # Content Creation 121 | # 2443 - Draw.IO Diagram creation app 122 | # 2368 - Ghost Self-hosted blog app 123 | # 124 | 125 | version: '2.4' 126 | # VOLUMES # 127 | #volumes: 128 | # cifs: #use this if running docker on windows and needing to map a cifs network drive 129 | # driver: local 130 | # driver_opts: 131 | # type: cifs 132 | # o: username=(username),password=(password),rw,domain=(domainname),uid=1000,gid=1000 133 | # device: "\\\\(ipaddress)\\shared" 134 | 135 | # VOLUMES # 136 | #volumes: 137 | # nginx2: 138 | 139 | # NETWORKS # 140 | networks: 141 | # # Cant use ip ranges yet. hopefully coming in a future release 142 | macv_network: 143 | driver: macvlan 144 | driver_opts: 145 | parent: $ETHCARD 146 | ipam: 147 | driver: default 148 | config: 149 | - subnet: 192.168.1.0/24 150 | gateway: 192.168.1.1 151 | 152 | # SERVICES # 153 | services: 154 | changedetection: 155 | container_name: changedetection 156 | image: dgtlmoon/changedetection.io 157 | ports: 158 | - "5050:5000" 159 | environment: 160 | - TZ=$TIME_ZONE 161 | volumes: 162 | - $PERSIST/changedetection:/datastore 163 | restart: unless-stopped 164 | 165 | # Exportarr 166 | # Open app with http://hostIP:1234?token=xyzzy 167 | exportarr: 168 | container_name: exportarr 169 | image: petersem/exportarr 170 | environment: 171 | NODE_ENV: production 172 | TOKEN: "xyzzy" 173 | RADARR_URL: "http://192.168.1.135:7878" 174 | RADARR_TOKEN: $RADARR_API_KEY__SECRET 175 | ports: 176 | - 1234:3000 177 | 178 | # Alltube 179 | alltube: 180 | image: rudloff/alltube 181 | container_name: alltube 182 | environment: 183 | - PUID=$PUID 184 | - PGID=$PGID 185 | - TZ=$TIME_ZONE 186 | ports: 187 | - 8800:80 188 | restart: unless-stopped 189 | 190 | # Papermerge 191 | papermerge: 192 | image: ghcr.io/linuxserver/papermerge 193 | container_name: papermerge 194 | environment: 195 | - PUID=$PUID 196 | - PGID=$PGID 197 | - TZ=Australia/Brisbane 198 | # - REDIS_URL= #optional 199 | volumes: 200 | - $PERSIST/papermerge/config:/config 201 | - $PERSIST/papermerge/data:/data 202 | ports: 203 | - 8010:8000 204 | restart: unless-stopped 205 | 206 | # Ghost 207 | ghost: 208 | container_name: ghost 209 | image: ghost 210 | restart: unless-stopped 211 | ports: 212 | - 2368:2368 213 | environment: 214 | # see https://ghost.org/docs/config/#configuration-options 215 | database__client: mysql 216 | database__connection__host: ghostdb 217 | database__connection__user: casper 218 | database__connection__password: secret 219 | database__connection__database: ghost 220 | # this url value is just an example, and is likely wrong for your environment! 221 | url: http://192.168.1.135:2368 222 | # contrary to the default mentioned in the linked documentation, this image defaults to NODE_ENV=production (so development mode needs to be explicitly specified if desired) 223 | #NODE_ENV: development 224 | depends_on: 225 | - ghostdb 226 | 227 | # Ghost Database 228 | ghostdb: 229 | image: mysql:5.7 230 | container_name: ghostdb 231 | restart: unless-stopped 232 | environment: 233 | - MYSQL_ROOT_PASSWORD=Whooo-ooo! 234 | - MYSQL_DATABASE=ghost 235 | - MYSQL_RANDOM_ROOT_PASSWORD=true 236 | - MYSQL_USER=casper 237 | - MYSQL_PASSWORD=secret 238 | volumes: 239 | - $PERSIST/ghostdb:/var/lib/mysql 240 | 241 | # Scrutiny 242 | scrutiny: 243 | image: ghcr.io/linuxserver/scrutiny 244 | container_name: scrutiny 245 | cap_add: 246 | - SYS_RAWIO 247 | - SYS_ADMIN #optional 248 | privileged: true 249 | environment: 250 | - PUID=$PUID 251 | - PGID=$PGID 252 | - TZ=Australia/Brisbane 253 | - SCRUTINY_API_ENDPOINT=http://localhost:8080 254 | - SCRUTINY_WEB=true 255 | - SCRUTINY_COLLECTOR=true 256 | volumes: 257 | - $PERSIST/scrutiny:/config 258 | - /run/udev:/run/udev:ro 259 | ports: 260 | - 6080:8080 261 | devices: 262 | - /dev:/dev 263 | restart: unless-stopped 264 | 265 | # draw.io 266 | drawio: 267 | image: fjudith/draw.io 268 | ports: 269 | - 2443:8443 270 | - 2080:8080 271 | container_name: drawio 272 | restart: unless-stopped 273 | 274 | # Homer 275 | homer: 276 | container_name: homer 277 | image: b4bz/homer 278 | ports: 279 | - 8008:80 280 | environment: 281 | - UID=$PUID 282 | - GID=$PGID 283 | volumes: 284 | - $PERSIST/homer:/www/assets 285 | ports: 286 | - 8282:8080 287 | restart: always 288 | 289 | # monica 290 | monica: 291 | container_name: monica 292 | image: monica 293 | depends_on: 294 | - monicadb 295 | ports: 296 | - 8008:80 297 | environment: 298 | - APP_KEY=thisismyrandomappkey!!likeit?007 299 | - DB_HOST=monicadb 300 | volumes: 301 | - $PERSIST/monica:/var/www/html/storage 302 | restart: unless-stopped 303 | 304 | # monica database 305 | monicadb: 306 | container_name: monicadb 307 | image: mysql:5.7 308 | environment: 309 | - MYSQL_RANDOM_ROOT_PASSWORD=true 310 | - MYSQL_DATABASE=monica 311 | - MYSQL_USER=homestead 312 | - MYSQL_PASSWORD=secret 313 | volumes: 314 | - $PERSIST/monicadb:/var/lib/mysql 315 | restart: unless-stopped 316 | 317 | # Poster 318 | poster: 319 | image: petersem/poster 320 | container_name: poster 321 | environment: 322 | TZ: $TIME_ZONE 323 | volumes: 324 | - $PERSIST/poster/randomthemes:/usr/src/app/public/randomthemes 325 | - $PERSIST/poster/config:/usr/src/app/config 326 | ports: 327 | - 9876:3000 328 | restart: unless-stopped 329 | 330 | # Password Manager 331 | vaultwarden: 332 | container_name: vaultwarden 333 | image: vaultwarden/server 334 | restart: always 335 | volumes: 336 | - $PERSIST/vaultwarden/data:/data 337 | - $PERSIST/vaultwarden/ssl:/ssl 338 | - /etc/localtime:/etc/localtime:ro 339 | ports: 340 | - 8089:8089 341 | - 3012:3012 342 | user: $PUID:$PGID 343 | environment: 344 | - LOG_FILE=/data/vaultwarden.log 345 | - PUID=$PUID 346 | - PGID=$PGID 347 | - TZ=$TIME_ZONE 348 | # - SIGNUPS_ALLOWED=true 349 | - SIGNUPS_ALLOWED=false 350 | - INVITATIONS_ALLOWED=true 351 | - LOG_LEVEL=warn 352 | - EXTENDED_LOGGING=true 353 | - DOMAIN=https://bw.$DOMAINNAME 354 | - ROCKET_PORT=8089 355 | - WEBSOCKET_ENABLED=true 356 | - ADMIN_TOKEN=$BW_TOKEN__SECRET 357 | - SMTP_HOST=$GM_SERVER 358 | - SMTP_FROM=$GM_USER__SECRET 359 | - SMTP_PORT=$GM_PORT 360 | - SMTP_SSL=true 361 | - SMTP_USERNAME=$GM_USER__SECRET 362 | - SMTP_PASSWORD=$GM_PSW__SECRET 363 | labels: 364 | - autoheal=true 365 | 366 | # 367 | # privatebin - pastebin alternative 368 | # 369 | privatebin: 370 | container_name: privatebin 371 | restart: unless-stopped 372 | image: privatebin/nginx-fpm-alpine 373 | ports: 374 | - 2525:8080 375 | volumes: 376 | - $PERSIST/privatebin:/srv/data 377 | environment: 378 | - PUID=$PUID 379 | - PGID=$PGID 380 | - TZ=$TIME_ZONE 381 | - PHP_TZ=$TIME_ZONE 382 | - PASSWORD=false 383 | 384 | # 385 | # piwigo - photo management application 386 | # 387 | piwigo: 388 | image: ghcr.io/linuxserver/piwigo 389 | container_name: piwigo 390 | environment: 391 | - PUID=$PUID 392 | - PGID=$PGID 393 | - TZ=$TIME_ZONE 394 | volumes: 395 | - $PERSIST/piwigo/config:/config 396 | - $MEDIA_PATH/pictures:/config/www/gallery/galleries 397 | ports: 398 | - 880:80 399 | restart: unless-stopped 400 | labels: 401 | - autoheal=$AUTOHEAL_RESTART 402 | healthcheck: 403 | test: curl -fSs http://127.0.0.1:80 || exit 1 404 | start_period: 120s 405 | timeout: 10s 406 | interval: 5s 407 | retries: 3 408 | 409 | piwigodb: 410 | container_name: piwigodb 411 | image: linuxserver/mariadb 412 | environment: 413 | - PUID=$PUID 414 | - PGID=$PGID 415 | - TZ=$TIME_ZONE 416 | - MYSQL_ROOT_PASSWORD=piwigo 417 | - MYSQL_DATABASE=piwigo 418 | - MYSQL_USER=piwigo 419 | - MYSQL_PASSWORD=piwigo 420 | expose: 421 | - 3306 422 | volumes: 423 | - $PERSIST/piwigodb:/config 424 | restart: unless-stopped 425 | labels: 426 | - autoheal 427 | healthcheck: 428 | test: ["CMD", "mysqladmin", "ping", "--silent"] 429 | 430 | nodered: 431 | image: nodered/node-red 432 | container_name: nodered 433 | environment: 434 | - PUID=$PUID 435 | - PGID=$PGID 436 | - TZ=$TIME_ZONE 437 | volumes: 438 | - $PERSIST/node-red:/data 439 | ports: 440 | - 1880:1880 441 | labels: 442 | - autoheal=$AUTOHEAL_RESTART 443 | healthcheck: 444 | test: curl -fSs http://127.0.0.1:1880 || exit 1 445 | start_period: 90s 446 | timeout: 10s 447 | interval: 5s 448 | retries: 3 449 | restart: unless-stopped 450 | 451 | # 452 | # moviematch - allows two or more people to select movies to watch on plex 453 | # - no health check available atm 454 | # 455 | moviematch: 456 | container_name: moviematch 457 | restart: unless-stopped 458 | image: lukechannings/moviematch 459 | ports: 460 | - 2001:8000 461 | environment: 462 | - PLEX_TOKEN=$PLEX_TOKEN__SECRET 463 | - PLEX_URL=$PURL 464 | - LIBRARY_FILTER=$LIBFILTER 465 | # - ROOT_PATH=/ 466 | - PUID=$PUID 467 | - PGID=$PGID 468 | - TZ=$TIME_ZONE 469 | depends_on: 470 | plex: 471 | condition: service_healthy 472 | 473 | # 474 | # magic mirror - drives display for magic mirror projects 475 | # - no health check available atm 476 | # 477 | magicmirror: 478 | container_name: magicmirror 479 | image: bastilimbach/docker-magicmirror 480 | restart: unless-stopped 481 | volumes: 482 | - /etc/localtime:/etc/localtime:ro 483 | - $PERSIST/magic_mirror/config:/opt/magic_mirror/config 484 | - $PERSIST/magic_mirror/modules:/opt/magic_mirror/modules 485 | - $PERSIST/magic_mirror/css/custom.css:/opt/magic_mirror/css/custom.css 486 | environment: 487 | - PUID=$PUID 488 | - PGID=$PGID 489 | - TZ=$TIME_ZONE 490 | ports: 491 | - 5555:8080 492 | 493 | syncthing: 494 | container_name: syncthing 495 | environment: 496 | - PUID=$PUID 497 | - PGID=$PGID 498 | - TZ=$TIME_ZONE 499 | - UMASK_SET=022 500 | volumes: 501 | - $PERSIST/syncthing/config:/config 502 | - $PERSIST/syncthing/data1:/data1 503 | - $PERSIST/syncthing/data2:/data2 504 | ports: 505 | - 8384:8384 506 | - 22000:22000 507 | - 21027:21027/udp 508 | image: linuxserver/syncthing 509 | restart: unless-stopped 510 | 511 | # 512 | # librespeed - internal speed test host to lan device 513 | # - no health check available atm 514 | # 515 | librespeed: 516 | image: linuxserver/librespeed 517 | container_name: librespeed 518 | environment: 519 | - PUID=$PUID 520 | - PGID=$PGID 521 | - TZ=$TIME_ZONE 522 | - PASSWORD=PASSWORD 523 | volumes: 524 | - $PERSIST/librespeed:/config 525 | ports: 526 | - 8383:80 527 | restart: unless-stopped 528 | 529 | plex: 530 | container_name: plex 531 | hostname: $HOST_NAME 532 | restart: unless-stopped 533 | image: linuxserver/plex 534 | volumes: 535 | - $PERSIST/plex/config:/config 536 | - $PERSIST/plex/transcode:/transcode 537 | - $MEDIA_PATH:/media 538 | - $MEDIA_PATH/audiobooks:/audiobooks:rw 539 | network_mode: host 540 | ports: 541 | - "32400:32400/tcp" 542 | - "3005:3005/tcp" 543 | - "8324:8324/tcp" 544 | - "32469:32469/tcp" 545 | - "1901:1900/udp" 546 | - "32410:32410/udp" 547 | - "32412:32412/udp" 548 | - "32413:32413/udp" 549 | - "32414:32414/udp" 550 | dns: 551 | - 8.8.8.8 552 | - 8.8.4.4 553 | environment: 554 | - PUID=$PUID 555 | - PGID=$PGID 556 | - TZ=$TIME_ZONE 557 | - HOSTNAME=$HOST_NAME 558 | - PLEX_CLAIM=$PLEX_CLAIM_TOKEN__SECRET 559 | - ADVERTISE_IP=$ADVERTISE_IP 560 | - VERSION=$VERSION 561 | - ALLOWED_NETWORKS=$ALLOWED_NETWORKS 562 | labels: 563 | - autoheal=$AUTOHEAL_RESTART 564 | healthcheck: 565 | test: curl -fsS http://localhost:32400/identity > /dev/null || exit 1 566 | start_period: 60s 567 | timeout: 10s 568 | interval: 5s 569 | retries: 3 570 | devices: 571 | - /dev/dri/renderD128:/dev/dri/renderD128 572 | - /dev/dri/card0:/dev/dri/card0 573 | - /dev/dri:/dev/dri 574 | # cpu_percent: 50 575 | #mem_limit: 1500M 576 | #mem_reservation: 1300M 577 | 578 | homeassistant: 579 | container_name: homeassistant 580 | restart: always 581 | image: homeassistant/home-assistant 582 | #devices: 583 | # - /dev/ttyUSB0:/dev/ttyUSB0 584 | # - /dev/ttyUSB1:/dev/ttyUSB1 585 | # - /dev/ttyACM0:/dev/ttyACM0 586 | volumes: 587 | - $PERSIST/homeassistant:/config 588 | - /etc/localtime:/etc/localtime:ro 589 | ports: 590 | - "8123:8123" 591 | privileged: true 592 | environment: 593 | - PUID=$PUID 594 | - PGID=$PGID 595 | - TZ=$TIME_ZONE 596 | 597 | privoxy: 598 | image: vimagick/privoxy 599 | container_name: privoxy 600 | environment: 601 | - PUID=$PUID 602 | - PGID=$PGID 603 | - TZ=$TIME_ZONE 604 | # Surfaced via vpnprivoxy 605 | # ports: 606 | # - "8818:8118" 607 | volumes: 608 | - $PERSIST/privoxy/user.action:/etc/privoxy/user.action 609 | - $PERSIST/privoxy/user.filter:/etc/privoxy/user.filter 610 | network_mode: "service:vpnprivoxy" 611 | cap_add: 612 | - NET_ADMIN 613 | restart: always 614 | depends_on: 615 | vpnprivoxy: 616 | condition: service_healthy 617 | 618 | vpnprivoxy: 619 | devices: 620 | - /dev/net/tun 621 | restart: unless-stopped 622 | container_name: vpnprivoxy 623 | ports: 624 | # privoxy 625 | - 8818:8118 626 | image: dperson/openvpn-client 627 | security_opt: 628 | - label:disable 629 | cap_add: 630 | - NET_ADMIN 631 | stdin_open: true 632 | tty: true 633 | dns: 634 | - 1.1.1.1 635 | volumes: 636 | - $PERSIST/vpnprivoxy:/vpn 637 | command: -f "" 638 | 639 | portainer: 640 | image: portainer/portainer-ce 641 | container_name: portainer 642 | restart: always 643 | command: -H unix:///var/run/docker.sock 644 | ports: 645 | - "9000:9000" 646 | volumes: 647 | - /var/run/docker.sock:/var/run/docker.sock 648 | - $PERSIST/portainer-ce/data:/data 649 | environment: 650 | - TZ=$TIME_ZONE 651 | 652 | # 653 | # Watchtower - updates containers with latest images 654 | # - no health check available (if it fails, it just restarts by default) 655 | # 656 | watchtower: 657 | container_name: watchtower 658 | image: containrrr/watchtower 659 | volumes: 660 | - /var/run/docker.sock:/var/run/docker.sock 661 | # Environment section needs to be in this format for the notifications to work 662 | environment: 663 | TZ: $TIME_ZONE 664 | WATCHTOWER_REMOVE_VOLUMES: "true" 665 | WATCHTOWER_CLEANUP: "true" 666 | WATCHTOWER_INCLUDE_STOPPED: "true" 667 | WATCHTOWER_POLL_INTERVAL: $WT_INTERVAL 668 | WATCHTOWER_TIMEOUT: 15 669 | WATCHTOWER_NOTIFICATIONS_LEVEL: info 670 | WATCHTOWER_NOTIFICATIONS: shoutrrr 671 | # Using Pushbullet, telegram and pushover as examples, but just pick one 672 | # WATCHTOWER_NOTIFICATION_URL: "pushover://shoutrrr:$PUSHOVER_APP_API__SECRET@$PUSHOVER_USER_API__SECRET/?devices=$PUSHOVER_DEVICE telegram://$TELEGRAM_BOT_TOKEN__SECRET@telegram?channels=$TELEGRAM_CHAT_ID__SECRET pushbullet://$PUSHBULLET_API__SECRET" 673 | WATCHTOWER_NOTIFICATION_URL: "telegram://$TELEGRAM_BOT_TOKEN__SECRET@telegram?channels=$TELEGRAM_CHAT_ID__SECRET" 674 | # WATCHTOWER_NOTIFICATIONS: email 675 | # WATCHTOWER_NOTIFICATION_EMAIL_FROM: $GM_USER__SECRET 676 | # WATCHTOWER_NOTIFICATION_EMAIL_TO: $GM_TO__SECRET 677 | # WATCHTOWER_NOTIFICATION_EMAIL_SERVER: $GM_SERVER 678 | # WATCHTOWER_NOTIFICATION_EMAIL_SERVER_PORT: $GM_PORT 679 | # WATCHTOWER_NOTIFICATION_EMAIL_SERVER_USER: $GM_USER__SECRET 680 | # WATCHTOWER_NOTIFICATION_EMAIL_SERVER_PASSWORD: $GM_PSW__SECRET 681 | restart: always 682 | 683 | radarr: 684 | environment: 685 | - UMASK_SET=22 686 | - PUID=$PUID 687 | - PGID=$PGID 688 | - TZ=$TIME_ZONE 689 | volumes: 690 | - $PERSIST/radarr/config:/config:rw 691 | - $MEDIA_PATH:/media:rw 692 | - $DOWNLOADS:/downloads:rw 693 | container_name: radarr 694 | labels: 695 | - autoheal=$AUTOHEAL_RESTART 696 | healthcheck: 697 | test: ${HEALTH_CHECK_OVERRIDE:-curl -fSs http://127.0.0.1:7878/api/system/status?apikey=}${RADARR_API_KEY__SECRET:- }|| exit 1 698 | start_period: 45s 699 | timeout: 10s 700 | interval: 5s 701 | retries: 3 702 | ports: 703 | - 7878:7878 704 | restart: unless-stopped 705 | entrypoint: 706 | - /init 707 | image: linuxserver/radarr:nightly 708 | 709 | nzbhydra: 710 | image: linuxserver/nzbhydra2 711 | container_name: nzbhydra 712 | environment: 713 | - PUID=$PUID 714 | - PGID=$PGID 715 | - TZ=$TIME_ZONE 716 | 717 | volumes: 718 | - $PERSIST/nzbhydra/config:/config 719 | ports: 720 | - 5076:5076 721 | # labels: 722 | # - autoheal=$AUTOHEAL_RESTART 723 | # healthcheck: 724 | # test: curl -fSs 127.0.0.1:5076 || exit 1 725 | # interval: 5s 726 | # timeout: 10s 727 | # start_period: 60s 728 | # retries: 3 729 | restart: unless-stopped 730 | 731 | tautulli: 732 | environment: 733 | - HOME=/root 734 | - TERM=xterm 735 | - TAUTULLI_DOCKER=True 736 | - TZ=$TIME_ZONE 737 | volumes: 738 | - $PERSIST/tautulli/config:/config:rw 739 | - $PERSIST/plex/config/Library/Application Support/Plex Media Server/Logs:/logs:ro 740 | container_name: tautulli 741 | ports: 742 | - 8181:8181 743 | labels: 744 | - autoheal=$AUTOHEAL_RESTART 745 | healthcheck: 746 | test: curl -ILfSs http://localhost:8181/status > /dev/null || curl -ILfkSs https://localhost:8181/status > /dev/null 747 | start_period: 90s 748 | timeout: 10s 749 | interval: 5s 750 | retries: 3 751 | restart: 'unless-stopped' 752 | image: tautulli/tautulli 753 | depends_on: 754 | plex: 755 | condition: service_healthy 756 | 757 | sonarr: 758 | environment: 759 | - UMASK_SET=22 760 | - PUID=$PUID 761 | - PGID=$PGID 762 | - TZ=$TIME_ZONE 763 | volumes: 764 | - $PERSIST/sonarr/config:/config:rw 765 | - $MEDIA_PATH/tv:/tv:rw 766 | - $MEDIA_PATH/anime:/anime:rw 767 | - $DOWNLOADS:/downloads:rw 768 | container_name: sonarr 769 | labels: 770 | - autoheal=$AUTOHEAL_RESTART 771 | healthcheck: 772 | test: ${HEALTH_CHECK_OVERRIDE:-curl -fSs http://127.0.0.1:8989/api/system/status?apikey=}${SONARR_API_KEY__SECRET:- }|| exit 1 773 | timeout: 10s 774 | interval: 5s 775 | retries: 3 776 | ports: 777 | - 8989:8989 778 | restart: 'unless-stopped' 779 | entrypoint: 780 | - /init 781 | image: linuxserver/sonarr:develop 782 | 783 | lazylibrarian: 784 | environment: 785 | - UMASK_SET=22 786 | - PUID=$PUID 787 | - PGID=$PGID 788 | - TZ=$TIME_ZONE 789 | - DOCKER_MODS=linuxserver/calibre-web:calibre 790 | volumes: 791 | - $PERSIST/lazylibrarian/config:/config:rw 792 | - $PERSIST/lazylibrarian/books:/books:rw 793 | - $PERSIST/lazylibrarian/comics:/comics:rw 794 | - $PERSIST/lazylibrarian/audiobooks:/audiobooks:rw 795 | - $DOWNLOADS:/downloads:rw 796 | - $PERSIST/lazylibrarian/magazines:/magazines:rw 797 | container_name: lazylibrarian 798 | ports: 799 | - 5299:5299 800 | labels: 801 | - autoheal=$AUTOHEAL_RESTART 802 | healthcheck: 803 | test: curl -fSs http://127.0.0.1:5299 || exit 1 804 | start_period: 240s 805 | timeout: 10s 806 | interval: 5s 807 | retries: 3 808 | restart: 'unless-stopped' 809 | image: linuxserver/lazylibrarian 810 | 811 | jellyfin: 812 | image: linuxserver/jellyfin 813 | container_name: jellyfin 814 | environment: 815 | - PUID=$PUID 816 | - PGID=$PGID 817 | - TZ=$TIME_ZONE 818 | volumes: 819 | - $PERSIST/jellyfin/config:/config 820 | - $MEDIA_PATH:/media 821 | ports: 822 | - 8096:8096 823 | labels: 824 | - autoheal=$AUTOHEAL_RESTART 825 | healthcheck: 826 | test: curl -fSs http://127.0.0.1:8096 || exit 1 827 | start_period: 90s 828 | timeout: 10s 829 | interval: 5s 830 | retries: 3 831 | devices: 832 | #- /dev/dri/renderD128:/dev/dri/renderD128 833 | #- /dev/dri/card0:/dev/dri/card0 834 | - /dev/dri:/dev/dri 835 | restart: unless-stopped 836 | 837 | ombi: 838 | image: linuxserver/ombi 839 | container_name: ombi 840 | environment: 841 | - PUID=$PUID 842 | - PGID=$PGID 843 | - TZ=$TIME_ZONE 844 | - BASE_URL=/ombi 845 | volumes: 846 | - $PERSIST/ombi/config:/config 847 | ports: 848 | - 3579:3579 849 | labels: 850 | - autoheal=$AUTOHEAL_RESTART 851 | healthcheck: 852 | test: curl -fSs 127.0.0.1:3579 || exit 1 853 | start_period: 20s 854 | interval: 5s 855 | retries: 3 856 | restart: unless-stopped 857 | depends_on: 858 | plex: 859 | condition: service_healthy 860 | radarr: 861 | condition: service_healthy 862 | sonarr: 863 | condition: service_healthy 864 | lidarr: 865 | condition: service_healthy 866 | 867 | calibre-web: 868 | image: linuxserver/calibre-web 869 | container_name: calibre-web 870 | environment: 871 | - PUID=$PUID 872 | - PGID=$PGID 873 | - TZ=$TIME_ZONE 874 | - DOCKER_MODS=linuxserver/calibre-web:calibre 875 | volumes: 876 | - $PERSIST/calibre-web/config:/config 877 | - $MEDIA_PATH/ebooks:/books:rw 878 | ports: 879 | - 8083:8083 880 | labels: 881 | - autoheal=$AUTOHEAL_RESTART 882 | healthcheck: 883 | test: curl -fSs http://127.0.0.1:8083 || exit 1 884 | start_period: 500s 885 | timeout: 10s 886 | interval: 30s 887 | retries: 3 888 | depends_on: 889 | calibre: 890 | condition: service_healthy 891 | 892 | restart: unless-stopped 893 | 894 | lidarr: 895 | image: linuxserver/lidarr:nightly 896 | container_name: lidarr 897 | environment: 898 | - PUID=$PUID 899 | - PGID=$PGID 900 | - TZ=$TIME_ZONE 901 | - UMASK_SET=022 902 | volumes: 903 | - $PERSIST/lidarr/config:/config 904 | - $MEDIA_PATH/music:/music 905 | - $DOWNLOADS:/downloads:rw 906 | ports: 907 | - 8686:8686 908 | restart: unless-stopped 909 | labels: 910 | - autoheal=$AUTOHEAL_RESTART 911 | healthcheck: 912 | test: curl -fSs http://127.0.0.1:8686 || exit 1 913 | start_period: 90s 914 | timeout: 20s 915 | interval: 20s 916 | retries: 3 917 | 918 | pihole: 919 | container_name: pihole 920 | image: cbcrowe/pihole-unbound:latest 921 | hostname: ${HOSTNAME} 922 | domainname: ${LAN_DOMAIN_NAME} 923 | cap_add: 924 | - NET_ADMIN 925 | dns: 926 | - 127.0.0.1 927 | - 1.1.1.1 928 | ports: 929 | - 6443:443/tcp 930 | - 53:53/tcp 931 | - 53:53/udp 932 | - 80:80/tcp 933 | - 22/tcp # Uncomment to enable SSH 934 | environment: 935 | ServerIP: $PH_SVR_IP 936 | TZ: $TIME_ZONE 937 | WEBPASSWORD: $PH_PSW__SECRET 938 | REV_SERVER: ${REV_SERVER} 939 | REV_SERVER_TARGET: ${REV_SERVER_TARGET} 940 | REV_SERVER_DOMAIN: ${REV_SERVER_DOMAIN} 941 | REV_SERVER_CIDR: ${REV_SERVER_CIDR} 942 | DNS1: 127.0.0.1#5335 # Hardcoded to our Unbound server 943 | DNS2: 127.0.0.1#5335 # Hardcoded to our Unbound server 944 | DNSSEC: "true" # Enable DNSSEC 945 | TEMPERATUREUNIT: c 946 | ADMIN_EMAIL: $GM_USER__SECRET 947 | volumes: 948 | - '$PERSIST/pihole/etc-pihole/:/etc/pihole' 949 | - '$PERSIST/pihole/etc-dnsmasq.d/:/etc/dnsmasq.d' 950 | restart: unless-stopped 951 | labels: 952 | - autoheal=$AUTOHEAL_RESTART 953 | healthcheck: 954 | test: curl -fSs http://127.0.0.1:80 || exit 1 955 | start_period: 15s 956 | timeout: 5s 957 | interval: 15s 958 | retries: 3 959 | restart: unless-stopped 960 | 961 | calibre: 962 | image: linuxserver/calibre 963 | container_name: calibre 964 | environment: 965 | - PUID=$PUID 966 | - PGID=$PGID 967 | - KEEP_APP_RUNNING=1 968 | - TZ=$TIME_ZONE 969 | volumes: 970 | - $PERSIST/calibre/config:/config 971 | - $MEDIA_PATH/ebooks:/books:rw 972 | - $DOWNLOADS:/downloads:rw 973 | ports: 974 | - 7080:8080 975 | - 7081:8081 976 | labels: 977 | - autoheal=$AUTOHEAL_RESTART 978 | healthcheck: 979 | test: curl -fSs http://127.0.0.1:8080 || exit 1 980 | start_period: 180s 981 | timeout: 10s 982 | interval: 15s 983 | retries: 3 984 | restart: unless-stopped 985 | 986 | autoheal: 987 | container_name: autoheal 988 | restart: always 989 | environment: 990 | - AUTOHEAL_CONTAINER_LABEL=all 991 | - TZ=$TIME_ZONE 992 | volumes: 993 | - '/var/run/docker.sock:/var/run/docker.sock' 994 | image: willfarrell/autoheal 995 | 996 | bazarr: 997 | image: linuxserver/bazarr 998 | container_name: bazarr 999 | environment: 1000 | - PUID=$PUID 1001 | - PGID=$PGID 1002 | - TZ=$TIME_ZONE 1003 | - UMASK_SET=022 #optional 1004 | volumes: 1005 | - $PERSIST/bazarr/config:/config 1006 | - $MEDIA_PATH/movies:/movies 1007 | - $MEDIA_PATH/tv:/tv 1008 | ports: 1009 | - 6767:6767 1010 | labels: 1011 | - autoheal=$AUTOHEAL_RESTART 1012 | healthcheck: 1013 | test: ${HEALTH_CHECK_OVERRIDE:-curl -fSs http://127.0.0.1:6767/api/systemstatus?apikey=}${BAZARR_API_KEY__SECRET:- }|| exit 1 1014 | timeout: 5s 1015 | interval: 10s 1016 | retries: 3 1017 | restart: unless-stopped 1018 | mem_limit: 300M 1019 | mem_reservation: 250M 1020 | 1021 | # 1022 | # dizquetv 1023 | # - no health check available at this time 1024 | # 1025 | dizquetv: 1026 | container_name: dizquetv 1027 | ports: 1028 | - 8000:8000 1029 | environment: 1030 | - PUID=$PUID 1031 | - PGID=$PGID 1032 | - TZ=$TIME_ZONE 1033 | volumes: 1034 | - $PERSIST/dizquetv:/home/node/app/.dizquetv 1035 | image: 'vexorian/dizquetv' 1036 | devices: 1037 | - /dev/dri/renderD128:/dev/dri/renderD128 1038 | - /dev/dri/card0:/dev/dri/card0 1039 | restart: unless-stopped 1040 | depends_on: 1041 | - xteve 1042 | 1043 | bookstack: 1044 | image: linuxserver/bookstack 1045 | container_name: bookstack 1046 | environment: 1047 | - PUID=$PUID 1048 | - PGID=$PGID 1049 | - TZ=$TIME_ZONE 1050 | - DB_HOST=bookstackdb 1051 | - DB_USER=$BSUSER__SECRET 1052 | - DB_PASS=$BSPSW__SECRET 1053 | - DB_DATABASE=$BSDB 1054 | - APP_URL=$BSBASEURL 1055 | - APP_THEME=custom 1056 | - APP_DEFAULT_DARK_MODE=true 1057 | #- APP_DEBUG=true 1058 | #- WKHTMLTOPDF=/usr/bin/wkhtmltopdf 1059 | volumes: 1060 | - $PERSIST/bookstack:/config 1061 | ports: 1062 | - 6875:80 1063 | restart: unless-stopped 1064 | depends_on: 1065 | - bookstackdb 1066 | 1067 | bookstackdb: 1068 | image: linuxserver/mariadb 1069 | container_name: bookstackdb 1070 | environment: 1071 | - PUID=$PUID 1072 | - PGID=$PGID 1073 | - TZ=$TIME_ZONE 1074 | - MYSQL_ROOT_PASSWORD=$BSPSW__SECRET 1075 | - MYSQL_DATABASE=$BSDB 1076 | - MYSQL_USER=$BSUSER__SECRET 1077 | - MYSQL_PASSWORD=$BSPSW__SECRET 1078 | volumes: 1079 | - $PERSIST/bookstackdb:/config 1080 | labels: 1081 | - autoheal 1082 | healthcheck: 1083 | test: ["CMD", "mysqladmin", "ping", "--silent"] 1084 | restart: unless-stopped 1085 | 1086 | xteve: 1087 | container_name: xteve 1088 | environment: 1089 | - PUID=$PUID 1090 | - PGID=$PGID 1091 | - TZ=$TIME_ZONE 1092 | ports: 1093 | - 34400:34400 1094 | volumes: 1095 | - $PERSIST/xteve:/home/xteve/conf 1096 | - $PERSIST/xteve/temp:/tmp/xteve 1097 | image: 'dnsforge/xteve' 1098 | labels: 1099 | - autoheal=$AUTOHEAL_RESTART 1100 | healthcheck: 1101 | test: curl -fSs http://127.0.0.1:34400 || exit 1 1102 | start_period: 180s 1103 | timeout: 10s 1104 | interval: 10s 1105 | retries: 3 1106 | restart: unless-stopped 1107 | 1108 | sabnzbd: 1109 | image: linuxserver/sabnzbd:unstable 1110 | container_name: sabnzbd 1111 | environment: 1112 | - PUID=$PUID 1113 | - PGID=$PGID 1114 | - TZ=$TIME_ZONE 1115 | labels: 1116 | - autoheal=$AUTOHEAL_RESTART 1117 | healthcheck: 1118 | test: curl -fSs 127.0.0.1:8080 || exit 1 1119 | interval: 5s 1120 | timeout: 10s 1121 | retries: 3 1122 | volumes: 1123 | - $PERSIST/sabnzbd/config:/config 1124 | - $DOWNLOADS:/downloads:rw 1125 | - $INCOMPLETE:/incomplete-downloads 1126 | ports: 1127 | - 8080:8080 1128 | - 9090:9090 1129 | restart: unless-stopped 1130 | 1131 | readarr: 1132 | container_name: readarr 1133 | ports: 1134 | - 8787:8787 1135 | environment: 1136 | - PUID=$PUID 1137 | - PGID=$PGID 1138 | - TZ=$TIME_ZONE 1139 | volumes: 1140 | - $PERSIST/readarr:/config 1141 | - $MEDIA_PATH/ebooks:/books:rw 1142 | - $DOWNLOADS:/downloads:rw 1143 | image: hotio/readarr:nightly 1144 | restart: unless-stopped 1145 | labels: 1146 | - autoheal=$AUTOHEAL_RESTART 1147 | healthcheck: 1148 | test: curl -fSs http://127.0.0.1:8787 || exit 1 1149 | start_period: 90s 1150 | timeout: 20s 1151 | interval: 20s 1152 | retries: 3 1153 | 1154 | hastebin: 1155 | container_name: hastebin 1156 | image: rlister/hastebin 1157 | environment: 1158 | STORAGE_TYPE: redis 1159 | STORAGE_HOST: hastebinredis 1160 | ports: 1161 | - "7777:7777" 1162 | depends_on: 1163 | - hastebinredis 1164 | 1165 | hastebinredis: 1166 | container_name: hastebinredis 1167 | image: redis 1168 | volumes: 1169 | - $PERSIST/hastebinredis:/data 1170 | entrypoint: redis-server --appendonly yes 1171 | 1172 | netdata: 1173 | container_name: netdata 1174 | image: netdata/netdata 1175 | hostname: example.com # set to fqdn of host 1176 | environment: 1177 | - PGID=$NDROOTID 1178 | - TZ=$TIME_ZONE 1179 | - DOCKER_USR=root 1180 | ports: 1181 | - 19999:19999 1182 | cap_add: 1183 | - SYS_PTRACE 1184 | security_opt: 1185 | - apparmor:unconfined 1186 | volumes: 1187 | - /proc:/host/proc:ro 1188 | - /sys:/host/sys:ro 1189 | - /var/run/docker.sock:/var/run/docker.sock:ro 1190 | - /etc/passwd:/host/etc/passwd:ro 1191 | - /etc/group:/host/etc/group:ro 1192 | restart: unless-stopped 1193 | 1194 | hddtemp: 1195 | container_name: hddtemp 1196 | image: drewster727/hddtemp-docker 1197 | privileged: true 1198 | environment: 1199 | - HDDTEMP_ARGS="-q -d -F /dev/sd*" 1200 | - TZ=$TIME_ZONE 1201 | network_mode: host 1202 | restart: unless-stopped 1203 | 1204 | gaps: 1205 | ports: 1206 | - 8484:8484 1207 | container_name: gaps 1208 | expose: 1209 | - '32400' 1210 | volumes: 1211 | - $PERSIST/gaps:/usr/data 1212 | image: housewrecker/gaps 1213 | restart: unless-stopped 1214 | 1215 | qbittorrent: 1216 | image: linuxserver/qbittorrent 1217 | container_name: qbittorrent 1218 | environment: 1219 | - PUID=$PUID 1220 | - PGID=$PGID 1221 | - TZ=$TIME_ZONE 1222 | - UMASK_SET=022 1223 | - WEBUI_PORT=9991 1224 | volumes: 1225 | - $PERSIST/qbittorrent:/config 1226 | - $DOWNLOADS:/downloads 1227 | depends_on: 1228 | vpn: 1229 | condition: service_healthy 1230 | network_mode: "service:vpn" 1231 | # ports: 1232 | # - 6881:6881 1233 | # - 6881:6881/udp 1234 | # - 9991:9991 1235 | restart: unless-stopped 1236 | labels: 1237 | - autoheal=$AUTOHEAL_RESTART 1238 | healthcheck: 1239 | test: curl -fSs https://google.com || exit 1 1240 | start_period: 90s 1241 | timeout: 10s 1242 | interval: 5s 1243 | retries: 3 1244 | 1245 | jackett: 1246 | image: linuxserver/jackett 1247 | container_name: jackett 1248 | environment: 1249 | - PUID=$PUID 1250 | - PGID=$PGID 1251 | - TZ=$TIME_ZONE 1252 | - AUTO_UPDATE=true #optional 1253 | - RUN_OPTS=run options here #optional 1254 | volumes: 1255 | - $PERSIST/jackett:/config 1256 | - $DOWNLOADS:/downloads 1257 | depends_on: 1258 | - vpn 1259 | network_mode: "service:vpn" 1260 | # ports: 1261 | # - 9117:9117 1262 | restart: unless-stopped 1263 | healthcheck: 1264 | test: curl -fSs https://google.com || exit 1 1265 | start_period: 90s 1266 | timeout: 10s 1267 | interval: 5s 1268 | retries: 3 1269 | labels: 1270 | - autoheal=$AUTOHEAL_RESTART 1271 | 1272 | vpn: 1273 | devices: 1274 | - /dev/net/tun 1275 | restart: unless-stopped 1276 | container_name: vpn 1277 | privileged: true 1278 | ports: 1279 | # jackett ports 1280 | - 9117:9117 1281 | # qbittorrent 1282 | - 6881:6881 1283 | #- 6881:6881/udp 1284 | - 9991:9991 1285 | dns: 1286 | - 1.1.1.1 1287 | image: dperson/openvpn-client 1288 | security_opt: 1289 | - label:disable 1290 | cap_add: 1291 | - NET_ADMIN 1292 | stdin_open: true 1293 | tty: true 1294 | volumes: 1295 | - $PERSIST/openvpn:/vpn 1296 | command: -f "" 1297 | 1298 | proxymanager: 1299 | container_name: proxymanager 1300 | image: jc21/nginx-proxy-manager 1301 | environment: 1302 | PUID: $PUID 1303 | PGID: $PGID 1304 | TZ: $TIME_ZONE 1305 | DB_MYSQL_HOST: 'proxymanagerdb' 1306 | DB_MYSQL_PORT: 3306 1307 | DB_MYSQL_USER: 'smileyfaceemoji' 1308 | DB_MYSQL_PASSWORD: 'sadfaceemoji' 1309 | DB_MYSQL_NAME: 'npm' 1310 | ports: 1311 | - 980:80 # use a different local port if on synology 1312 | - 981:81 1313 | - 443:443 # use a different local port if on synology 1314 | volumes: 1315 | - $PERSIST/proxymanager/data:/data 1316 | - $PERSIST/proxymanager/letsencrypt:/etc/letsencrypt 1317 | restart: always 1318 | depends_on: 1319 | proxymanagerdb: 1320 | condition: service_healthy 1321 | 1322 | proxymanagerdb: 1323 | container_name: proxymanagerdb 1324 | image: ghcr.io/linuxserver/mariadb 1325 | environment: 1326 | MYSQL_ROOT_PASSWORD: 'poopemoji' 1327 | MYSQL_DATABASE: 'npm' 1328 | MYSQL_USER: 'smileyfaceemoji' 1329 | MYSQL_PASSWORD: 'sadfaceemoji' 1330 | volumes: 1331 | - $PERSIST/proxymanagerdb/config:/config 1332 | restart: always 1333 | labels: 1334 | - autoheal 1335 | healthcheck: 1336 | test: ["CMD", "mysqladmin", "ping", "--silent"] 1337 | 1338 | radarr4k: 1339 | environment: 1340 | - UMASK_SET=22 1341 | - PUID=$PUID 1342 | - PGID=$PGID 1343 | - TZ=$TIME_ZONE 1344 | volumes: 1345 | - $PERSIST/radarr4k/config:/config:rw 1346 | - $MEDIA_PATH:/media:rw 1347 | - $DOWNLOADS:/downloads:rw 1348 | container_name: radarr4k 1349 | ports: 1350 | - 7879:7878 1351 | restart: unless-stopped 1352 | entrypoint: 1353 | - /init 1354 | image: linuxserver/radarr:nightly 1355 | labels: 1356 | - autoheal=$AUTOHEAL_RESTART 1357 | healthcheck: 1358 | test: ${HEALTH_CHECK_OVERRIDE:-curl -fSs http://127.0.0.1:7878/api/system/status?apikey=}${RADARR4K_API_KEY__SECRET:- }|| exit 1 1359 | start_period: 45s 1360 | timeout: 10s 1361 | interval: 5s 1362 | retries: 3 1363 | 1364 | overseerr: 1365 | container_name: overseerr 1366 | restart: unless-stopped 1367 | image: sctx/overseerr 1368 | ports: 1369 | - 5055:5055 1370 | environment: 1371 | - PUID=$PUID 1372 | - PGID=$PGID 1373 | - TZ=$TIME_ZONE 1374 | volumes: 1375 | - $PERSIST/overseerr:/app/config 1376 | labels: 1377 | - autoheal=$AUTOHEAL_RESTART 1378 | healthcheck: 1379 | test: wget http://127.0.0.1:3000/api/v1/status -qO /dev/null || exit 1 1380 | interval: 5s 1381 | retries: 3 1382 | 1383 | ########################################################### 1384 | ###### Not frequently in use but kept for examples ##### 1385 | ###### Will soon move to a seperate archive yaml file ##### 1386 | ########################################################### 1387 | # duckdns: 1388 | # image: linuxserver/duckdns 1389 | # container_name: duckdns 1390 | # environment: 1391 | # - PUID=$PUID 1392 | # - PGID=$PGID 1393 | # - TZ=$TIME_ZONE 1394 | # - SUBDOMAINS=$DUCKSUBDOMS__SECRET 1395 | # - TOKEN=$DUCKTOKEN__SECRET 1396 | # - LOG_FILE=true #optional 1397 | # volumes: 1398 | # - $PERSIST/duckdns:/config #optional - use if log_file true 1399 | # restart: unless-stopped 1400 | 1401 | # stash: 1402 | # container_name: stash 1403 | # image: hotio/stash 1404 | # ports: 1405 | # - "6969:9999" 1406 | # environment: 1407 | # - PUID=$PUID 1408 | # - PGID=$PGID 1409 | # - UMASK=002 1410 | # - TZ=$TIME_ZONE 1411 | # volumes: 1412 | # - $PERSIST/stash:/config 1413 | # - $MEDIA_PATH/musicvids:/musicvids 1414 | 1415 | # filerun: 1416 | # image: afian/filerun 1417 | # container_name: filerun 1418 | # environment: 1419 | # TZ: $TIME_ZONE 1420 | # FR_DB_HOST: filerundb 1421 | # FR_DB_PORT: 3306 1422 | # FR_DB_NAME: filerun 1423 | # FR_DB_USER: 'sm1l3yf@c3em0j!' 1424 | # FR_DB_PASS: 's@df@c33m0j!' 1425 | # APACHE_RUN_USER: www-data 1426 | # APACHE_RUN_USER_ID: 33 1427 | # APACHE_RUN_GROUP: www-data 1428 | # APACHE_RUN_GROUP_ID: 33 1429 | # depends_on: 1430 | # filerundb: 1431 | # condition: service_healthy 1432 | # ports: 1433 | # - "8088:80" 1434 | # volumes: 1435 | # - ${PERSIST}/filerun/html:/var/www/html 1436 | # - ${PERSIST}/filerun/user-files:/user-files 1437 | 1438 | # # filerundb 1439 | # filerundb: 1440 | # container_name: filerundb 1441 | # image: ghcr.io/linuxserver/mariadb 1442 | # environment: 1443 | # TZ: $TIME_ZONE 1444 | # MYSQL_ROOT_PASSWORD: 'p00p3m0j!' 1445 | # MYSQL_DATABASE: 'filerun' 1446 | # MYSQL_USER: 'sm1l3yf@c3em0j!' 1447 | # MYSQL_PASSWORD: 's@df@c33m0j!' 1448 | # volumes: 1449 | # - $PERSIST/filerundb:/config 1450 | # restart: always 1451 | # labels: 1452 | # - autoheal 1453 | # healthcheck: 1454 | # test: ["CMD", "mysqladmin", "ping", "--silent"] 1455 | # nzbget: 1456 | # image: ghcr.io/linuxserver/nzbget 1457 | # container_name: nzbget 1458 | # environment: 1459 | # - PUID=$PUID 1460 | # - PGID=$PGID 1461 | # - TZ=$TIME_ZONE 1462 | # volumes: 1463 | # - $PERSIST/nzbget/config:/config 1464 | # - $DOWNLOADS:/downloads 1465 | # ports: 1466 | # - 6789:6789 1467 | # restart: unless-stopped 1468 | 1469 | # handbrake: 1470 | # image: jlesage/handbrake 1471 | # container_name: handbrake 1472 | # environment: 1473 | # - PUID=$PUID 1474 | # - PGID=$PGID 1475 | # - TZ=$TIME_ZONE 1476 | # ports: 1477 | # - '5800:5800' 1478 | # volumes: 1479 | # - '$PERSIST/handbrake:/config:rw' 1480 | # - '~/:/storage:ro' 1481 | # - $PERSIST/handbrake/watch:/watch:rw 1482 | # - $PERSIST/handbrake/output:/output:rw 1483 | # devices: 1484 | # - /dev/dri:/dev/dri 1485 | 1486 | # nextclouddb: 1487 | # container_name: nextclouddb 1488 | # image: mariadb 1489 | # command: --transaction-isolation=READ-COMMITTED --binlog-format=ROW 1490 | # restart: always 1491 | # volumes: 1492 | # - $PERSIST/nextclouddb:/var/lib/mysql 1493 | # environment: 1494 | # - MYSQL_ROOT_PASSWORD=xyzzy 1495 | # - MYSQL_PASSWORD=xyzzy 1496 | # - MYSQL_DATABASE=nextcloud 1497 | # - MYSQL_USER=nextcloud 1498 | # labels: 1499 | # - autoheal 1500 | # healthcheck: 1501 | # test: ["CMD", "mysqladmin", "ping", "--silent"] 1502 | 1503 | # nextcloud: 1504 | # container_name: nextcloud 1505 | # ports: 1506 | # - 8082:80 1507 | # links: 1508 | # - nextclouddb 1509 | # environment: 1510 | # - PUID=$PUID 1511 | # - PGID=$PGID 1512 | # - TZ=$TIME_ZONE 1513 | # volumes: 1514 | # - $PERSIST/nextcloud/html:/var/www/html 1515 | # - $PERSIST/nextcloud/custom_apps:/var/www/html/custom_apps 1516 | # - $PERSIST/nextcloud/config:/var/www/html/config 1517 | # - $PERSIST/nextcloud/data:/var/www/html/data 1518 | # - $PERSIST/nextcloud/themes:/var/www/html/themes/ 1519 | # image: nextcloud 1520 | # restart: always 1521 | # depends_on: 1522 | # nextclouddb: 1523 | # condition: service_healthy 1524 | 1525 | # dozzle: 1526 | # container_name: dozzle 1527 | # image: amir20/dozzle 1528 | # volumes: 1529 | # - /var/run/docker.sock:/var/run/docker.sock 1530 | # ports: 1531 | # - 9999:8080 1532 | # restart: unless-stopped 1533 | 1534 | # openra: 1535 | # ports: 1536 | # - '1234:1234' 1537 | # environment: 1538 | # - Name=You Must Construct Additional Pylons 1539 | # - Password=xyzzy 1540 | # - Mod=ra 1541 | # - ListenPort=1234 1542 | # container_name: openra 1543 | # image: rmoriz/openra 1544 | 1545 | # # 1546 | # # photoshow - basic image repository 1547 | # # - no health check available atm 1548 | # # 1549 | # photoshow: 1550 | # image: linuxserver/photoshow 1551 | # container_name: photoshow 1552 | # environment: 1553 | # - PUID=$PUID 1554 | # - PGID=$PGID 1555 | # - TZ=$TIME_ZONE 1556 | # volumes: 1557 | # - $PERSIST/photoshow:/config 1558 | # - $PERSIST/photoshow/pictures:/Pictures:ro 1559 | # - $PERSIST/photoshow/thumbs:/Thumbs 1560 | # ports: 1561 | # - 8282:80 1562 | # restart: unless-stopped 1563 | 1564 | # # 1565 | # # chevereto - digital image manager 1566 | # # - no health check at this time 1567 | # # 1568 | # chevereto: 1569 | # image: linuxserver/chevereto 1570 | # container_name: chevereto 1571 | # environment: 1572 | # - PUID=$PUID 1573 | # - PGID=$PGID 1574 | # - TZ=$TIME_ZONE 1575 | # volumes: 1576 | # - $PERSIST/chevereto:/config 1577 | # ports: 1578 | # - 4343:80 1579 | # - 4344:443 1580 | # restart: unless-stopped 1581 | 1582 | # # 1583 | # # cheveretodb - mariadb for chevereto appliacation 1584 | # # 1585 | # cheveretodb: 1586 | # image: linuxserver/mariadb 1587 | # container_name: cheveretodb 1588 | # environment: 1589 | # - PUID=$PUID 1590 | # - PGID=$PGID 1591 | # - TZ=$TIME_ZONE 1592 | # - MYSQL_ROOT_PASSWORD=$CPSW__SECRET 1593 | # - MYSQL_DATABASE=$CDB 1594 | # - MYSQL_USER=$CUSER__SECRET 1595 | # - MYSQL_PASSWORD=$CPSW__SECRET 1596 | # volumes: 1597 | # - $PERSIST/cheveretodb:/config 1598 | # restart: unless-stopped 1599 | # labels: 1600 | # - autoheal 1601 | # healthcheck: 1602 | # test: ["CMD", "mysqladmin", "ping", "--silent"] 1603 | 1604 | # # 1605 | # # mysql workbench - guaccamole-based app for manipulating mysql/mariadb 1606 | # # - no health check available at this time 1607 | # # 1608 | # mysql-workbench: 1609 | # image: linuxserver/mysql-workbench 1610 | # container_name: mysql-workbench 1611 | # environment: 1612 | # - PUID=$PUID 1613 | # - PGID=$PGID 1614 | # - TZ=$TIME_ZONE 1615 | # volumes: 1616 | # - $PERSIST/mysqlworkbench:/config 1617 | # ports: 1618 | # - 3001:3000 1619 | # cap_add: 1620 | # - IPC_LOCK 1621 | # restart: unless-stopped 1622 | 1623 | # thelounge: 1624 | # image: linuxserver/thelounge 1625 | # container_name: thelounge 1626 | # environment: 1627 | # - PUID=$PUID 1628 | # - PGID=$PGID 1629 | # - TZ=$TIME_ZONE 1630 | # volumes: 1631 | # - $PERSIST/thelounge:/config 1632 | # ports: 1633 | # - 9001:9000 1634 | # restart: unless-stopped 1635 | 1636 | # # 1637 | # # freshrss - rss feed aggregator 1638 | # # - no health check available atm 1639 | # # 1640 | # freshrss: 1641 | # image: linuxserver/freshrss 1642 | # container_name: freshrss 1643 | # environment: 1644 | # - PUID=$PUID 1645 | # - PGID=$PGID 1646 | # - TZ=$TIME_ZONE 1647 | # volumes: 1648 | # - $PERSIST/freshrss:/config 1649 | # ports: 1650 | # - 8585:80 1651 | # restart: unless-stopped 1652 | 1653 | # # 1654 | # # Dashmachine - 1655 | # # - no health check possible atm 1656 | # # 1657 | # dashmachine: 1658 | # container_name: dashmachine 1659 | # restart: unless-stopped 1660 | # image: rmountjoy/dashmachine 1661 | # ports: 1662 | # - 2000:5000 1663 | # environment: 1664 | # - CONTEXT_PATH=/ 1665 | # - PUID=$PUID 1666 | # - PGID=$PGID 1667 | # - TZ=$TIME_ZONE 1668 | # volumes: 1669 | # - $PERSIST/dashmachine:/dashmachine/dashmachine/user_data 1670 | 1671 | # jfa-go: 1672 | # image: hrfee/jfa-go 1673 | # container_name: jfa-go 1674 | # environment: 1675 | # - PUID=$PUID 1676 | # - PGID=$PGID 1677 | # - TZ=$TIME_ZONE 1678 | # volumes: 1679 | # - $PERSIST/jfa-go:/data 1680 | # - $PERSIST/jellyfin/config:/jf 1681 | # - /etc/localtime:/etc/localtime:ro 1682 | # ports: 1683 | # - 8056:8056 1684 | # restart: unless-stopped 1685 | 1686 | # # 1687 | # # filezilla 1688 | # # 1689 | # filezilla: 1690 | # image: jlesage/filezilla 1691 | # container_name: filezilla 1692 | # ports: 1693 | # - 5801:5800 1694 | # environment: 1695 | # - PUID=$PUID 1696 | # - PGID=$PGID 1697 | # - TZ=$TIME_ZONE 1698 | # volumes: 1699 | # - $PERSIST/filezilla:/config:rw 1700 | # - $MEDIA_PATH:/storage 1701 | # restart: unless-stopped 1702 | 1703 | # # 1704 | # # Lychee - photo management solution 1705 | # # - no health check identified atm 1706 | # # 1707 | # lychee: 1708 | # image: lycheeorg/lychee 1709 | # container_name: lychee 1710 | # environment: 1711 | # - PUID=$PUID 1712 | # - PGID=$PGID 1713 | # - TZ=$TIME_ZONE 1714 | # - DB_CONNECTION=mysql 1715 | # - DB_HOST=lycheedb 1716 | # - DB_PORT=3306 1717 | # - DB_DATABASE=lychee 1718 | # - DB_USERNAME=lychee 1719 | # - DB_PASSWORD=lychee 1720 | # - STARTUP_DELAY=60 1721 | # volumes: 1722 | # - $PERSIST/lychee/conf:/conf 1723 | # - $PERSIST/lychee/uploads:/uploads 1724 | # - $PERSIST/lychee/sym:/sym 1725 | # ports: 1726 | # - 90:80 1727 | # restart: unless-stopped 1728 | # depends_on: 1729 | # lycheedb: 1730 | # condition: service_healthy 1731 | 1732 | # lycheedb: 1733 | # container_name: lychee_db 1734 | # image: mariadb:10 1735 | # environment: 1736 | # - PUID=$PUID 1737 | # - PGID=$PGID 1738 | # - TZ=$TIME_ZONE 1739 | # - MYSQL_ROOT_PASSWORD=lychee 1740 | # - MYSQL_DATABASE=lychee 1741 | # - MYSQL_USER=lychee 1742 | # - MYSQL_PASSWORD=lychee 1743 | # expose: 1744 | # - 3306 1745 | # volumes: 1746 | # - $PERSIST/lycheedb:/var/lib/mysql 1747 | # restart: unless-stopped 1748 | # labels: 1749 | # - autoheal 1750 | # healthcheck: 1751 | # test: ["CMD", "mysqladmin", "ping", "--silent"] 1752 | 1753 | # # 1754 | # # monitorr - basic web site monitor 1755 | # # - no health check available atm 1756 | # # 1757 | # monitorr: 1758 | # container_name: monitorr 1759 | # image: index.docker.io/monitorr/monitorr 1760 | # ports: 1761 | # - "88:80/tcp" 1762 | # environment: 1763 | # - PUID=$PUID 1764 | # - PGID=$PGID 1765 | # - TZ=$TIME_ZONE 1766 | # volumes: 1767 | # - $PERSIST/monitorr:/app 1768 | # restart: on-failure 1769 | 1770 | # tdarr: 1771 | # image: index.docker.io/haveagitgat/tdarr 1772 | # container_name: tdarr 1773 | # ports: 1774 | # - 8265:8265 1775 | # labels: 1776 | # - autoheal=$AUTOHEAL_RESTART 1777 | # healthcheck: 1778 | # test: curl -fSs http://127.0.0.1:8265 || exit 1 1779 | # start_period: 120s 1780 | # timeout: 10s 1781 | # interval: 5s 1782 | # retries: 3 1783 | # environment: 1784 | # - PUID=$PUID 1785 | # - PGID=$PGID 1786 | # - TZ=$TIME_ZONE 1787 | # volumes: 1788 | # - $PERSIST/tdarr/data:/home/Tdarr/Documents/Tdarr 1789 | # - $PERSIST/tdarr/data/db:/var/lib/mongodb 1790 | # - $MEDIA_PATH:/home/Tdarr/media 1791 | # - $PERSIST/tdarr/transcodecache:/home/Tdarr/cache 1792 | # - /etc/localtime:/etc/localtime:ro 1793 | # devices: 1794 | # - "/dev/dri:/dev/dri" 1795 | 1796 | # # 1797 | # # organizr - link and page manager 1798 | # # 1799 | # organizr: 1800 | # environment: 1801 | # - HOME=/root 1802 | # - TERM=xterm 1803 | # - TZ=$TIME_ZONE 1804 | # volumes: 1805 | # - $PERSIST/organizr/config:/config:rw 1806 | # container_name: organizr 1807 | # ports: 1808 | # - 5443:443 1809 | # - 580:80 1810 | # restart: 'on-failure:0' 1811 | # entrypoint: 1812 | # - /init 1813 | # labels: 1814 | # - autoheal=$AUTOHEAL_RESTART 1815 | # image: organizr/organizr 1816 | ## 1817 | ## Rutorrent - torrent d/l app 1818 | ## 1819 | # rutorrent: 1820 | # image: ghcr.io/linuxserver/rutorrent 1821 | # container_name: rutorrent 1822 | # environment: 1823 | # - PUID=$PUID 1824 | # - PGID=$PGID 1825 | # - TZ=$TIME_ZONE 1826 | # volumes: 1827 | # - $PERSIST/rutorrent:/config 1828 | # - $DOWNLOADS:/downloads 1829 | # network_mode: "service:vpn" 1830 | # # ports: 1831 | # # - 8282:80 1832 | # # - 5005:5000 1833 | # # - 51413:51413 1834 | # # - 6881:6881/udp 1835 | # restart: unless-stopped 1836 | # depends_on: 1837 | # vpn: 1838 | # condition: service_healthy 1839 | 1840 | nginx1: 1841 | environment: 1842 | - PUID=1026 1843 | - PGID=100 1844 | - TZ=Australia/Brisbane 1845 | ports: 1846 | - '80:80' 1847 | container_name: nginx1 1848 | mac_address: 02:42:c0:a8:84:22 1849 | networks: 1850 | macv_network: 1851 | ipv4_address: 192.168.1.241 1852 | volumes: 1853 | - $PERSIST/nginx1/site-content:/usr/share/nginx/html 1854 | image: nginx 1855 | 1856 | # nginx2: 1857 | # environment: 1858 | # - PUID=1026 1859 | # - PGID=100 1860 | # - TZ=Australia/Brisbane 1861 | # ports: 1862 | # - '80:80' 1863 | # container_name: nginx2 1864 | # mac_address: 02:42:c0:a8:84:23 1865 | # networks: 1866 | # macv_network: 1867 | # ipv4_address: 192.168.1.242 1868 | # volumes: 1869 | # - $PERSIST/nginx2/site-content:/usr/share/nginx/html 1870 | # image: nginx 1871 | 1872 | 1873 | 1874 | -------------------------------------------------------------------------------- /free_ports.sh: -------------------------------------------------------------------------------- 1 | #! /bin/bash 2 | 3 | # NEWLY ADDED BACKUP FUNCTIONALITY IS NOT FULLY TESTED YET, USE WITH CARE, ESPECIALLY DELETION 4 | # Steps to install 5 | # Save this script in one of your shares 6 | # Run this script as root 7 | # Reboot and ensure everything is still working 8 | # If not, run the revert script_ports.sh script. 9 | # To ensure this runs every startup, copy this file to: /usr/local/etc/rc.d (ensure it is executable) 10 | 11 | HTTP_PORT=81 12 | HTTPS_PORT=444 13 | 14 | BACKUP_FILES=true # change to false to disable backups 15 | BACKUP_DIR=/volume1/backup/portbu 16 | DELETE_OLD_BACKUPS=true # change to true to automatically delete old backups. 17 | KEEP_BACKUP_DAYS=30 18 | 19 | DATE=$(date +%Y-%m-%d-%H-%M-%S) 20 | 21 | if [ "$BACKUP_FILES" == "true" ]; then 22 | mkdir -p "$BACKUP_DIR/$DATE" 23 | cp /usr/syno/share/nginx/*.mustache "$BACKUP_DIR/$DATE" 24 | fi 25 | 26 | if [ "$DELETE_OLD_BACKUPS" == "true" ]; then 27 | find "$BACKUP_DIR/" -type d -mtime +$KEEP_BACKUP_DAYS -exec rm -r {} \; 28 | fi 29 | 30 | sed -i "s/^\([ \t]\+listen[ \t]\+[]:[]*\)80\([^0-9]\)/\1$HTTP_PORT\2/" /usr/syno/share/nginx/*.mustache 31 | sed -i "s/^\([ \t]\+listen[ \t]\+[]:[]*\)443\([^0-9]\)/\1$HTTPS_PORT\2/" /usr/syno/share/nginx/*.mustache 32 | 33 | # sudo synoservicecfg --restart nginx 34 | 35 | synosystemctl restart nginx 36 | -------------------------------------------------------------------------------- /revert_ports.sh: -------------------------------------------------------------------------------- 1 | #! /bin/bash 2 | 3 | HTTP_PORT=80 4 | HTTPS_PORT=443 5 | 6 | sed -i "s/^\([ \t]\+listen[ \t]\+[]:[]*\)81\([^0-9]\)/\1$HTTP_PORT\2/" /usr/syno/share/nginx/*.mustache 7 | sed -i "s/^\([ \t]\+listen[ \t]\+[]:[]*\)444\([^0-9]\)/\1$HTTPS_PORT\2/" /usr/syno/share/nginx/*.mustache 8 | 9 | # sudo synoservicecfg --restart nginx 10 | 11 | 12 | synosystemctl restart nginx 13 | -------------------------------------------------------------------------------- /synology-custom.sh: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | 3 | # SYNOLOGY NAS DEVICES ONLY 4 | # Required for openVPN containers & Integrated GPU Use 5 | # ------------------------------------------------------------------- 6 | # To run at boot: Put this in your '/usr/local/etc/rc.d', 7 | # make it executable 'sudo chmod +X /usr/local/etc/rc.d/synology.sh' 8 | # Will then auto execute on boot. 9 | 10 | # Create the necessary file structure for /dev/net/tun 11 | if ( [ ! -c /dev/net/tun ] ); then 12 | if ( [ ! -d /dev/net ] ); then 13 | mkdir -m 755 /dev/net 14 | fi 15 | mknod /dev/net/tun c 10 200 16 | chmod 0755 /dev/net/tun 17 | fi 18 | 19 | # Load the tun module if not already loaded 20 | if ( !(lsmod | grep -q "^tun\s") ); then 21 | insmod /lib/modules/tun.ko 22 | fi 23 | 24 | # Set permissions for integrated GPU fro Plex / Jellyfin / Emby / Dizquetv / handbrake / etc... 25 | # - The following line is only needed if your Synology NAS has an embedded GPU 26 | chmod 777 /dev/dri /dev/dri/card0 /dev/dri/renderD128 27 | --------------------------------------------------------------------------------