Compare commits

..

8 Commits

Author SHA1 Message Date
Shaun Collins a6a778f993 Added it tools and named container 2026-03-04 14:50:57 +00:00
Shaun Collins c6270fde68 Removed boilerplate that was incorrectly added 2026-03-04 14:50:47 +00:00
Shaun Collins be0c3a7eca Removed homepage and added in it tools 2026-03-04 14:31:47 +00:00
Shaun Collins 011ac8df08 Added Newt service for Pangolin 2026-02-26 01:39:49 +00:00
Shaun Collins 371fff18c0 Init 2026-02-23 13:17:51 +00:00
Shaun Collins a58b9b04e2 Readded prunemate and changed minecraft to use crafty 2026-02-03 10:50:09 +00:00
Shaun Collins 4fae8e4798 Added a readme 2026-01-30 15:36:27 +00:00
Shaun Collins e20209bf9e Init 2026-01-30 15:26:59 +00:00
15 changed files with 46 additions and 302569 deletions
-3
View File
@@ -3,7 +3,6 @@
Ace/ Ace/
Database/ Database/
BoilerPlate/ BoilerPlate/
StuShifters/
Gitea/gitea/ Gitea/gitea/
Gitea/mysql/ Gitea/mysql/
@@ -18,7 +17,5 @@ JellyFin/JellySeerr
JellyFin/Prowlarr JellyFin/Prowlarr
JellyFin/Radarr JellyFin/Radarr
JellyFin/Sonarr JellyFin/Sonarr
Vikunja/db
Vikunja/files
+6 -22
View File
@@ -3,10 +3,8 @@ services:
image: cloudreve/cloudreve:latest image: cloudreve/cloudreve:latest
container_name: cloudreve-backend container_name: cloudreve-backend
depends_on: depends_on:
postgresql: - postgresql
condition: service_healthy - redis
redis:
condition: service_healthy
restart: unless-stopped restart: unless-stopped
ports: ports:
- "5212:5212" - "5212:5212"
@@ -21,14 +19,11 @@ services:
- CR_CONF_Redis.Server=redis:6379 - CR_CONF_Redis.Server=redis:6379
volumes: volumes:
- "${DATA_PATH}:/cloudreve/data" - "${DATA_PATH}:/cloudreve/data"
healthcheck:
test: ["CMD", "wget", "--no-verbose", "--tries=1", "--spider", "http://localhost:5212/api/v4/site/ping"]
interval: 30s
timeout: 5s
start_period: 40s
retries: 3
postgresql: 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 image: postgres:17
container_name: postgresql container_name: postgresql
restart: unless-stopped restart: unless-stopped
@@ -38,12 +33,6 @@ services:
- POSTGRES_HOST_AUTH_METHOD=trust - POSTGRES_HOST_AUTH_METHOD=trust
volumes: volumes:
- database_postgres:/var/lib/postgresql/data - database_postgres:/var/lib/postgresql/data
healthcheck:
test: ["CMD-SHELL", "pg_isready -U cloudreve"]
interval: 10s
timeout: 5s
start_period: 30s
retries: 5
redis: redis:
image: redis:latest image: redis:latest
@@ -51,13 +40,8 @@ services:
restart: unless-stopped restart: unless-stopped
volumes: volumes:
- redis_data:/data - redis_data:/data
healthcheck:
test: ["CMD", "redis-cli", "ping"]
interval: 10s
timeout: 5s
start_period: 30s
retries: 5
volumes: volumes:
# backend_data:
database_postgres: database_postgres:
redis_data: redis_data:
+2 -15
View File
@@ -1,3 +1,4 @@
services: services:
gitea: gitea:
image: gitea/gitea:latest image: gitea/gitea:latest
@@ -21,15 +22,6 @@ services:
ports: ports:
- "3001:3000" - "3001:3000"
- "222:22" - "222:22"
healthcheck:
test: ["CMD", "wget", "--no-verbose", "--tries=1", "--spider", "http://localhost:3000/api/healthz"]
interval: 30s
timeout: 5s
start_period: 40s
retries: 3
depends_on:
db:
condition: service_healthy
db: db:
image: mysql:8 image: mysql:8
@@ -45,12 +37,7 @@ services:
- gitea - gitea
volumes: volumes:
- ./mysql:/var/lib/mysql - ./mysql:/var/lib/mysql
healthcheck:
test: ["CMD", "mysqladmin", "ping", "-h", "localhost"]
interval: 10s
timeout: 5s
start_period: 30s
retries: 5
networks: networks:
gitea: gitea:
+1 -3
View File
@@ -4,6 +4,4 @@ Gluetun/*
JellySeerr/* JellySeerr/*
Prowlarr/* Prowlarr/*
Radarr/* Radarr/*
Sonarr/* Sonarr/*
Bazarr/*
Lidarr/*
File diff suppressed because it is too large Load Diff
-7
View File
@@ -13,10 +13,3 @@ nginx-down:
cd ../NginxReverseProxy cd ../NginxReverseProxy
docker-compose down docker-compose down
cd - cd -
restart-glue:
docker-compose down gluetun
docker-compose up -d gluetun
sleep 5
docker logs gluetun
+11 -150
View File
@@ -17,12 +17,6 @@ services:
- "7359:7359/udp" - "7359:7359/udp"
- "1900:1900/udp" - "1900:1900/udp"
restart: unless-stopped restart: unless-stopped
healthcheck:
test: ["CMD", "curl", "-f", "http://localhost:8096/health"]
start_period: 30s
timeout: 5s
interval: 30s
retries: 3
networks: networks:
- lingen - lingen
@@ -63,12 +57,6 @@ services:
- ${DOWNLOADS}:/data/downloads - ${DOWNLOADS}:/data/downloads
ports: ports:
- "8989:8989" - "8989:8989"
healthcheck:
test: ["CMD", "curl", "-f", "http://localhost:8989/ping"]
start_period: 30s
timeout: 5s
interval: 30s
retries: 3
restart: unless-stopped restart: unless-stopped
networks: networks:
- lingen - lingen
@@ -85,12 +73,6 @@ services:
- TZ=${TZ} - TZ=${TZ}
volumes: volumes:
- ./Prowlarr/config:/config - ./Prowlarr/config:/config
healthcheck:
test: ["CMD", "curl", "-f", "http://localhost:9696"]
start_period: 30s
timeout: 5s
interval: 30s
retries: 3
networks: networks:
- lingen - lingen
@@ -111,34 +93,26 @@ services:
- ${TVSHOWS}:/data/tvshows - ${TVSHOWS}:/data/tvshows
- ${MOVIES}:/data/movies - ${MOVIES}:/data/movies
- ${DOWNLOADS}:/data/downloads - ${DOWNLOADS}:/data/downloads
healthcheck:
test: ["CMD", "curl", "-f", "http://localhost:7878/ping"]
start_period: 30s
timeout: 5s
interval: 30s
retries: 3
networks: networks:
- lingen - lingen
bazarr: qbittorrent:
container_name: bazarr image: lscr.io/linuxserver/qbittorrent:latest
image: lscr.io/linuxserver/bazarr:latest container_name: qbittorrent
ports:
- "8080:8080"
- "6881:6881"
- "6881:6881/udp"
environment: environment:
- PUID=${PUID} - PUID=${PUID}
- PGID=${PGID} - PGID=${PGID}
- TZ=${TZ} - TZ=${TZ}
- WEBUI_PORT=8080
volumes: volumes:
- ./Bazarr/config:/config - ./Radarr/config:/config
- ${TVSHOWS}:/data/tvshows - ${TVSHOWS}:/data/tvshows
- ${MOVIES}:/data/movies - ${MOVIES}:/data/movies
ports: - ${DOWNLOADS}:/data/downloads
- "6767:6767"
healthcheck:
test: ["CMD", "curl", "-f", "http://localhost:6767/health"]
start_period: 30s
timeout: 5s
interval: 30s
retries: 3
restart: unless-stopped restart: unless-stopped
networks: networks:
- lingen - lingen
@@ -153,123 +127,10 @@ services:
- TZ=${TZ} - TZ=${TZ}
ports: ports:
- ${PORT:-8191}:8191 - ${PORT:-8191}:8191
healthcheck:
test: ["CMD", "curl", "-f", "http://localhost:8191"]
start_period: 30s
timeout: 5s
interval: 30s
retries: 3
restart: unless-stopped restart: unless-stopped
networks: networks:
- lingen - lingen
gluetun-webui:
image: scuzza/gluetun-webui:latest
container_name: gluetun-webui
ports:
- "127.0.0.1:3002:3000"
environment:
- GLUETUN_CONTROL_URL=http://gluetun:8000
- TRUST_PROXY=true
# - GLUETUN_API_KEY=${GLUETUN_API_KEY}
networks:
- lingen
restart: unless-stopped
read_only: true
tmpfs:
- /tmp
security_opt:
- no-new-privileges:true
cap_drop:
- ALL
healthcheck:
test: ["CMD-SHELL", "wget -q -O- http://localhost:3000/api/health || exit 1"]
interval: 30s
timeout: 5s
start_period: 10s
retries: 3
gluetun:
image: qmcgaw/gluetun
container_name: gluetun
cap_add:
- NET_ADMIN
devices:
- /dev/net/tun:/dev/net/tun
environment:
- VPN_SERVICE_PROVIDER=protonvpn
- VPN_TYPE=wireguard
- WIREGUARD_PRIVATE_KEY=${WIREGUARD_PRIVATE_KEY}
- SERVER_COUNTRIES=${SERVER_COUNTRIES}
- API_LOG_LEVEL=info
volumes:
- /home/shaun/Projects/JellyFin/Gluetun/auth:/gluetun/auth
ports:
- "51820:51820/udp"
- "8000:8000"
- "6881:6881" # Add qBittorrent listening port
- "6881:6881/udp" # Add qBittorrent listening port UDP
healthcheck:
test: ["CMD-SHELL", "wget -q -O- http://localhost:8000/v1/vpn/status || exit 1"]
start_period: 30s
timeout: 5s
interval: 30s
retries: 3
networks:
- lingen
restart: unless-stopped
qbittorrent:
image: lscr.io/linuxserver/qbittorrent:latest
container_name: qbittorrent
ports:
- "8080:8080"
environment:
- PUID=${PUID}
- PGID=${PGID}
- TZ=${TZ}
- WEBUI_PORT=8080
volumes:
- ./Radarr/config:/config
- ${TVSHOWS}:/data/tvshows
- ${MOVIES}:/data/movies
- ${DOWNLOADS}:/data/downloads
healthcheck:
test: ["CMD", "curl", "-f", "http://localhost:8080"]
start_period: 30s
timeout: 5s
interval: 30s
retries: 3
networks:
- lingen
restart: unless-stopped
lidarr:
container_name: lidarr
image: ghcr.io/hotio/lidarr
ports:
- "8686:8686"
environment:
- PUID=${PUID}
- PGID=${PGID}
- UMASK=002
- TZ=${TZ}
volumes:
- ./Lidarr/config:/config
- ./Lidarr/data:/data
- ./Lidarr/downloads:/downloads
- ${MUSIC}:/data/music
- ${DOWNLOADS}:/data/downloads
healthcheck:
test: ["CMD", "curl", "-f", "http://localhost:8686/ping"]
start_period: 30s
timeout: 5s
interval: 30s
retries: 3
networks:
- lingen
restart: unless-stopped
networks: networks:
lingen: lingen:
driver: bridge driver: bridge
+1 -5
View File
@@ -218,11 +218,7 @@
{ ipAddress: "192.168.40.5", port: "7676", name: "PruneMate", description: "Clean up Docker data", site: "prune", icon: "fa-solid fa-trash" }, { ipAddress: "192.168.40.5", port: "7676", name: "PruneMate", description: "Clean up Docker data", site: "prune", icon: "fa-solid fa-trash" },
{ ipAddress: "192.168.40.5", port: "60072", name: "Scanopy", description: "Scan and organize your network", site: "scan", icon: "fa-solid fa-satellite-dish" }, { ipAddress: "192.168.40.5", port: "60072", name: "Scanopy", description: "Scan and organize your network", site: "scan", icon: "fa-solid fa-satellite-dish" },
{ ipAddress: "192.168.40.5", scheme: 'https://', port: "8443", name: "Minecraft", description: "Crafty Minecraft server admin", site: "minecraft", icon: "fa-solid fa-cubes" }, { ipAddress: "192.168.40.5", scheme: 'https://', port: "8443", name: "Minecraft", description: "Crafty Minecraft server admin", site: "minecraft", icon: "fa-solid fa-cubes" },
{ ipAddress: "192.168.40.5", port: "8081", name: "IT Tools", description: "Collection of tools for IT Dev", site: "tools", icon: "fa-solid fa-tools" }, { ipAddress: "192.168.40.5", port: "8081", name: "IT Tools", description: "Collection of tools for IT Dev", site: "tools", icon: "fa-solid fa-tools" }
{ ipAddress: "192.168.40.5", port: "3002", name: "Gluetun", description: "Web UI for VPN status", site: "gluetun", icon: "fa-solid fa-shield" },
{ ipAddress: "192.168.40.5", port: "6767", name: "Bazarr", description: "Subtitle provider", site: "bazarr", icon: "fa-solid fa-closed-captioning" },
{ ipAddress: "192.168.40.5", port: "3456", name: "Vikunja", description: "Tasks and sprints", site: "vikunja", icon: "fa-solid fa-list-check" },
{ ipAddress: "192.168.40.5", port: "8084", name: "StirlingPDF", description: "PDF tools", site: "pdf", icon: "fa-solid fa-file-pdf" }
]; ];
const buttonContainer = document.querySelector(".button-container"); const buttonContainer = document.querySelector(".button-container");
+4 -9
View File
@@ -9,19 +9,14 @@ services:
ports: ports:
- '80:80' - '80:80'
- '81:81' - '81:81'
- '443:443' - '443:443'
volumes: volumes:
- ./data:/data - ./data:/data
- ./letsencrypt:/etc/letsencrypt - ./letsencrypt:/etc/letsencrypt
networks: networks:
- lingen - lingen
healthcheck:
test: ["CMD", "curl", "-f", "http://localhost:81/api/version/check"]
interval: 30s
timeout: 5s
start_period: 40s
retries: 3
networks: networks:
lingen: lingen:
driver: bridge driver: bridge
+21 -40
View File
@@ -1,8 +1,9 @@
# Lingen Homelab # README
## Overview ## Overview
The Lingen Homelab is a comprehensive self-hosted services repository designed to provide a complete ecosystem of applications for media management, VPN services, development tools, and more. All services are containerized using Docker and managed through a unified `Makefile` for simplified operations. This repository contains multiple services, used within the Lingen Homelab.
They are all controlled via a `Makefile`
![Lingen landing page](lingen.png) ![Lingen landing page](lingen.png)
@@ -10,47 +11,27 @@ The Lingen Homelab is a comprehensive self-hosted services repository designed t
## Available Services ## Available Services
### Media & Entertainment Here is a list of available services within the repository:
- **AudioBookShelf** - Self-hosted audiobook and podcast server
- **Jellyfin** - Open-source media system and home theater
- **JellySeerr** - Media request management for Jellyfin
- **Radarr** - Movie collection manager and download automation
- **Sonarr** - TV series collection manager and download automation
- **Lidarr** - Music collection manager and download automation
- **Bazarr** - Subtitle management for Radarr and Sonarr
### Content & Downloads 1. **AudioBookShelf**
- **Prowlarr** - Indexer manager for Radarr, Sonarr, and Lidarr 2. **Cloudreve**
- **Flaresolverr** - Proxy server to handle Cloudflare protection 3. **Dockhand**
- **Qbittorrent** - Lightweight torrent client for media downloads 4. **Gitea**
- **Scanopy** - Container monitoring and management system 5. **Jellyfin**
6. **Gluetun**
### Infrastructure & Security 7. **JellySeerr**
- **Gluetun** - VPN client container for secure connections 8. **Prowlarr**
- **Gluetun WebUI** - Web interface for Gluetun management 9. **Radarr**
- **NginxReverseProxy** - Reverse proxy for routing and SSL termination 10. **Sonarr**
- **Newt** - API management and monitoring tool for use with Pangolin 11. **Minecraft**
12. **Scanopy**
### Development & Utilities 13. **NginxReverseProxy**
- **Gitea** - Lightweight Git service for version control
- **Cloudreve** - Self-hosted cloud storage solution
- **Dockhand** - Docker management utility
- **Database** - Shared database services
### Additional Services
- **Minecraft** - Minecraft game server management
- **Prunemate** - Docker cleanup and maintenance tool
- **Tools** - Development and operational tools
--- ---
## Quick Start ## General Commands
### Basic Commands The repository uses a `Makefile` to simplify service management across the project. Below are the common commands available:
The repository uses a `Makefile` to simplify service management. Below are the common commands available: - `make up` Bring service up
- `make down` Bring service down
```bash
make up # Bring all services up in the background
make down # Bring all services down
```
-5
View File
@@ -1,5 +0,0 @@
up:
docker-compose up -d
down:
docker-compose down
-12
View File
@@ -1,12 +0,0 @@
services:
StirlingPdf:
image: docker.stirlingpdf.com/stirlingtools/stirling-pdf
container_name: StirlingPdf
restart: unless-stopped
networks:
- lingen
ports:
- "8084:8080"
networks:
lingen:
driver: bridge
-5
View File
@@ -1,5 +0,0 @@
up:
docker-compose up -d
down:
docker-compose down
-20
View File
@@ -1,20 +0,0 @@
services:
vikunja:
image: vikunja/vikunja:2.3.0
container_name: vikunja
environment:
VIKUNJA_SERVICE_PUBLICURL: https:/tasks.shaunc.co.uk/
VIKUNJA_SERVICE_JWTSECRET: 4c9faad669e44f47d4055631403ba93ffa978f20015e45ab2e79b83daccc6f5a
VIKUNJA_DATABASE_PATH: /db/vikunja.db
ports:
- 3456:3456
# healthcheck:
# test: ["CMD", "wget", "--no-verbose", "--tries=1", "--spider", "http://localhost:3456/api/v1/docs.json"]
# interval: 30s
# timeout: 5s
# start_period: 40s
# retries: 3
volumes:
- ./files:/app/vikunja/files
- ./db:/db
restart: unless-stopped
BIN
View File
Binary file not shown.

Before

Width:  |  Height:  |  Size: 397 KiB

After

Width:  |  Height:  |  Size: 199 KiB