Compare commits
10 Commits
a6a778f993
..
master
| Author | SHA1 | Date | |
|---|---|---|---|
| 98c56e3ffc | |||
| 3eaf4859c6 | |||
| cd4796e709 | |||
| 4092a0d543 | |||
| e9d0613bd0 | |||
| deefb99506 | |||
| 2fed95bfd7 | |||
| 20dcdfdb30 | |||
| aa064c3dbc | |||
| a0530fb095 |
@@ -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
|
||||
|
||||
|
||||
|
||||
@@ -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:
|
||||
@@ -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
@@ -4,4 +4,6 @@ Gluetun/*
|
||||
JellySeerr/*
|
||||
Prowlarr/*
|
||||
Radarr/*
|
||||
Sonarr/*
|
||||
Sonarr/*
|
||||
Bazarr/*
|
||||
Lidarr/*
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@@ -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
@@ -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
|
||||
@@ -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,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
|
||||
@@ -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.
|
||||
|
||||

|
||||
|
||||
@@ -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
|
||||
```
|
||||
@@ -0,0 +1,5 @@
|
||||
up:
|
||||
docker-compose up -d
|
||||
|
||||
down:
|
||||
docker-compose down
|
||||
@@ -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
|
||||
@@ -0,0 +1,5 @@
|
||||
up:
|
||||
docker-compose up -d
|
||||
|
||||
down:
|
||||
docker-compose down
|
||||
@@ -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
Binary file not shown.
|
Before Width: | Height: | Size: 199 KiB After Width: | Height: | Size: 397 KiB |
Reference in New Issue
Block a user