Compare commits

..

10 Commits

Author SHA1 Message Date
Shaun Collins 98c56e3ffc Added PDF editor 2026-04-27 10:20:14 +01:00
Shaun Collins 3eaf4859c6 Added Vikunja a task platform 2026-04-18 12:32:34 +01:00
Shaun Collins cd4796e709 Updated read me image 2026-03-19 10:40:45 +00:00
Shaun Collins 4092a0d543 Updated readme 2026-03-19 10:37:35 +00:00
Shaun Collins e9d0613bd0 Added Lidarr to gitignore 2026-03-19 10:34:19 +00:00
Shaun Collins deefb99506 Added Bazarr 2026-03-19 10:33:57 +00:00
Shaun Collins 2fed95bfd7 All containers now have a health check 2026-03-13 14:25:45 +00:00
Shaun Collins 20dcdfdb30 Added a health test for cloudreve 2026-03-13 14:09:38 +00:00
Shaun Collins aa064c3dbc Extra health checks and route qbittorrent through VPN 2026-03-13 12:40:46 +00:00
Shaun Collins a0530fb095 Init 2026-03-13 12:21:19 +00:00
15 changed files with 302569 additions and 46 deletions
+3
View File
@@ -3,6 +3,7 @@
Ace/
Database/
BoilerPlate/
StuShifters/
Gitea/gitea/
Gitea/mysql/
@@ -17,5 +18,7 @@ JellyFin/JellySeerr
JellyFin/Prowlarr
JellyFin/Radarr
JellyFin/Sonarr
Vikunja/db
Vikunja/files
+22 -6
View File
@@ -3,8 +3,10 @@ services:
image: cloudreve/cloudreve:latest
container_name: cloudreve-backend
depends_on:
- postgresql
- redis
postgresql:
condition: service_healthy
redis:
condition: service_healthy
restart: unless-stopped
ports:
- "5212:5212"
@@ -19,11 +21,14 @@ services:
- CR_CONF_Redis.Server=redis:6379
volumes:
- "${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:
# 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
@@ -33,6 +38,12 @@ services:
- POSTGRES_HOST_AUTH_METHOD=trust
volumes:
- database_postgres:/var/lib/postgresql/data
healthcheck:
test: ["CMD-SHELL", "pg_isready -U cloudreve"]
interval: 10s
timeout: 5s
start_period: 30s
retries: 5
redis:
image: redis:latest
@@ -40,8 +51,13 @@ services:
restart: unless-stopped
volumes:
- redis_data:/data
healthcheck:
test: ["CMD", "redis-cli", "ping"]
interval: 10s
timeout: 5s
start_period: 30s
retries: 5
volumes:
# backend_data:
database_postgres:
redis_data:
+15 -2
View File
@@ -1,4 +1,3 @@
services:
gitea:
image: gitea/gitea:latest
@@ -22,6 +21,15 @@ services:
ports:
- "3001:3000"
- "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:
image: mysql:8
@@ -37,7 +45,12 @@ services:
- gitea
volumes:
- ./mysql:/var/lib/mysql
healthcheck:
test: ["CMD", "mysqladmin", "ping", "-h", "localhost"]
interval: 10s
timeout: 5s
start_period: 30s
retries: 5
networks:
gitea:
+3 -1
View File
@@ -4,4 +4,6 @@ Gluetun/*
JellySeerr/*
Prowlarr/*
Radarr/*
Sonarr/*
Sonarr/*
Bazarr/*
Lidarr/*
File diff suppressed because it is too large Load Diff
+7
View File
@@ -13,3 +13,10 @@ nginx-down:
cd ../NginxReverseProxy
docker-compose down
cd -
restart-glue:
docker-compose down gluetun
docker-compose up -d gluetun
sleep 5
docker logs gluetun
+150 -11
View File
@@ -17,6 +17,12 @@ services:
- "7359:7359/udp"
- "1900:1900/udp"
restart: unless-stopped
healthcheck:
test: ["CMD", "curl", "-f", "http://localhost:8096/health"]
start_period: 30s
timeout: 5s
interval: 30s
retries: 3
networks:
- lingen
@@ -57,6 +63,12 @@ services:
- ${DOWNLOADS}:/data/downloads
ports:
- "8989:8989"
healthcheck:
test: ["CMD", "curl", "-f", "http://localhost:8989/ping"]
start_period: 30s
timeout: 5s
interval: 30s
retries: 3
restart: unless-stopped
networks:
- lingen
@@ -73,6 +85,12 @@ services:
- TZ=${TZ}
volumes:
- ./Prowlarr/config:/config
healthcheck:
test: ["CMD", "curl", "-f", "http://localhost:9696"]
start_period: 30s
timeout: 5s
interval: 30s
retries: 3
networks:
- lingen
@@ -93,26 +111,34 @@ services:
- ${TVSHOWS}:/data/tvshows
- ${MOVIES}:/data/movies
- ${DOWNLOADS}:/data/downloads
healthcheck:
test: ["CMD", "curl", "-f", "http://localhost:7878/ping"]
start_period: 30s
timeout: 5s
interval: 30s
retries: 3
networks:
- lingen
qbittorrent:
image: lscr.io/linuxserver/qbittorrent:latest
container_name: qbittorrent
ports:
- "8080:8080"
- "6881:6881"
- "6881:6881/udp"
bazarr:
container_name: bazarr
image: lscr.io/linuxserver/bazarr:latest
environment:
- PUID=${PUID}
- PGID=${PGID}
- TZ=${TZ}
- WEBUI_PORT=8080
volumes:
- ./Radarr/config:/config
- ./Bazarr/config:/config
- ${TVSHOWS}:/data/tvshows
- ${MOVIES}:/data/movies
- ${DOWNLOADS}:/data/downloads
ports:
- "6767:6767"
healthcheck:
test: ["CMD", "curl", "-f", "http://localhost:6767/health"]
start_period: 30s
timeout: 5s
interval: 30s
retries: 3
restart: unless-stopped
networks:
- lingen
@@ -127,10 +153,123 @@ services:
- TZ=${TZ}
ports:
- ${PORT:-8191}:8191
healthcheck:
test: ["CMD", "curl", "-f", "http://localhost:8191"]
start_period: 30s
timeout: 5s
interval: 30s
retries: 3
restart: unless-stopped
networks:
- 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:
lingen:
driver: bridge
driver: bridge
+5 -1
View File
@@ -218,7 +218,11 @@
{ 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", 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");
+9 -4
View File
@@ -9,14 +9,19 @@ services:
ports:
- '80:80'
- '81:81'
- '443:443'
volumes:
- ./data:/data
- ./letsencrypt:/etc/letsencrypt
networks:
- lingen
- lingen
healthcheck:
test: ["CMD", "curl", "-f", "http://localhost:81/api/version/check"]
interval: 30s
timeout: 5s
start_period: 40s
retries: 3
networks:
lingen:
driver: bridge
driver: bridge
+40 -21
View File
@@ -1,9 +1,8 @@
# README
# Lingen Homelab
## Overview
This repository contains multiple services, used within the Lingen Homelab.
They are all controlled via a `Makefile`
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.
![Lingen landing page](lingen.png)
@@ -11,27 +10,47 @@ They are all controlled via a `Makefile`
## Available Services
Here is a list of available services within the repository:
### Media & Entertainment
- **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
1. **AudioBookShelf**
2. **Cloudreve**
3. **Dockhand**
4. **Gitea**
5. **Jellyfin**
6. **Gluetun**
7. **JellySeerr**
8. **Prowlarr**
9. **Radarr**
10. **Sonarr**
11. **Minecraft**
12. **Scanopy**
13. **NginxReverseProxy**
### Content & Downloads
- **Prowlarr** - Indexer manager for Radarr, Sonarr, and Lidarr
- **Flaresolverr** - Proxy server to handle Cloudflare protection
- **Qbittorrent** - Lightweight torrent client for media downloads
- **Scanopy** - Container monitoring and management system
### Infrastructure & Security
- **Gluetun** - VPN client container for secure connections
- **Gluetun WebUI** - Web interface for Gluetun management
- **NginxReverseProxy** - Reverse proxy for routing and SSL termination
- **Newt** - API management and monitoring tool for use with Pangolin
### Development & Utilities
- **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
---
## General Commands
## Quick Start
The repository uses a `Makefile` to simplify service management across the project. Below are the common commands available:
### Basic Commands
- `make up` Bring service up
- `make down` Bring service down
The repository uses a `Makefile` to simplify service management. Below are the common commands available:
```bash
make up # Bring all services up in the background
make down # Bring all services down
```
+5
View File
@@ -0,0 +1,5 @@
up:
docker-compose up -d
down:
docker-compose down
+12
View File
@@ -0,0 +1,12 @@
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
@@ -0,0 +1,5 @@
up:
docker-compose up -d
down:
docker-compose down
+20
View File
@@ -0,0 +1,20 @@
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: 199 KiB

After

Width:  |  Height:  |  Size: 397 KiB