From e20209bf9eea6f297a08c3018fabe7d30e58af29 Mon Sep 17 00:00:00 2001 From: Shaun Collins Date: Fri, 30 Jan 2026 15:26:59 +0000 Subject: [PATCH] Init --- .gitignore | 18 ++ AudioBookShelf/Makefile | 5 + AudioBookShelf/docker-compose.yml | 13 ++ Cloudreve/.env | 3 + Cloudreve/Makefile | 5 + Cloudreve/docker-compose.yml | 47 +++++ Dockhand/.env | 1 + Dockhand/Makefile | 5 + Dockhand/docker-compose.yml | 13 ++ Gitea/.env | 9 + Gitea/Makefile | 5 + Gitea/docker-compose.yml | 44 +++++ JellyFin/.gitignore | 7 + JellyFin/Makefile | 15 ++ JellyFin/docker-compose.yml | 136 +++++++++++++ Minecraft/Makefile | 5 + Minecraft/compose.yaml | 12 ++ NginxReverseProxy/Makefile | 5 + NginxReverseProxy/default.html | 276 +++++++++++++++++++++++++++ NginxReverseProxy/docker-compose.yml | 21 ++ Scanopy/Makefile | 5 + Scanopy/docker-compose.yml | 85 +++++++++ 22 files changed, 735 insertions(+) create mode 100644 .gitignore create mode 100644 AudioBookShelf/Makefile create mode 100644 AudioBookShelf/docker-compose.yml create mode 100644 Cloudreve/.env create mode 100644 Cloudreve/Makefile create mode 100644 Cloudreve/docker-compose.yml create mode 100644 Dockhand/.env create mode 100644 Dockhand/Makefile create mode 100644 Dockhand/docker-compose.yml create mode 100644 Gitea/.env create mode 100644 Gitea/Makefile create mode 100644 Gitea/docker-compose.yml create mode 100644 JellyFin/.gitignore create mode 100644 JellyFin/Makefile create mode 100644 JellyFin/docker-compose.yml create mode 100644 Minecraft/Makefile create mode 100644 Minecraft/compose.yaml create mode 100644 NginxReverseProxy/Makefile create mode 100644 NginxReverseProxy/default.html create mode 100644 NginxReverseProxy/docker-compose.yml create mode 100644 Scanopy/Makefile create mode 100644 Scanopy/docker-compose.yml diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..ee2da4f --- /dev/null +++ b/.gitignore @@ -0,0 +1,18 @@ +.idea + +Ace/ +Database/ + +Gitea/gitea/ +Gitea/mysql/ +Minecraft/data +NginxReverseProxy/data/ +NginxReverseProxy/letsencrypt +Scanopy/data +JellyFin/Gluetun +JellyFin/JellySeerr +JellyFin/Prowlarr +JellyFin/Radarr +JellyFin/Sonarr + + diff --git a/AudioBookShelf/Makefile b/AudioBookShelf/Makefile new file mode 100644 index 0000000..1b7cef7 --- /dev/null +++ b/AudioBookShelf/Makefile @@ -0,0 +1,5 @@ +up: + docker-compose up -d + +down: + docker-compose down diff --git a/AudioBookShelf/docker-compose.yml b/AudioBookShelf/docker-compose.yml new file mode 100644 index 0000000..419f5e2 --- /dev/null +++ b/AudioBookShelf/docker-compose.yml @@ -0,0 +1,13 @@ +services: + audiobookshelf: + image: ghcr.io/advplyr/audiobookshelf:latest + + ports: + - 13378:80 + volumes: + - /mnt/e/Audio/books:/audiobooks + - /mnt/e/Audio/podcasts:/podcasts + - /mnt/e/Audio/config:/config + - /mnt/e/Audio/metadata:/metadata + environment: + - TZ=Europe/London diff --git a/Cloudreve/.env b/Cloudreve/.env new file mode 100644 index 0000000..05f8bef --- /dev/null +++ b/Cloudreve/.env @@ -0,0 +1,3 @@ +DATA_PATH=/mnt/e/Cloud/data +REDIS_PATH=/mnt/e/Cloud/redis +POSTGRES_PATH=/mnt/e/Cloud/postgres \ No newline at end of file diff --git a/Cloudreve/Makefile b/Cloudreve/Makefile new file mode 100644 index 0000000..1b7cef7 --- /dev/null +++ b/Cloudreve/Makefile @@ -0,0 +1,5 @@ +up: + docker-compose up -d + +down: + docker-compose down diff --git a/Cloudreve/docker-compose.yml b/Cloudreve/docker-compose.yml new file mode 100644 index 0000000..61ef06f --- /dev/null +++ b/Cloudreve/docker-compose.yml @@ -0,0 +1,47 @@ +services: + cloudreve: + image: cloudreve/cloudreve:latest + container_name: cloudreve-backend + depends_on: + - postgresql + - redis + restart: unless-stopped + ports: + - "5212:5212" + - "6888:6888" + - "6888:6888/udp" + environment: + - CR_CONF_Database.Type=postgres + - CR_CONF_Database.Host=postgresql + - CR_CONF_Database.User=cloudreve + - CR_CONF_Database.Name=cloudreve + - CR_CONF_Database.Port=5432 + - CR_CONF_Redis.Server=redis:6379 + volumes: + - "${DATA_PATH}:/cloudreve/data" + + postgresql: + # Best practice: Pin to major version. + # NOTE: For major version jumps: + # backup & consult https://www.postgresql.org/docs/current/pgupgrade.html + image: postgres:17 + container_name: postgresql + restart: unless-stopped + environment: + - POSTGRES_USER=cloudreve + - POSTGRES_DB=cloudreve + - POSTGRES_HOST_AUTH_METHOD=trust + volumes: + - database_postgres:/var/lib/postgresql/data + + redis: + image: redis:latest + container_name: redis + restart: unless-stopped + volumes: + - redis_data:/data + +volumes: +# backend_data: + database_postgres: + redis_data: \ No newline at end of file diff --git a/Dockhand/.env b/Dockhand/.env new file mode 100644 index 0000000..b2bac81 --- /dev/null +++ b/Dockhand/.env @@ -0,0 +1 @@ +DOZZLE_PORT=8180 \ No newline at end of file diff --git a/Dockhand/Makefile b/Dockhand/Makefile new file mode 100644 index 0000000..2092c45 --- /dev/null +++ b/Dockhand/Makefile @@ -0,0 +1,5 @@ +up: + docker-compose up -d + +down: + docker-compose down \ No newline at end of file diff --git a/Dockhand/docker-compose.yml b/Dockhand/docker-compose.yml new file mode 100644 index 0000000..9717724 --- /dev/null +++ b/Dockhand/docker-compose.yml @@ -0,0 +1,13 @@ +services: + dockhand: + image: fnsys/dockhand:latest + container_name: dockhand + restart: unless-stopped + ports: + - "3000:3000" + volumes: + - /var/run/docker.sock:/var/run/docker.sock + - dockhand_data:/app/data + +volumes: + dockhand_data: \ No newline at end of file diff --git a/Gitea/.env b/Gitea/.env new file mode 100644 index 0000000..e91bfca --- /dev/null +++ b/Gitea/.env @@ -0,0 +1,9 @@ + +# User & Timezone Settings +PUID=1000 +PGID=1000 +TZ=Europe/London + +DB_PASSWORD=gittea +MYSQL_ROOT_PASSWORD=root + diff --git a/Gitea/Makefile b/Gitea/Makefile new file mode 100644 index 0000000..2092c45 --- /dev/null +++ b/Gitea/Makefile @@ -0,0 +1,5 @@ +up: + docker-compose up -d + +down: + docker-compose down \ No newline at end of file diff --git a/Gitea/docker-compose.yml b/Gitea/docker-compose.yml new file mode 100644 index 0000000..5b9be26 --- /dev/null +++ b/Gitea/docker-compose.yml @@ -0,0 +1,44 @@ + +services: + gitea: + image: gitea/gitea:latest + container_name: gitea + environment: + - USER_UID=${PUID} + - USER_GID=${PGID} + - TZ=${TZ} + - GITEA__database__DB_TYPE=mysql + - GITEA__database__HOST=db:3306 + - GITEA__database__NAME=gitea + - GITEA__database__USER=gitea + - GITEA__database__PASSWD=${DB_PASSWORD} + restart: always + networks: + - gitea + volumes: + - ./gitea:/data + - /etc/timezone:/etc/timezone:ro + - /etc/localtime:/etc/localtime:ro + ports: + - "3001:3000" + - "222:22" + + db: + image: mysql:8 + container_name: gitea-db + environment: + - MYSQL_ROOT_PASSWORD=${MYSQL_ROOT_PASSWORD} + - MYSQL_DATABASE=gitea + - MYSQL_USER=gitea + - MYSQL_PASSWORD=${DB_PASSWORD} + - TZ=${TZ} + restart: always + networks: + - gitea + volumes: + - ./mysql:/var/lib/mysql + + +networks: + gitea: + external: false \ No newline at end of file diff --git a/JellyFin/.gitignore b/JellyFin/.gitignore new file mode 100644 index 0000000..ebd0760 --- /dev/null +++ b/JellyFin/.gitignore @@ -0,0 +1,7 @@ +.env + +Gluetun/* +JellySeerr/* +Prowlarr/* +Radarr/* +Sonarr/* \ No newline at end of file diff --git a/JellyFin/Makefile b/JellyFin/Makefile new file mode 100644 index 0000000..5062551 --- /dev/null +++ b/JellyFin/Makefile @@ -0,0 +1,15 @@ +up: + docker-compose up -d + +down: + docker-compose down + +nginx-up: + cd ../NginxReverseProxy + docker-compose up -d + cd - + +nginx-down: + cd ../NginxReverseProxy + docker-compose down + cd - diff --git a/JellyFin/docker-compose.yml b/JellyFin/docker-compose.yml new file mode 100644 index 0000000..0904552 --- /dev/null +++ b/JellyFin/docker-compose.yml @@ -0,0 +1,136 @@ +services: + + jellyfin: + image: lscr.io/linuxserver/jellyfin:latest + container_name: jellyfin + environment: + - PUID=${PUID} + - PGID=${PGID} + - TZ=${TZ} + volumes: + - /mnt/e/library:/config + - ${TVSHOWS}:/data/tvshows + - ${MOVIES}:/data/movies + ports: + - "8096:8096" + - "8920:8920" + - "7359:7359/udp" + - "1900:1900/udp" + restart: unless-stopped + networks: + - lingen + + jellyseerr: + image: ghcr.io/fallenbagel/jellyseerr:latest + init: true + container_name: jellyseerr + environment: + - LOG_LEVEL=debug + - TZ=${TZ} + - PORT=5055 + ports: + - "5055:5055" + volumes: + - ./JellySeerr/config:/app/config + healthcheck: + test: wget --no-verbose --tries=1 --spider http://localhost:5055/api/v1/status || exit 1 + start_period: 20s + timeout: 3s + interval: 15s + retries: 3 + restart: unless-stopped + networks: + - lingen + + sonarr: + image: lscr.io/linuxserver/sonarr:latest + container_name: sonarr + environment: + - PUID=${PUID} + - PGID=${PGID} + - TZ=${TZ} + volumes: + - ./Sonarr/data:/config + - ./Sonarr/downloads:/downloads + - ${TVSHOWS}:/data/tvshows + - ${MOVIES}:/data/movies + - ${DOWNLOADS}:/data/downloads + ports: + - "8989:8989" + restart: unless-stopped + networks: + - lingen + + prowlarr: + container_name: prowlarr + image: ghcr.io/hotio/prowlarr + ports: + - "9696:9696" + environment: + - PUID=${PUID} + - PGID=${PGID} + - UMASK=002 + - TZ=${TZ} + volumes: + - ./Prowlarr/config:/config + networks: + - lingen + + radarr: + container_name: radarr + image: ghcr.io/hotio/radarr + ports: + - "7878:7878" + environment: + - PUID=${PUID} + - PGID=${PGID} + - UMASK=002 + - TZ=${TZ} + volumes: + - ./Radarr/config:/config + - ./Radarr/data:/data + - ./Radarr/downloads:/downloads + - ${TVSHOWS}:/data/tvshows + - ${MOVIES}:/data/movies + - ${DOWNLOADS}:/data/downloads + networks: + - lingen + + qbittorrent: + image: lscr.io/linuxserver/qbittorrent:latest + container_name: qbittorrent + ports: + - "8080:8080" + - "6881:6881" + - "6881:6881/udp" + environment: + - PUID=${PUID} + - PGID=${PGID} + - TZ=${TZ} + - WEBUI_PORT=8080 + volumes: + - ./Radarr/config:/config + - ${TVSHOWS}:/data/tvshows + - ${MOVIES}:/data/movies + - ${DOWNLOADS}:/data/downloads + restart: unless-stopped + networks: + - lingen + + flaresolverr: + image: ghcr.io/flaresolverr/flaresolverr:latest + container_name: flaresolverr + environment: + - LOG_LEVEL=${LOG_LEVEL:-info} + - LOG_HTML=${LOG_HTML:-false} + - CAPTCHA_SOLVER=${CAPTCHA_SOLVER:-none} + - TZ=${TZ} + ports: + - ${PORT:-8191}:8191 + restart: unless-stopped + networks: + - lingen + +networks: + lingen: + driver: bridge diff --git a/Minecraft/Makefile b/Minecraft/Makefile new file mode 100644 index 0000000..1b7cef7 --- /dev/null +++ b/Minecraft/Makefile @@ -0,0 +1,5 @@ +up: + docker-compose up -d + +down: + docker-compose down diff --git a/Minecraft/compose.yaml b/Minecraft/compose.yaml new file mode 100644 index 0000000..5148d3e --- /dev/null +++ b/Minecraft/compose.yaml @@ -0,0 +1,12 @@ +services: + mc: + image: itzg/minecraft-server:latest + tty: true + stdin_open: true + ports: + - "25565:25565" + environment: + EULA: "TRUE" + MEMORY: "5120M" + volumes: + - "./data:/data" diff --git a/NginxReverseProxy/Makefile b/NginxReverseProxy/Makefile new file mode 100644 index 0000000..1b7cef7 --- /dev/null +++ b/NginxReverseProxy/Makefile @@ -0,0 +1,5 @@ +up: + docker-compose up -d + +down: + docker-compose down diff --git a/NginxReverseProxy/default.html b/NginxReverseProxy/default.html new file mode 100644 index 0000000..60af8d9 --- /dev/null +++ b/NginxReverseProxy/default.html @@ -0,0 +1,276 @@ + + + + + + Lingen Navigator + + + + +

Lingen Services

+
+

Lingen Hosts

+
+ +

+
+ + + \ No newline at end of file diff --git a/NginxReverseProxy/docker-compose.yml b/NginxReverseProxy/docker-compose.yml new file mode 100644 index 0000000..fe752a3 --- /dev/null +++ b/NginxReverseProxy/docker-compose.yml @@ -0,0 +1,21 @@ +services: + app: + image: 'jc21/nginx-proxy-manager:latest' + restart: unless-stopped + + environment: + TZ: "Europe/London" + ports: + - '80:80' + - '81:81' + + - '443:443' + volumes: + - ./data:/data + - ./letsencrypt:/etc/letsencrypt + networks: + - lingen +networks: + lingen: + driver: bridge + diff --git a/Scanopy/Makefile b/Scanopy/Makefile new file mode 100644 index 0000000..1b7cef7 --- /dev/null +++ b/Scanopy/Makefile @@ -0,0 +1,5 @@ +up: + docker-compose up -d + +down: + docker-compose down diff --git a/Scanopy/docker-compose.yml b/Scanopy/docker-compose.yml new file mode 100644 index 0000000..9eed1e8 --- /dev/null +++ b/Scanopy/docker-compose.yml @@ -0,0 +1,85 @@ +name: scanopy + +x-scanopy-env: &scanopy-env + SCANOPY_LOG_LEVEL: ${SCANOPY_LOG_LEVEL:-info} + SCANOPY_SERVER_PORT: ${SCANOPY_SERVER_PORT:-60072} + SCANOPY_DAEMON_PORT: ${SCANOPY_DAEMON_PORT:-60073} + +services: + daemon: + image: ghcr.io/scanopy/scanopy/daemon:latest + container_name: scanopy-daemon + network_mode: host + privileged: true + restart: unless-stopped + ports: + - "${SCANOPY_DAEMON_PORT:-60073}:${SCANOPY_DAEMON_PORT:-60073}" + environment: + <<: *scanopy-env + SCANOPY_SERVER_URL: ${SCANOPY_SERVER_URL:-http://127.0.0.1:60072} + SCANOPY_PORT: ${SCANOPY_DAEMON_PORT:-60073} + SCANOPY_BIND_ADDRESS: ${SCANOPY_BIND_ADDRESS:-0.0.0.0} + SCANOPY_NAME: ${SCANOPY_NAME:-scanopy-daemon} + SCANOPY_HEARTBEAT_INTERVAL: ${SCANOPY_HEARTBEAT_INTERVAL:-30} + SCANOPY_MODE: ${SCANOPY_MODE:-Push} + healthcheck: + test: ["CMD-SHELL", "curl -f http://localhost:${SCANOPY_DAEMON_PORT:-60073}/api/health || exit 1"] + interval: 5s + timeout: 3s + retries: 15 + volumes: + - daemon-config:/root/.config/daemon + # Comment out the line below to disable docker discovery + - /var/run/docker.sock:/var/run/docker.sock:ro + + postgres: + image: postgres:17-alpine + environment: + POSTGRES_DB: scanopy + POSTGRES_USER: postgres + POSTGRES_PASSWORD: ${POSTGRES_PASSWORD:-password} + volumes: + - postgres_data:/var/lib/postgresql/data + healthcheck: + test: ["CMD-SHELL", "pg_isready -U postgres"] + interval: 10s + timeout: 5s + retries: 5 + restart: unless-stopped + networks: + - scanopy + + server: + image: ghcr.io/scanopy/scanopy/server:latest + ports: + - "${SCANOPY_SERVER_PORT:-60072}:${SCANOPY_SERVER_PORT:-60072}" + environment: + <<: *scanopy-env + SCANOPY_DATABASE_URL: postgresql://postgres:${POSTGRES_PASSWORD:-password}@postgres:5432/scanopy + SCANOPY_WEB_EXTERNAL_PATH: /app/static + SCANOPY_PUBLIC_URL: ${SCANOPY_PUBLIC_URL:-http://localhost:${SCANOPY_SERVER_PORT:-60072}} + # How server reaches integrated daemon + # 172.17.0.1 is Docker's default bridge gateway. If your's is different, make sure to change it. + SCANOPY_INTEGRATED_DAEMON_URL: http://172.17.0.1:${SCANOPY_DAEMON_PORT:-60073} + volumes: + - ./data:/data + depends_on: + postgres: + condition: service_healthy + daemon: + condition: service_healthy + restart: unless-stopped + networks: + - scanopy + +volumes: + postgres_data: + daemon-config: + +networks: + scanopy: + driver: bridge + ipam: + config: + - subnet: 172.31.0.0/16 + gateway: 172.31.0.1