Compare commits

11 Commits

5 changed files with 211 additions and 65 deletions

View File

@@ -16,29 +16,35 @@ docker compose up -d
## 📋 Services Overview
### 🎬 Media Management
- **Bazarr** (6767) - Subtitle management
- **FlareSolverr** (8191) - Cloudflare bypass
- **Jellyfin** (8096) - Media streaming server
- **Jellyseerr** (5055) - Media request management
- **Lidarr** (8686) - Music management
- **Prowlarr** (9696) - Indexer management
- **qBittorrent** (7070) - Download client
- **Radarr** (7878) - Movie management
- **Sonarr** (8989) - TV series management
- **Bazarr** (6767) - Subtitle Management
- **FlareSolverr** (8191) - Cloudflare Bypass
- **Jellyfin** (8096) - Media Streaming Server
- **Jellyseerr** (5055) - Media Request Management
- **Prowlarr** (9696) - Indexer Management
- **qBittorrent** (7070) - Download Client
- **Radarr** (7878) - Movie Management
- **Sonarr** (8989) - TV Series Management
### 🎵 Music & Scrobbling
- **Maloja** (42010) - Music statistics
- **Multi-Scrobbler** (9078) - Music scrobbling
- **Lidarr** (8686) - Music management
- **Lidarr Importer API** (5110) - API of Maloja DB for Lidarr Import
- **Maloja** (42010) - Music Statistics
- **MBID-Poller** - Polls Lidar API with Scrobbled artists then auto adds once found.
- **Multi-Scrobbler** (9078) - Music Scrobbling
- **Maloja to Lidarr Importer** - Scrobble Artist List for Custom Import
- **Pinchflat** (8945) - Youtube Content Downloader
- **Soulseek** (5030) - P2P Filesharer
- **Soularr** - Intermediary between Lidarr and Soulseek
### 📄 Document Management
- **Gotenberg** - Document conversion
- **OnlyOffice** (8054) - Document editing
- **Paperless AI** (3040) - AI document enhancement
- **Paperless NGX** (8100) - Document management
- **Redis** - Paperless broker
- **MariaDB** - Paperless database
- **Stirling PDF** (8090) - PDF processing
- **Tika** - Content extraction
- **Gotenberg** - Document Conversion
- **OnlyOffice** (8054) - Document Editing
- **Paperless AI** (3040) - AI Document Enhancement
- **Paperless NGX** (8100) - Document Management
- **Redis** - Paperless Broker
- **MariaDB** - Paperless Database
- **Stirling PDF** (8090) - PDF Processing
- **Tika** - Content Extraction
### 🏠 Personal Applications
- **AdventureLog Frontend** (8015) - Adventure tracking interface
@@ -47,6 +53,7 @@ docker compose up -d
- **Gramps** (5511) - Genealogy management
- **Gramps Celery** - Background task processing
- **Gramps Redis** - Task queue
- **KitchenOwl** - (8081) Recipe and Grocery Manager
- **LiteLLM** (4000) - LLM API Flattening
- **LiteLLM Postgres** - LLM database
- **Obsidian Remote** (8181) - Note-taking
@@ -54,6 +61,7 @@ docker compose up -d
- **Syncthing** (8384) - File synchronization
### 🛠️ System Utilities
- **Bytestash** (5661) - Private Pastebin
- **Docker Proxy** (2375) - Docker API proxy
- **FileBrowser** (6633) - Web file manager
- **FoundryVTT Watcher** (30000) - FoundryVTT player login watcher
@@ -67,6 +75,20 @@ docker compose up -d
- **Speedtest Database** - MariaDB for speedtest
- **Speedtest Tracker** (8180) - Network monitoring
- **Watchtower** - Container updates
- **Whisper** - Speech Recognition System
### 💻 Proxmox Host
The core of this environment is a Proxmox host that orchestrates multiple services using both VMs and LXCs for resource isolation and management. The services currently running include:
- **AdGuard** - Network-wide ad and tracker blocking service.
- **Vaultwarden** - Self-hosted Bitwarden server for secure password management.
- **Immich** - Self-hosted, open-source photo and video backup solution.
- **n8n** - Workflow automation tool for connecting apps and services.
- **HAOS (Home Assistant)** - VM dedicated to home automation.
- **Wordpress** - Content management system for website hosting.
- **FoundryVTT** - Self-hosted virtual tabletop for role-playing games.
- **Crafty Controller** - Server manager for Minecraft.
- **Nextcloud OS** - Platform for private file hosting and collaboration.
## 🏗️ Architecture
@@ -77,7 +99,7 @@ The stack is organized into logical service groups:
├── docker-compose.yml # Main orchestration for ephemeral services
├── .env # Environment variables
├── .env.template # Template for new deployments
├── Services/
├── services/
│ ├── filebrowser/
│ ├── homepage/
│ └── ... # Other stateless services

View File

@@ -6,7 +6,7 @@ services:
environment:
- PUID=1000
- PGID=1000
- TZ=Pacific/Auckland
- TZ=${TZ}
volumes:
- /docker-local/Arrs/Bazarr/config:/config
- /data/:/data/
@@ -21,19 +21,18 @@ services:
image: ghcr.io/flaresolverr/flaresolverr:latest
container_name: flaresolverr
environment:
- TZ=Pacific/Auckland
- TZ=${TZ}
ports:
- 8191:8191
networks:
arr_network:
ipv4_address: 172.20.0.8
restart: unless-stopped
jellyfin:
image: jellyfin/jellyfin
container_name: jellyfin
environment:
- TZ=Pacific/Auckland
- TZ=${TZ}
- PUID=1000
- PGID=1000
- JELLYFIN_PublishedServerUrl=${JELLYFIN_URL}
@@ -41,7 +40,7 @@ services:
- /docker-local/Arrs/Jellyfin/config:/config
- /docker-local/Arrs/Jellyfin/cache:/cache
- /data:/data
- /dev/dri/renderD128:/dev/dri/renderD128
- /dev/dri/:/dev/dri/
ports:
- 8096:8096
group_add:
@@ -53,7 +52,7 @@ services:
container_name: jellyseerr
environment:
- LOG_LEVEL=debug
- TZ=Pacific/Auckland
- TZ=${TZ}
volumes:
- ../docker-local/Arrs/Jellyseerr/config:/app/config
- /data/torrents:/downloads
@@ -65,16 +64,16 @@ services:
restart: unless-stopped
lidarr:
image: lscr.io/linuxserver/lidarr:latest
image: ghcr.io/linuxserver-labs/prarr:lidarr-plugins
container_name: lidarr
environment:
- PUID=1000
- PGID=1000
- TZ=Pacific/Auckland
- TZ=${TZ}
volumes:
- /docker-local/Arrs/Lidarr/config:/config
- /data/:/data/
- /data/torrents/:/downloads
- /data/torrents/complete/lidarr:/data/downloads/complete/lidarr
- /data/music:/data/music
ports:
- 8686:8686
networks:
@@ -86,7 +85,7 @@ services:
image: lscr.io/linuxserver/prowlarr:latest
container_name: prowlarr
environment:
- TZ=Pacific/Auckland
- TZ=${TZ}
- PUID=1000
- PGID=1000
volumes:
@@ -104,11 +103,11 @@ services:
environment:
- PUID=1000
- PGID=1000
- TZ=Pacific/Auckland
- TZ=${TZ}
- WEBUI_PORT=8080
volumes:
- ./services/qBittorrent/config:/config
- /data/torrents:/downloads
- /data/torrents:/data/downloads
ports:
- 7070:8080
- 56881:6881
@@ -122,13 +121,13 @@ services:
image: lscr.io/linuxserver/radarr:latest
container_name: radarr
environment:
- TZ=Pacific/Auckland
- TZ=${TZ}
- PUID=1000
- PGID=1000
volumes:
- /docker-local/Arrs/Radarr/config:/config
- /data/:/data/
- /data/torrents/:/downloads
- /data/torrents/complete/radarr:/data/downloads/complete/radarr
ports:
- 7878:7878
networks:
@@ -140,13 +139,13 @@ services:
image: lscr.io/linuxserver/sonarr:latest
container_name: sonarr
environment:
- TZ=Pacific/Auckland
- TZ=${TZ}
- PUID=1000
- PGID=1000
volumes:
- /docker-local/Arrs/Sonarr/config:/config
- /data:/data
- /data/torrents:/downloads
- /data/torrents/complete/sonarr:/data/downloads/complete/sonarr
ports:
- 8989:8989
networks:
@@ -155,6 +154,21 @@ services:
restart: unless-stopped
# Music & Scrobbling
beets:
image: lscr.io/linuxserver/beets:latest
container_name: beets
environment:
- PUID=1000
- PGID=1000
- TZ=${TZ}
volumes:
- /docker-local/beets/config:/config
- /data/music:/music
- /data/downloads:/downloads
ports:
- 8337:8337
restart: unless-stopped
maloja:
image: "krateng/maloja:latest"
container_name: maloja
@@ -172,13 +186,22 @@ services:
image: foxxmd/multi-scrobbler
container_name: multi-scrobbler
environment:
- TZ=Pacific/Auckland
- TZ=${TZ}
- PUID=1000
- PGID=1000
- BASE_URL=${SCROBBLE_URL}
- SPOTIFY_CLIENT_ID=${SPOTIFY_CLIENT_ID}
- SPOTIFY_CLIENT_SECRET=${SPOTIFY_CLIENT_SECRET}
- SPOTIFY_REDIRECT_URI=${SPOTIFY_REDIRECT_URI}
# - SPOTIFY_CLIENT_ID=${SPOTIFY_CLIENT_ID}
# - SPOTIFY_CLIENT_SECRET=${SPOTIFY_CLIENT_SECRET}
# - SPOTIFY_REDIRECT_URI=${SPOTIFY_REDIRECT_URI}
- YTM_COOKIE=${YTM_COOKIE}
# - YTM_REDIRECT_URI=${YTM_REDIRECT_URI}
# - YTM_CLIENT_ID=${YTM_CLIENT_ID}
# - YTM_CLIENT_SECRET=${YTM_CLIENT_SECRET}
- JELLYFIN_URL=${JELLYFIN_URL}
- JELLYFIN_APIKEY=${JELLYFIN_APIKEY}
- JELLYFIN_USER=${JELLYFIN_USER}
- LZ_TOKEN=${LZ_TOKEN}
- LZ_USER=${LZ_USER}
- MALOJA_URL=${MALOJA_URL}
- MALOJA_API_KEY=${MALOJA_API_KEY}
volumes:
@@ -187,6 +210,63 @@ services:
- "9078:9078"
restart: unless-stopped
lidarr-importer-api:
image: gitea.kansaigaijin.com/kansaigaijin/majola-lidarr-importer:latest
container_name: maloja-lidarr-importer-api
volumes:
- ./services/maloja_lidarr_api/logs:/app/logs
ports:
- "5110:5000"
environment:
- SOURCE_API_URL=${SOURCE_API_URL}
- SOURCE_API_KEY=${SOURCE_API_KEY}
restart: "unless-stopped"
pinchflat:
image: ghcr.io/kieraneglin/pinchflat:latest
container_name: pinchflat
environment:
- TZ=${TZ}
ports:
- '8945:8945'
volumes:
- /docker-local/pinchflat/config:/config
- /data/torrents/:/downloads
slskd:
image: slskd/slskd
container_name: slskd
hostname: slskd
# user: 1000:1000
environment:
- TZ=${TZ}
- SLSKD_REMOTE_CONFIGURATION=true
- SLSKD_USERNAME=${SLSKD_USERNAME}
- SLSKD_PASSWORD=${SLSKD_PASSWORD}
ports:
- 5030:5030
- 5031:5031
- 50300:50300
volumes:
- /docker-local/slskd:/app
- /data:/data
- /data/torrents/slskd_downloads:/downloads
- /data/torrents/incomplete:/incomplete
restart: unless-stopped
soularr:
image: mrusse08/soularr:latest
container_name: soularr
hostname: soularr
user: 1000:1000
environment:
- TZ=${TZ}
- SCRIPT_INTERVAL=300
volumes:
- /data/torrents/slskd_downloads:/downloads
- ./services/soularr:/data
restart: unless-stopped
# Document Management
broker:
image: docker.io/library/redis:8
@@ -307,10 +387,10 @@ services:
PAPERLESS_TIKA_GOTENBERG_ENDPOINT: http://gotenberg:3000
PAPERLESS_TIKA_ENDPOINT: http://tika:9998
volumes:
- ./Services/paperless/data:/usr/src/paperless/data
- ./Services/paperless/media:/usr/src/paperless/media
- ./Services/paperless/export:/usr/src/paperless/export
- ./Services/paperless/consume:/usr/src/paperless/consume
- ./services/paperless/data:/usr/src/paperless/data
- ./services/paperless/media:/usr/src/paperless/media
- ./services/paperless/export:/usr/src/paperless/export
- ./services/paperless/consume:/usr/src/paperless/consume
ports:
- "8100:8000"
depends_on:
@@ -409,6 +489,27 @@ services:
container_name: grampsweb_redis
restart: always
kitchenowl-front:
container_name: kitchenowl-frontend
image: tombursch/kitchenowl-web:latest
environment:
- BACK_URL=kitchenowl-backend:5000
ports:
- "8081:80"
depends_on:
- kitchenowl-back
restart: unless-stopped
kitchenowl-back:
container_name: kitchenowl-backend
image: tombursch/kitchenowl-backend:latest
environment:
- JWT_SECRET_KEY=${KO_JWT_SECRET_KEY}
- FRONT_URL=${KITCHENOWL_FRONT_URL}
volumes:
- /docker-local/kitchenowl_data:/data
restart: unless-stopped
litellm:
image: litellm:local # use your local amd64 build
container_name: litellm
@@ -443,7 +544,7 @@ services:
environment:
- PUID=1000
- PGID=1000
- TZ=Pacific/Auckland
- TZ=${TZ}
- DOCKER_MODS=linuxserver/mods:universal-git
volumes:
- /docker-local/obsidian/vaults:/vaults
@@ -461,7 +562,7 @@ services:
environment:
- TOKEN=${REDBOT_TOKEN}
- PREFIX=!
- TZ=Pacific/Auckland
- TZ=${TZ}
- PUID=1000
restart: unless-stopped
@@ -483,6 +584,23 @@ services:
restart: unless-stopped
# System Utilities
bytestash:
image: "ghcr.io/jordan-dalby/bytestash:latest"
container_name: bytestash
restart: always
volumes:
- /docker-local/bytestash/snippets:/data/snippets
ports:
- "5661:5000"
environment:
BASE_PATH: ""
JWT_SECRET: ${BYTE_JWT_SECRET}
TOKEN_EXPIRY: 24h
ALLOW_NEW_ACCOUNTS: "false"
DEBUG: "true"
DISABLE_ACCOUNTS: "false"
DISABLE_INTERNAL_ACCOUNTS: "false"
dockerproxy:
image: ghcr.io/tecnativa/docker-socket-proxy:latest
container_name: dockerproxy
@@ -515,7 +633,7 @@ services:
restart: unless-stopped
foundry:
build: ./Services/foundry-login
build: ./services/foundry-login
container_name: foundry-login
environment:
- SSH_HOST=${FOUNDRY_SSH_HOST}
@@ -583,14 +701,12 @@ services:
environment:
- PUID=1000
- PGID=1000
- TZ=Pacific/Auckland
- TZ=${TZ}
- HOMEPAGE_ALLOWED_HOSTS=${HOMEPAGE_ALLOWED_HOSTS}
volumes:
- ./services/Homepage/config/images:/app/public/images
- ./services/Homepage/config/icons:/app/public/icons
- ./services/Homepage/config:/app/config
- /docker:/docker
- /data:/data
ports:
- 7575:3000
restart: unless-stopped
@@ -615,7 +731,7 @@ services:
restart: unless-stopped
racknerd-api-converter:
build: ./Services/racknerd-converter
build: ./services/racknerd-converter
container_name: RacknerdConverter
environment:
- RACKNERD_API_KEY=${RACKNERD_API_KEY}
@@ -688,6 +804,25 @@ services:
volumes:
- /var/run/docker.sock:/var/run/docker.sock
whisper:
image: linuxserver/faster-whisper:latest
container_name: faster-whisper
environment:
- PUID=1000
- PGID=1000
- TZ=${TZ}
- WHISPER_MODEL=tiny-int8
- WHISPER_BEAM=1 #optional
- WHISPER_LANG=en #optional
volumes:
- ./services/whisper:/config
ports:
- 10300:10300
restart: unless-stopped
networks:
arr_network:
ipv4_address: 172.20.0.15
networks:
arr_network:
driver: bridge
@@ -700,7 +835,6 @@ networks:
ipam:
config:
- subnet: 172.21.0.0/16
volumes:
aidata:
dbdata:

View File

@@ -1,9 +0,0 @@
{
"docker": {
"DATA_PATH": "/data",
"COG_PATH_APPEND": "cogs",
"CORE_PATH_APPEND": "core",
"STORAGE_TYPE": "JSON",
"STORAGE_DETAILS": {}
}
}

View File

@@ -1 +0,0 @@
python3.11