99 Commits

Author SHA1 Message Date
Renovate Bot
844584d124 Update docker.io/library/postgres Docker tag to v18 2026-01-21 00:01:19 +00:00
Peter Smit
b2cc33a63b Fix element admin 2026-01-20 20:51:43 +01:00
Peter Smit
5243527119 Add element admin 2026-01-20 20:41:33 +01:00
Peter Smit
25b2b7198d Add grafana-matrix-forwarder for alerts in matrix 2026-01-20 15:36:54 +01:00
Peter Smit
5e6184502a Fix alloy and loki, and remove alertmanager (use grafana's) 2026-01-20 13:55:35 +01:00
Peter Smit
eba54706d1 Add loki and alloy for log monitoring 2026-01-20 11:35:39 +01:00
Peter Smit
969b16136a Remove alert rules from prometheus. Make them managed by grafana 2026-01-19 16:30:32 +01:00
019862d1c4 Update jellyfin to 10.11.6 2026-01-19 12:08:53 +00:00
32cb44d8fc Merge pull request 'Update vaultwarden/server Docker tag to v1.35.2' (#251) from renovate/vaultwarden-server-1.x into master
Reviewed-on: https://git.smittenfeld.nl/peter/homelab-docker-config/pulls/251
2026-01-19 09:53:19 +00:00
5d497f0887 Merge pull request 'Update Matrix' (#255) from renovate/matrix into master
Reviewed-on: https://git.smittenfeld.nl/peter/homelab-docker-config/pulls/255
2026-01-19 09:53:07 +00:00
Renovate Bot
511cb80900 Update Matrix 2026-01-17 00:01:23 +00:00
Peter Smit
2038a34008 Add disable login form option 2026-01-15 17:15:55 +01:00
Peter Smit
7e6f9a6dad Add root url for grafana 2026-01-15 17:00:27 +01:00
Peter Smit
58d5a4f033 Chiller 2026-01-14 14:55:56 +01:00
Peter Smit
a6dde041a6 Give a chill pill to cadvisor 2026-01-14 14:54:34 +01:00
Peter Smit
1a73ba35af Merge all grafana configs 2026-01-14 14:37:33 +01:00
Peter Smit
f601ab02da Move prometheus to 9091 2026-01-14 13:52:36 +01:00
Peter Smit
46fe423058 Add monitoring stack 2026-01-14 13:49:08 +01:00
Peter Smit
a8b440c4f2 Drop baikal 2026-01-14 13:49:08 +01:00
Peter Smit
b517e3f0a6 Disable updater for now (doesn't interact well with DMR) 2026-01-14 13:49:08 +01:00
8898ddb3c2 Merge pull request 'Update shlinkio/shlink Docker tag to v5' (#252) from renovate/shlinkio-shlink-5.x into master
Reviewed-on: https://git.smittenfeld.nl/peter/homelab-docker-config/pulls/252
2026-01-14 10:59:56 +00:00
365096ab12 Merge pull request 'Update ghcr.io/paperless-ngx/paperless-ngx Docker tag to v2.20.4' (#234) from renovate/paperless-ngx into master
Reviewed-on: https://git.smittenfeld.nl/peter/homelab-docker-config/pulls/234
2026-01-14 10:59:43 +00:00
c683451235 Merge pull request 'Update Matrix' (#254) from renovate/matrix into master
Reviewed-on: https://git.smittenfeld.nl/peter/homelab-docker-config/pulls/254
2026-01-14 10:59:39 +00:00
Renovate Bot
81578d3180 Update Matrix 2026-01-14 00:01:56 +00:00
Renovate Bot
e5a67ed0ba Update ghcr.io/paperless-ngx/paperless-ngx Docker tag to v2.20.4 2026-01-14 00:01:45 +00:00
e4dfb24d7e Merge pull request 'Update ghcr.io/pocket-id/pocket-id Docker tag to v2.2.0' (#253) from renovate/ghcr.io-pocket-id-pocket-id-2.x into master
Reviewed-on: https://git.smittenfeld.nl/peter/homelab-docker-config/pulls/253
2026-01-12 10:05:41 +00:00
Renovate Bot
2a5d92b8ab Update ghcr.io/pocket-id/pocket-id Docker tag to v2.2.0 2026-01-12 00:01:55 +00:00
Renovate Bot
413dc45652 Update shlinkio/shlink Docker tag to v5 2026-01-10 00:02:33 +00:00
Renovate Bot
122a1c9139 Update vaultwarden/server Docker tag to v1.35.2 2026-01-10 00:02:26 +00:00
299b01a03e Merge pull request 'Update ghcr.io/pocket-id/pocket-id Docker tag to v2.1.0' (#250) from renovate/ghcr.io-pocket-id-pocket-id-2.x into master
Reviewed-on: https://git.smittenfeld.nl/peter/homelab-docker-config/pulls/250
2026-01-05 15:20:47 +00:00
566359efa4 Merge pull request 'Update ghcr.io/neptunehub/audiomuse-ai Docker tag to v0.8.6' (#249) from renovate/ghcr.io-neptunehub-audiomuse-ai-0.x into master
Reviewed-on: https://git.smittenfeld.nl/peter/homelab-docker-config/pulls/249
2026-01-05 15:20:37 +00:00
Renovate Bot
aae7300424 Update ghcr.io/pocket-id/pocket-id Docker tag to v2.1.0 2026-01-05 00:04:41 +00:00
Renovate Bot
d105050830 Update ghcr.io/neptunehub/audiomuse-ai Docker tag to v0.8.6 2026-01-05 00:04:29 +00:00
5acefd094e Merge pull request 'Update ghcr.io/pocket-id/pocket-id Docker tag to v2.0.2' (#248) from renovate/ghcr.io-pocket-id-pocket-id-2.x into master
Reviewed-on: https://git.smittenfeld.nl/peter/homelab-docker-config/pulls/248
2026-01-04 19:56:44 +00:00
Renovate Bot
2fb1a3ff47 Update ghcr.io/pocket-id/pocket-id Docker tag to v2.0.2 2026-01-04 00:01:41 +00:00
9d5a57c81d Add dmr plugin to updater 2026-01-03 07:42:50 +00:00
d61fa09cef Merge pull request 'Update ghcr.io/pocket-id/pocket-id Docker tag to v2' (#247) from renovate/ghcr.io-pocket-id-pocket-id-2.x into master
Reviewed-on: https://git.smittenfeld.nl/peter/homelab-docker-config/pulls/247
2026-01-03 07:40:15 +00:00
34e4eaa029 prepare for pocket id v2 2026-01-03 07:39:17 +00:00
c5f92c9411 Move pocket Id data dir 2026-01-03 07:26:35 +00:00
0b354d937a expose audiomuse db 2026-01-03 07:26:35 +00:00
Renovate Bot
debd7834fc Update ghcr.io/pocket-id/pocket-id Docker tag to v2 2026-01-03 00:01:48 +00:00
a668b5dba7 Merge pull request 'Update vaultwarden/server Docker tag to v1.35.1' (#246) from renovate/vaultwarden-server-1.x into master
Reviewed-on: https://git.smittenfeld.nl/peter/homelab-docker-config/pulls/246
2026-01-02 18:25:09 +00:00
e9e2dca344 Merge pull request 'Update livekit/livekit-server Docker tag to v1.9.10' (#236) from renovate/matrix into master
Reviewed-on: https://git.smittenfeld.nl/peter/homelab-docker-config/pulls/236
2026-01-02 18:25:04 +00:00
Renovate Bot
90b305fe33 Update livekit/livekit-server Docker tag to v1.9.10 2026-01-02 00:01:48 +00:00
Renovate Bot
e4eec8a487 Update vaultwarden/server Docker tag to v1.35.1 2025-12-31 00:01:54 +00:00
9925ed05ff Merge pull request 'Update vaultwarden/server Docker tag to v1.35.0' (#245) from renovate/vaultwarden-server-1.x into master
Reviewed-on: https://git.smittenfeld.nl/peter/homelab-docker-config/pulls/245
2025-12-28 07:14:58 +00:00
34440c3792 Merge pull request 'Update ghcr.io/neptunehub/audiomuse-ai Docker tag to v0.8.5' (#244) from renovate/ghcr.io-neptunehub-audiomuse-ai-0.x into master
Reviewed-on: https://git.smittenfeld.nl/peter/homelab-docker-config/pulls/244
2025-12-28 07:14:45 +00:00
Renovate Bot
113bf1988e Update vaultwarden/server Docker tag to v1.35.0 2025-12-28 00:01:48 +00:00
Renovate Bot
1e5f8b25f2 Update ghcr.io/neptunehub/audiomuse-ai Docker tag to v0.8.5 2025-12-28 00:01:33 +00:00
882491a48d Merge pull request 'Update redis Docker tag to v8' (#243) from renovate/redis-8.x into master
Reviewed-on: https://git.smittenfeld.nl/peter/homelab-docker-config/pulls/243
2025-12-26 09:19:17 +00:00
c9268738fa Merge pull request 'Update ghcr.io/advplyr/audiobookshelf Docker tag to v2.32.1' (#240) from renovate/ghcr.io-advplyr-audiobookshelf-2.x into master
Reviewed-on: https://git.smittenfeld.nl/peter/homelab-docker-config/pulls/240
2025-12-26 09:19:00 +00:00
da9c1380b1 Merge pull request 'Update ghcr.io/neptunehub/audiomuse-ai Docker tag to v0.8.4' (#242) from renovate/ghcr.io-neptunehub-audiomuse-ai-0.x into master
Reviewed-on: https://git.smittenfeld.nl/peter/homelab-docker-config/pulls/242
2025-12-26 09:18:44 +00:00
Renovate Bot
7b92eaa090 Update ghcr.io/neptunehub/audiomuse-ai Docker tag to v0.8.4 2025-12-26 00:01:37 +00:00
Renovate Bot
45b1fe7008 Update redis Docker tag to v8 2025-12-25 00:02:48 +00:00
Peter Smit
64057945f1 reluctantly use docker volume 2025-12-24 09:25:32 +01:00
Peter Smit
dd6285eeb7 move nextcloud to aio setup 2025-12-24 09:21:08 +01:00
Renovate Bot
c3c9776bb4 Update ghcr.io/advplyr/audiobookshelf Docker tag to v2.32.1 2025-12-24 00:01:52 +00:00
f3e715275a Merge pull request 'Update Immich to v2.4.1' (#237) from renovate/immich into master
Reviewed-on: https://git.smittenfeld.nl/peter/homelab-docker-config/pulls/237
2025-12-20 08:54:16 +00:00
Renovate Bot
3884644dfc Update Immich to v2.4.1 2025-12-20 00:01:59 +00:00
37fca8eb77 Merge pull request 'Update php Docker tag to v8.5' (#232) from renovate/php-8.x into master
Reviewed-on: https://git.smittenfeld.nl/peter/homelab-docker-config/pulls/232
2025-12-18 07:35:16 +00:00
Renovate Bot
c570f52fb8 Update php Docker tag to v8.5 2025-12-18 00:01:48 +00:00
1f541189a6 Update docker-compose.yml 2025-12-17 13:29:25 +00:00
d706fcdcd8 Update spliit/docker-compose.yml 2025-12-17 13:26:21 +00:00
819f145200 Merge pull request 'Update Matrix' (#231) from renovate/matrix into master
Reviewed-on: https://git.smittenfeld.nl/peter/homelab-docker-config/pulls/231
2025-12-17 07:53:07 +00:00
9598316e7d Merge pull request 'Update ghcr.io/element-hq/lk-jwt-service Docker tag to v0.4.0' (#230) from renovate/ghcr.io-element-hq-lk-jwt-service-0.x into master
Reviewed-on: https://git.smittenfeld.nl/peter/homelab-docker-config/pulls/230
2025-12-17 07:53:05 +00:00
8a04ba27d4 Update renovate.json 2025-12-17 07:53:00 +00:00
Renovate Bot
6aec3c1f25 Update Matrix 2025-12-17 00:01:39 +00:00
Renovate Bot
0128da950f Update ghcr.io/element-hq/lk-jwt-service Docker tag to v0.4.0 2025-12-17 00:01:35 +00:00
Peter Smit
7277c47ad9 remove deprecated version 2025-12-16 20:26:08 +01:00
Peter Smit
003b9db402 revert baikal (no docker image yet) 2025-12-16 20:25:37 +01:00
Peter Smit
29446b72c3 update stuff that renovate wont 2025-12-16 20:23:27 +01:00
Peter Smit
0e2c6a889a update pocket id 2025-12-16 20:20:37 +01:00
def08d6c00 Merge pull request 'Update pihole/pihole Docker tag to v2025.11.1' (#229) from renovate/pihole-pihole-2025.x into master
Reviewed-on: https://git.smittenfeld.nl/peter/homelab-docker-config/pulls/229
2025-12-16 19:07:13 +00:00
f37d9e1a68 Merge pull request 'Update nextcloud Docker tag to v32.0.3' (#228) from renovate/nextcloud-32.x into master
Reviewed-on: https://git.smittenfeld.nl/peter/homelab-docker-config/pulls/228
2025-12-16 19:07:04 +00:00
Renovate Bot
4e0012ba18 Update pihole/pihole Docker tag to v2025.11.1 2025-12-16 19:05:48 +00:00
Renovate Bot
ebfe68c838 Update nextcloud Docker tag to v32.0.3 2025-12-16 19:05:43 +00:00
279f35f7e9 Merge pull request 'Update Paperless-ngx' (#214) from renovate/paperless-ngx into master
Reviewed-on: https://git.smittenfeld.nl/peter/homelab-docker-config/pulls/214
2025-12-16 19:01:22 +00:00
c724d43e4d Merge pull request 'Update docker.io/valkey/valkey Docker tag to v9' (#218) from renovate/docker.io-valkey-valkey-9.x into master
Reviewed-on: https://git.smittenfeld.nl/peter/homelab-docker-config/pulls/218
2025-12-16 19:01:10 +00:00
f7a90f823d Merge pull request 'Update livekit/livekit-server Docker tag to v1.9.8' (#221) from renovate/livekit-livekit-server-1.x into master
Reviewed-on: https://git.smittenfeld.nl/peter/homelab-docker-config/pulls/221
2025-12-16 19:00:57 +00:00
faaca0dd64 Merge pull request 'Update gitea/gitea Docker tag to v1.25.2' (#226) from renovate/gitea-gitea-1.x into master
Reviewed-on: https://git.smittenfeld.nl/peter/homelab-docker-config/pulls/226
2025-12-16 18:53:52 +00:00
e06cc2e7b7 Merge pull request 'Update jellyfin/jellyfin Docker tag to v10.11.5' (#227) from renovate/jellyfin-jellyfin-10.x into master
Reviewed-on: https://git.smittenfeld.nl/peter/homelab-docker-config/pulls/227
2025-12-16 18:53:46 +00:00
Renovate Bot
5f834bab2f Update livekit/livekit-server Docker tag to v1.9.8 2025-12-16 18:51:53 +00:00
Renovate Bot
52477db4ad Update jellyfin/jellyfin Docker tag to v10.11.5 2025-12-16 18:51:49 +00:00
Renovate Bot
74bdd11775 Update gitea/gitea Docker tag to v1.25.2 2025-12-16 18:51:41 +00:00
Peter Smit
8168134448 Update audiomuse 2025-12-16 19:46:30 +01:00
Peter Smit
70b8b4bf7c disable spliit for now 2025-12-16 19:45:35 +01:00
Peter Smit
f0631f3e3d Remove central db for now 2025-12-16 19:44:18 +01:00
e827dd1bc9 Update audiomuse/docker-compose.yml 2025-12-14 14:51:38 +00:00
Renovate Bot
f460703e37 Update Paperless-ngx 2025-12-13 00:02:32 +00:00
Peter Smit
30303aac3d Add audiomuse 2025-12-12 16:56:49 +01:00
Renovate Bot
9b592465f7 Update docker.io/valkey/valkey Docker tag to v9 2025-12-10 00:01:53 +00:00
30b2fe346d Update spliit/docker-compose.yml 2025-12-06 20:22:19 +00:00
f78e723fc2 Update immich/docker-compose.yml 2025-11-20 18:24:02 +00:00
ed13bd3d0e Merge pull request 'Update matrixdotorg/synapse Docker tag to v1.142.1' (#224) from renovate/matrix into master
Reviewed-on: https://git.smittenfeld.nl/peter/homelab-docker-config/pulls/224
2025-11-20 18:23:06 +00:00
Renovate Bot
a317e6d71e Update matrixdotorg/synapse Docker tag to v1.142.1 2025-11-19 00:01:44 +00:00
2840a154ef Merge pull request 'Update Matrix to v0.2511.0' (#223) from renovate/matrix into master
Reviewed-on: https://git.smittenfeld.nl/peter/homelab-docker-config/pulls/223
2025-11-17 18:14:36 +00:00
Renovate Bot
cb32a5cdfb Update Matrix to v0.2511.0 2025-11-17 18:13:47 +00:00
74d45f4268 Merge pull request 'Update jellyfin/jellyfin Docker tag to v10.11.3' (#222) from renovate/jellyfin-jellyfin-10.x into master
Reviewed-on: https://git.smittenfeld.nl/peter/homelab-docker-config/pulls/222
2025-11-17 18:08:04 +00:00
Renovate Bot
030376e19d Update jellyfin/jellyfin Docker tag to v10.11.3 2025-11-17 00:01:22 +00:00
35 changed files with 401 additions and 555 deletions

View File

@@ -1,6 +1,6 @@
services: services:
audiobookshelf: audiobookshelf:
image: ghcr.io/advplyr/audiobookshelf:2.30.0 image: ghcr.io/advplyr/audiobookshelf:2.32.1
restart: always restart: always
ports: ports:
- 13378:80 - 13378:80

41
audiomuse/.env.example Normal file
View File

@@ -0,0 +1,41 @@
# Copy this file to `.env` and fill in the values that match your setup.
# Docker Compose files under deployment/ read these variables to keep settings in one place.
#
# IMPORTANT:
# 1. This file must be named exactly ".env" (not .env.txt or .env.example)
# 2. It must be in the SAME directory as your docker-compose-*.yaml file
# 3. Do NOT use spaces around the = sign
# 4. Do NOT use quotes around values (unless required by the value itself)
# 5. After editing, restart containers: docker-compose down && docker-compose up -d
#
# SPECIAL CHARACTERS IN VALUES:
# If your password or API key contains special characters like: $ ` " ' \ # ! & * ( ) [ ] { } | ; < > ?
# you may need to:
# - Avoid quotes entirely: GEMINI_API_KEY=AIza$pecial!Key (usually works)
# - OR use single quotes if the value has $: GEMINI_API_KEY='AIza$pecial!Key'
# - OR escape with backslash: GEMINI_API_KEY=AIza\$pecial\!Key
# Most problematic characters: $ (variable expansion), ` (command substitution), " (string delimiter)
#
# TROUBLESHOOTING:
# If API keys don't work, verify:
# - File is named ".env" exactly (check with: ls -la)
# - No spaces: GEMINI_API_KEY=AIza... (not GEMINI_API_KEY = "AIza...")
# - No unescaped special characters (especially $ ` " ')
# - Restart containers after changing this file
# If all else fails, try hardcoding the value directly in docker-compose-*.yaml to isolate the issue
# --- Jellyfin ---
JELLYFIN_USER_ID=
JELLYFIN_TOKEN=
JELLYFIN_URL=https://jellyfin.smittenfeld.nl
# --- Shared backend configuration ---
AUDIOMUSE_POSTGRES_USER=audiomuse
AUDIOMUSE_POSTGRES_PASSWORD=
AUDIOMUSE_POSTGRES_DB=audiomusedb
#
## --- Remote worker integration ---
#WORKER_URL=http://worker.example.com:8029/worker
#WORKER_POSTGRES_HOST=server.example.com
#WORKER_REDIS_URL=redis://server.example.com:6379/0

View File

@@ -0,0 +1,126 @@
services:
# Redis service for RQ (task queue)
audiomuse-ai-redis:
image: redis:8-alpine
container_name: audiomuse-redis
ports:
- "6379:6379" # Expose Redis port to the host
volumes:
- redis-data:/data # Persistent storage for Redis data
networks:
- audiomuse
restart: unless-stopped
# PostgreSQL database service
audiomuse-ai-postgres:
image: postgres:15-alpine
container_name: audiomuse-postgres
env_file:
- .env
environment:
POSTGRES_USER: ${AUDIOMUSE_POSTGRES_USER}
POSTGRES_PASSWORD: ${AUDIOMUSE_POSTGRES_PASSWORD}
POSTGRES_DB: ${AUDIOMUSE_POSTGRES_DB}
ports:
- "5435:5432" # Expose PostgreSQL port to the host
volumes:
- postgres-data:/var/lib/postgresql/data # Persistent storage for PostgreSQL data
networks:
- audiomuse
restart: unless-stopped
# AudioMuse-AI Flask application service
audiomuse-ai-flask:
image: ghcr.io/neptunehub/audiomuse-ai:0.8.6 # Reflects deployment.yaml
container_name: audiomuse-ai-flask-app
ports:
- "8013:8000"
env_file:
- .env
environment:
SERVICE_TYPE: "flask" # Tells the container to run the Flask app
MEDIASERVER_TYPE: "jellyfin" # Specify the media server type
POSTGRES_USER: ${AUDIOMUSE_POSTGRES_USER}
POSTGRES_PASSWORD: ${AUDIOMUSE_POSTGRES_PASSWORD}
POSTGRES_DB: ${AUDIOMUSE_POSTGRES_DB}
POSTGRES_PORT: "5432"
POSTGRES_HOST: "audiomuse-ai-postgres" # Service name of the postgres container
REDIS_URL: "redis://audiomuse-ai-redis:6379/0" # Connects to the 'redis' service
AI_MODEL_PROVIDER: "OPENAI"
OPENAI_API_KEY: "any-random-string" # Dummy key to enable local model usage
OPENAI_SERVER_URL: "http://172.17.0.1:12434/engines/llama.cpp/v1/chat/completions" #This is the API endpoint for local DMR model from within the Docker container.
OPENAI_MODEL_NAME: "ai/qwen3:0.6B-Q4_0"
TEMP_DIR: "/app/temp_audio"
# Use tmpfs to process audio files in memory for better performance. this reduuces disk I/O but might use more RAM.
# Mounted directories are not shared between containers, so each container gets its own tmpfs instance.
# Increase tmpfs size for very large audio files as needed.
# If host RAM is limited, use a Docker volume instead of tmpfs.
# For more info on tmpfs: https://docs.docker.com/engine/storage/tmpfs/
tmpfs:
- /app/temp_audio:rw,size=1000m
depends_on:
- audiomuse-ai-redis
- audiomuse-ai-postgres
restart: unless-stopped
networks:
- audiomuse
models:
- llm # Specify that LLM models are used in this service
# AudioMuse-AI RQ Worker service
audiomuse-ai-worker:
image: ghcr.io/neptunehub/audiomuse-ai:0.8.6 # Reflects deployment.yaml
container_name: audiomuse-ai-worker-instance
env_file:
- .env
environment:
SERVICE_TYPE: "worker" # Tells the container to run the RQ worker
MEDIASERVER_TYPE: "jellyfin" # Specify the media server type
JELLYFIN_USER_ID: "${JELLYFIN_USER_ID}"
JELLYFIN_TOKEN: "${JELLYFIN_TOKEN}"
JELLYFIN_URL: "${JELLYFIN_URL}"
# DATABASE_URL is now constructed by config.py from the following:
POSTGRES_USER: ${AUDIOMUSE_POSTGRES_USER}
POSTGRES_PASSWORD: ${AUDIOMUSE_POSTGRES_PASSWORD}
POSTGRES_DB: ${AUDIOMUSE_POSTGRES_DB}
POSTGRES_PORT: "5432"
POSTGRES_HOST: "audiomuse-ai-postgres" # Service name of the postgres container
REDIS_URL: "redis://audiomuse-ai-redis:6379/0" # Connects to the 'redis' service
AI_MODEL_PROVIDER: "OPENAI"
OPENAI_API_KEY: "any-random-string" # Dummy key to enable local model usage
OPENAI_SERVER_URL: "http://172.17.0.1:12434/engines/llama.cpp/v1/chat/completions" #This is the API endpoint for local DMR model from within the Docker container.
OPENAI_MODEL_NAME: "ai/qwen3:0.6B-Q4_0"
TEMP_DIR: "/app/temp_audio"
# Use tmpfs to process audio files in memory for better performance. this reduuces disk I/O but might use more RAM.
# Mounted directories are not shared between containers, so each container gets its own tmpfs instance.
# Increase tmpfs size for very large audio files as needed.
# If host RAM is limited, use a Docker volume instead of tmpfs.
# For more info on tmpfs: https://docs.docker.com/engine/storage/tmpfs/
tmpfs:
- /app/temp_audio:rw,size=1000m
depends_on:
- audiomuse-ai-redis
- audiomuse-ai-postgres
restart: unless-stopped
networks:
- audiomuse
models:
- llm # Specify that LLM models are used in this service
# Using Docker Model Runner (DMR)
# - Make sure your Docker Engine version supports the AI features and that the docker-model-plugin is installed.
# - Follow Docker's setup guide: https://docs.docker.com/ai/model-runner/get-started/#docker-engine
# - Once DMR is configured, you can download and run AI models locally just like Docker images — no code changes to this compose file are required.
# - For model integration with docker-compose, see: https://docs.docker.com/ai/compose/models-and-compose/
models:
llm:
model: ai/qwen3:0.6B-Q4_0 # Lightweight local model for testing. Change as needed; if changed, ensure it matches OPENAI_MODEL_NAME.
# Define volumes for persistent data and temporary files
volumes:
redis-data:
postgres-data:
networks:
audiomuse:

View File

@@ -1,2 +0,0 @@
BAIKAL_CONFIG_DIR=
BAIKAL_DATA_DIR=

View File

@@ -1,11 +0,0 @@
services:
baikal:
image: ckulka/baikal:0.10.1-nginx
restart: always
ports:
- "8083:80"
volumes:
- ${BAIKAL_CONFIG_DIR}:/var/www/baikal/config
- ${BAIKAL_DATA_DIR}:/var/www/baikal/Specific
env_file:
- .env

View File

@@ -1,17 +1,17 @@
include: include:
- audiobookshelf/docker-compose.yml - audiobookshelf/docker-compose.yml
- baikal/docker-compose.yml - audiomuse/docker-compose.yml
- gitea/docker-compose.yml - gitea/docker-compose.yml
- immich/docker-compose.yml - immich/docker-compose.yml
- jellyfin/docker-compose.yml - jellyfin/docker-compose.yml
- monitoring/docker-compose.yml
- nextcloud/docker-compose.yml - nextcloud/docker-compose.yml
- paperless/docker-compose.yml - paperless/docker-compose.yml
- pihole/docker-compose.yml - pihole/docker-compose.yml
- pingvin/docker-compose.yml - pingvin/docker-compose.yml
- pocketid/docker-compose.yml - pocketid/docker-compose.yml
- postgres/docker-compose.yml
- spliit/docker-compose.yml - spliit/docker-compose.yml
- shlink/docker-compose.yml - shlink/docker-compose.yml
- synapse/docker-compose.yml - synapse/docker-compose.yml
- updater/docker-compose.yml # - updater/docker-compose.yml
- vaultwarden/docker-compose.yml - vaultwarden/docker-compose.yml

View File

@@ -1,7 +1,7 @@
services: services:
gitea: gitea:
container_name: gitea container_name: gitea
image: gitea/gitea:1.25.1-rootless image: gitea/gitea:1.25.2-rootless
restart: always restart: always
volumes: volumes:
- ${GITEA_DATA_LOCATION}:/var/lib/gitea - ${GITEA_DATA_LOCATION}:/var/lib/gitea
@@ -24,4 +24,4 @@ services:
volumes: volumes:
- ./runner-config.yaml:/config.yaml - ./runner-config.yaml:/config.yaml
- ${GITEA_RUNNER_DATA_LOCATION}:/data - ${GITEA_RUNNER_DATA_LOCATION}:/data
- /var/run/docker.sock:/var/run/docker.sock - /var/run/docker.sock:/var/run/docker.sock

View File

@@ -1,48 +0,0 @@
services:
immich-server:
container_name: immich_server
image: ghcr.io/immich-app/immich-server:v2.2.3
volumes:
- ${UPLOAD_LOCATION}:/data
- /etc/localtime:/etc/localtime:ro
env_file:
- .env
environment:
DB_HOSTNAME: shared-postgres
DB_PORT: 5432
DB_USERNAME: ${IMMICH_POSTGRES_USER}
DB_PASSWORD: ${IMMICH_POSTGRES_PASSWORD}
DB_DATABASE_NAME: ${IMMICH_POSTGRES_DB}
ports:
- '2283:2283'
depends_on:
shared-postgres:
condition: service_healthy
redis:
condition: service_started
restart: always
networks:
- postgres-network
immich-machine-learning:
container_name: immich_machine_learning
image: ghcr.io/immich-app/immich-machine-learning:v2.2.3
volumes:
- model-cache:/cache
env_file:
- .env
restart: always
redis:
container_name: immich_redis
image: docker.io/redis:7.4-alpine@sha256:1bf97f21f01b0e7bd4b7b34a26d3b9d8086e41e70c10f262e8a9e0b49b5116a0
healthcheck:
test: redis-cli ping || exit 1
restart: always
volumes:
model-cache:
networks:
postgres-network:
external: true

View File

@@ -1,7 +1,7 @@
services: services:
immich-server: immich-server:
container_name: immich_server container_name: immich_server
image: ghcr.io/immich-app/immich-server:v2.2.3 image: ghcr.io/immich-app/immich-server:v2.4.1
# extends: # extends:
# file: hwaccel.transcoding.yml # file: hwaccel.transcoding.yml
# service: cpu # set to one of [nvenc, quicksync, rkmpp, vaapi, vaapi-wsl] for accelerated transcoding # service: cpu # set to one of [nvenc, quicksync, rkmpp, vaapi, vaapi-wsl] for accelerated transcoding
@@ -25,7 +25,7 @@ services:
immich-machine-learning: immich-machine-learning:
container_name: immich_machine_learning container_name: immich_machine_learning
image: ghcr.io/immich-app/immich-machine-learning:v2.2.3 image: ghcr.io/immich-app/immich-machine-learning:v2.4.1
volumes: volumes:
- model-cache:/cache - model-cache:/cache
env_file: env_file:
@@ -34,7 +34,7 @@ services:
redis: redis:
container_name: immich_redis container_name: immich_redis
image: docker.io/valkey/valkey:8@sha256:81db6d39e1bba3b3ff32bd3a1b19a6d69690f94a3954ec131277b9a26b95b3aa image: docker.io/valkey/valkey:9@sha256:fb8d272e529ea567b9bf1302245796f21a2672b8368ca3fcb938ac334e613c8f
healthcheck: healthcheck:
test: redis-cli ping || exit 1 test: redis-cli ping || exit 1
restart: always restart: always

View File

@@ -1,6 +1,6 @@
services: services:
jellyfin: jellyfin:
image: jellyfin/jellyfin:10.11.2 image: jellyfin/jellyfin:10.11.6
user: ${JELLYFIN_USER_UID}:${JELLYFIN_USER_GID} user: ${JELLYFIN_USER_UID}:${JELLYFIN_USER_GID}
network_mode: 'host' network_mode: 'host'
restart: always restart: always

27
monitoring/.env.example Normal file
View File

@@ -0,0 +1,27 @@
GRAFANA_ADMIN_USER=
GRAFANA_ADMIN_PASSWORD=
GRAFANA_DOMAIN=
GRAFANA_ROOT_URL=
GRAFANA_DISABLE_LOGIN_FORM=false
GRAFANA_SMTP_ENABLED=true
GRAFANA_SMTP_HOST=
GRAFANA_SMTP_USER=
GRAFANA_SMTP_PASSWORD=
GRAFANA_SMTP_FROM=
GRAFANA_DATA_DIR=
PROMETHEUS_CONFIG_PATH=
PROMETHEUS_DATA_DIR=
BLACKBOX_CONFIG_PATH=
LOKI_CONFIG_PATH=
LOKI_DATA_DIR=
ALLOY_CONFIG_PATH=
GMF_MATRIX_HOMESERVER=
GMF_MATRIX_USER=
GMF_MATRIX_TOKEN=

View File

@@ -0,0 +1,115 @@
services:
# Prometheus - Metrics Collection
prometheus:
image: prom/prometheus:v3.9.1
restart: unless-stopped
ports:
- "9091:9090"
volumes:
- ${PROMETHEUS_CONFIG_PATH}:/etc/prometheus/prometheus.yml:ro
- ${PROMETHEUS_DATA_DIR}:/prometheus
command:
- '--config.file=/etc/prometheus/prometheus.yml'
- '--storage.tsdb.path=/prometheus'
- '--web.console.libraries=/etc/prometheus/console_libraries'
- '--web.console.templates=/etc/prometheus/consoles'
- '--storage.tsdb.retention.time=200h'
- '--web.enable-lifecycle'
- '--web.enable-admin-api'
# Grafana - Visualization Dashboard
grafana:
image: grafana/grafana:12.3.1
restart: unless-stopped
ports:
- "3002:3000"
volumes:
- ${GRAFANA_DATA_DIR}:/var/lib/grafana
environment:
- GF_SECURITY_ADMIN_USER=${GRAFANA_ADMIN_USER}
- GF_SECURITY_ADMIN_PASSWORD=${GRAFANA_ADMIN_PASSWORD}
- GF_USERS_ALLOW_SIGN_UP=false
- GF_SERVER_DOMAIN=${GRAFANA_DOMAIN}
- GF_SERVER_ROOT_URL=${GRAFANA_ROOT_URL}
- GF_AUTH_DISABLE_LOGIN_FORM=${GRAFANA_DISABLE_LOGIN_FORM}
- GF_SMTP_ENABLED=${GRAFANA_SMTP_ENABLED}
- GF_SMTP_HOST=${GRAFANA_SMTP_HOST}
- GF_SMTP_USER=${GRAFANA_SMTP_USER}
- GF_SMTP_PASSWORD=${GRAFANA_SMTP_PASSWORD}
- GF_SMTP_FROM_ADDRESS=${GRAFANA_SMTP_FROM}
depends_on:
- prometheus
loki:
image: grafana/loki:3.6.3
restart: unless-stopped
ports:
- "3100:3100"
volumes:
- ${LOKI_CONFIG_PATH}:/etc/loki/local-config.yaml
- ${LOKI_DATA_DIR}:/loki
command:
- '-config.file=/etc/loki/local-config.yaml'
- '-target=all'
alloy:
image: grafana/alloy:v1.12.2
restart: unless-stopped
ports:
- "12345:12345"
volumes:
- ${ALLOY_CONFIG_PATH}:/etc/alloy/config.alloy:ro
- /var/log:/var/log:ro
# Node Exporter - Host System Metrics
node_exporter:
image: prom/node-exporter:v1.10.2
restart: unless-stopped
ports:
- "9100:9100"
volumes:
- /proc:/host/proc:ro
- /sys:/host/sys:ro
- /:/rootfs:ro
command:
- '--path.procfs=/host/proc'
- '--path.rootfs=/rootfs'
- '--path.sysfs=/host/sys'
- '--collector.filesystem.mount-points-exclude=^/(sys|proc|dev|host|etc)($$|/)'
# cAdvisor - Container Metrics
cadvisor:
image: gcr.io/cadvisor/cadvisor:v0.55.1
restart: unless-stopped
privileged: true
ports:
- "8081:8080"
volumes:
- /:/rootfs:ro
- /var/run:/var/run:ro
- /sys:/sys:ro
- /var/lib/docker/:/var/lib/docker:ro
devices:
- /dev/kmsg
command:
- '--housekeeping_interval=30s'
- '--max_housekeeping_interval=35s'
- '--event_storage_event_limit=default=0'
- '--event_storage_age_limit=default=0'
- '--disable_metrics=disk,diskIO,tcp,udp,percpu,sched,process,hugetlb,referenced_memory'
- '--docker_only=true'
# Blackbox Exporter - Endpoint Monitoring
blackbox_exporter:
image: prom/blackbox-exporter:v0.28.0
restart: unless-stopped
ports:
- "9115:9115"
volumes:
- ${BLACKBOX_CONFIG_PATH}:/etc/blackbox_exporter/config.yml
grafana-matrix-forwarder:
build: ./grafana-matrix-forwarder
restart: unless-stopped
env_file:
- .env

View File

@@ -0,0 +1,9 @@
FROM alpine
# Create main app folder to run from
WORKDIR /app
# Copy compiled binary to release image
COPY grafana-matrix-forwarder /app/grafana-matrix-forwarder
ENTRYPOINT ["/app/grafana-matrix-forwarder"]

Binary file not shown.

View File

@@ -1,12 +1,2 @@
NEXTCLOUD_DOMAIN= NEXTCLOUD_AIO_DIR=
NEXTCLOUD_DATA_DIR= NEXTCLOUD_DATA_DIR=
NEXTCLOUD_POSTGRES_DATA_DIR=
NEXTCLOUD_POSTGRES_DB=
NEXTCLOUD_POSTGRES_USER=
NEXTCLOUD_POSTGRES_PASSWORD=
COLLABORA_DOMAIN=
COLLABORA_USER=
COLLABORA_PASSWORD=

View File

@@ -1,47 +0,0 @@
services:
nextcloud_db:
# Remove this service - using shared-postgres instead
nextcloud:
image: nextcloud:31.0.9
restart: always
ports:
- 8081:80
volumes:
- ${NEXTCLOUD_DATA_DIR}:/var/www/html
environment:
- POSTGRES_HOST=shared-postgres
- POSTGRES_PORT=5432
- POSTGRES_DB=${NEXTCLOUD_POSTGRES_DB}
- POSTGRES_USER=${NEXTCLOUD_POSTGRES_USER}
- POSTGRES_PASSWORD=${NEXTCLOUD_POSTGRES_PASSWORD}
- REDIS_HOST=nextcloud-redis
- REDIS_PORT=6379
- NEXTCLOUD_TRUSTED_DOMAINS=${NEXTCLOUD_DOMAIN}
depends_on:
shared-postgres:
condition: service_healthy
networks:
- nextcloud
- postgres-network
cron:
image: nextcloud:31.0.9
container_name: nextcloud-cron
volumes:
- ${NEXTCLOUD_DATA_DIR}:/var/www/html
entrypoint: /cron.sh
restart: always
networks:
- nextcloud
nextcloud-redis:
image: redis:7
restart: always
networks:
- nextcloud
networks:
nextcloud:
postgres-network:
external: true

View File

@@ -1,50 +1,40 @@
services: services:
nextcloud_db: nextcloud-aio-mastercontainer:
image: docker.io/library/postgres:17 image: ghcr.io/nextcloud-releases/all-in-one:latest # This is the container image used. You can switch to ghcr.io/nextcloud-releases/all-in-one:beta if you want to help testing new releases. See https://github.com/nextcloud/all-in-one#how-to-switch-the-channel
restart: always init: true # This setting makes sure that signals from main process inside the container are correctly forwarded to children. See https://docs.docker.com/reference/compose-file/services/#init
restart: always # This makes sure that the container starts always together with the host OS. See https://docs.docker.com/reference/compose-file/services/#restart
container_name: nextcloud-aio-mastercontainer # This line is not allowed to be changed as otherwise AIO will not work correctly
volumes: volumes:
- ${NEXTCLOUD_POSTGRES_DATA_DIR}:/var/lib/postgresql/data - nextcloud_aio_mastercontainer:/mnt/docker-aio-config # This line is not allowed to be changed as otherwise the built-in backup solution will not work
environment: - /var/run/docker.sock:/var/run/docker.sock:ro # May be changed on macOS, Windows or docker rootless. See the applicable documentation. If adjusting, don't forget to also set 'WATCHTOWER_DOCKER_SOCKET_PATH'!
POSTGRES_DB: ${NEXTCLOUD_POSTGRES_DB} network_mode: bridge
POSTGRES_USER: ${NEXTCLOUD_POSTGRES_USER}
POSTGRES_PASSWORD: ${NEXTCLOUD_POSTGRES_PASSWORD}
ports: ports:
- 5438:5432 - 8014:8080 # This is the AIO interface, served via https and self-signed certificate. See https://github.com/nextcloud/all-in-one#explanation-of-used-ports
networks: environment: # Is needed when using any of the options below
- nextcloud # AIO_DISABLE_BACKUP_SECTION: false # Setting this to true allows to hide the backup section in the AIO interface. See https://github.com/nextcloud/all-in-one#how-to-disable-the-backup-section
nextcloud: APACHE_PORT: 11000 # Is needed when running behind a web server or reverse proxy (like Apache, Nginx, Caddy, Cloudflare Tunnel and else). See https://github.com/nextcloud/all-in-one/blob/main/reverse-proxy.md
image: nextcloud:32.0.1 # APACHE_IP_BINDING: 127.0.0.1 # Should be set when running behind a web server or reverse proxy (like Apache, Nginx, Caddy, Cloudflare Tunnel and else) that is running on the same host. See https://github.com/nextcloud/all-in-one/blob/main/reverse-proxy.md
restart: always # APACHE_ADDITIONAL_NETWORK: frontend_net # (Optional) Connect the apache container to an additional docker network. Needed when behind a web server or reverse proxy (like Apache, Nginx, Caddy, Cloudflare Tunnel and else) running in a different docker network on same server. See https://github.com/nextcloud/all-in-one/blob/main/reverse-proxy.md
ports: # BORG_RETENTION_POLICY: --keep-within=7d --keep-weekly=4 --keep-monthly=6 # Allows to adjust borgs retention policy. See https://github.com/nextcloud/all-in-one#how-to-adjust-borgs-retention-policy
- 8081:80 # COLLABORA_SECCOMP_DISABLED: false # Setting this to true allows to disable Collabora's Seccomp feature. See https://github.com/nextcloud/all-in-one#how-to-disable-collaboras-seccomp-feature
links: # DOCKER_API_VERSION: 1.44 # You can adjust the internally used docker api version with this variable. ⚠️⚠️⚠️ Warning: please note that only the default api version (unset this variable) is supported and tested by the maintainers of Nextcloud AIO. So use this on your own risk and things might break without warning. See https://github.com/nextcloud/all-in-one#how-to-adjust-the-internally-used-docker-api-version
- db # FULLTEXTSEARCH_JAVA_OPTIONS: "-Xms1024M -Xmx1024M" # Allows to adjust the fulltextsearch java options. See https://github.com/nextcloud/all-in-one#how-to-adjust-the-fulltextsearch-java-options
volumes: NEXTCLOUD_DATADIR: ${NEXTCLOUD_DATA_DIR} # Allows to set the host directory for Nextcloud's datadir. ⚠️⚠️⚠️ Warning: do not set or adjust this value after the initial Nextcloud installation is done! See https://github.com/nextcloud/all-in-one#how-to-change-the-default-location-of-nextclouds-datadir
- ${NEXTCLOUD_DATA_DIR}:/var/www/html # NEXTCLOUD_MOUNT: /mnt/ # Allows the Nextcloud container to access the chosen directory on the host. See https://github.com/nextcloud/all-in-one#how-to-allow-the-nextcloud-container-to-access-directories-on-the-host
environment: # NEXTCLOUD_UPLOAD_LIMIT: 16G # Can be adjusted if you need more. See https://github.com/nextcloud/all-in-one#how-to-adjust-the-upload-limit-for-nextcloud
- POSTGRES_HOST=nextcloud_db # NEXTCLOUD_MAX_TIME: 3600 # Can be adjusted if you need more. See https://github.com/nextcloud/all-in-one#how-to-adjust-the-max-execution-time-for-nextcloud
- POSTGRES_DB=${NEXTCLOUD_POSTGRES_DB} # NEXTCLOUD_MEMORY_LIMIT: 512M # Can be adjusted if you need more. See https://github.com/nextcloud/all-in-one#how-to-adjust-the-php-memory-limit-for-nextcloud
- POSTGRES_USER=${NEXTCLOUD_POSTGRES_USER} # NEXTCLOUD_TRUSTED_CACERTS_DIR: /path/to/my/cacerts # CA certificates in this directory will be trusted by the OS of the nextcloud container (Useful e.g. for LDAPS) See https://github.com/nextcloud/all-in-one#how-to-trust-user-defined-certification-authorities-ca
- POSTGRES_PASSWORD=${NEXTCLOUD_POSTGRES_PASSWORD} # NEXTCLOUD_STARTUP_APPS: deck twofactor_totp tasks calendar contacts notes # Allows to modify the Nextcloud apps that are installed on starting AIO the first time. See https://github.com/nextcloud/all-in-one#how-to-change-the-nextcloud-apps-that-are-installed-on-the-first-startup
- REDIS_HOST=nextcloud-redis # NEXTCLOUD_ADDITIONAL_APKS: imagemagick # This allows to add additional packages to the Nextcloud container permanently. Default is imagemagick but can be overwritten by modifying this value. See https://github.com/nextcloud/all-in-one#how-to-add-os-packages-permanently-to-the-nextcloud-container
- REDIS_PORT=6379 # NEXTCLOUD_ADDITIONAL_PHP_EXTENSIONS: imagick # This allows to add additional php extensions to the Nextcloud container permanently. Default is imagick but can be overwritten by modifying this value. See https://github.com/nextcloud/all-in-one#how-to-add-php-extensions-permanently-to-the-nextcloud-container
- NEXTCLOUD_TRUSTED_DOMAINS=${NEXTCLOUD_DOMAIN} # NEXTCLOUD_ENABLE_DRI_DEVICE: true # This allows to enable the /dev/dri device for containers that profit from it. ⚠️⚠️⚠️ Warning: this only works if the '/dev/dri' device is present on the host! If it should not exist on your host, don't set this to true as otherwise the Nextcloud container will fail to start! See https://github.com/nextcloud/all-in-one#how-to-enable-hardware-acceleration-for-nextcloud
networks: # NEXTCLOUD_ENABLE_NVIDIA_GPU: true # This allows to enable the NVIDIA runtime and GPU access for containers that profit from it. ⚠️⚠️⚠️ Warning: this only works if an NVIDIA gpu is installed on the server. See https://github.com/nextcloud/all-in-one#how-to-enable-hardware-acceleration-for-nextcloud.
- nextcloud # NEXTCLOUD_KEEP_DISABLED_APPS: false # Setting this to true will keep Nextcloud apps that are disabled in the AIO interface and not uninstall them if they should be installed. See https://github.com/nextcloud/all-in-one#how-to-keep-disabled-apps
cron: # SKIP_DOMAIN_VALIDATION: false # This should only be set to true if things are correctly configured. See https://github.com/nextcloud/all-in-one#how-to-skip-the-domain-validation
image: nextcloud:32.0.1 # TALK_PORT: 3478 # This allows to adjust the port that the talk container is using which is exposed on the host. See https://github.com/nextcloud/all-in-one#how-to-adjust-the-talk-port
container_name: nextcloud-cron
volumes:
- ${NEXTCLOUD_DATA_DIR}:/var/www/html
entrypoint: /cron.sh
restart: always
networks:
- nextcloud
nextcloud-redis:
image: redis:7
restart: always
networks:
- nextcloud
networks:
nextcloud: volumes: # If you want to store the data on a different drive, see https://github.com/nextcloud/all-in-one#how-to-store-the-filesinstallation-on-a-separate-drive
nextcloud_aio_mastercontainer:
name: nextcloud_aio_mastercontainer # This line is not allowed to be changed as otherwise the built-in backup solution will not work

View File

@@ -1,54 +0,0 @@
services:
broker:
image: docker.io/library/redis:7
restart: always
volumes:
- ${PAPERLESS_REDIS_DATA_DIR}:/data
paperless:
image: ghcr.io/paperless-ngx/paperless-ngx:2.18.4
restart: always
depends_on:
shared-postgres:
condition: service_healthy
broker:
condition: service_started
gotenberg:
condition: service_started
tika:
condition: service_started
ports:
- "8070:8000"
volumes:
- ${PAPERLESS_DATA_DIR}:/usr/src/paperless/data
- ${PAPERLESS_MEDIA_DIR}:/usr/src/paperless/media
- ${PAPERLESS_EXPORT_DIR}/export:/usr/src/paperless/export
- ${PAPERLESS_CONSUME_DIR}:/usr/src/paperless/consume
env_file: .env
environment:
PAPERLESS_REDIS: redis://broker:6379
PAPERLESS_DBHOST: shared-postgres
PAPERLESS_DBPORT: 5432
PAPERLESS_DBNAME: ${PAPERLESS_POSTGRES_DB}
PAPERLESS_DBUSER: ${PAPERLESS_POSTGRES_USER}
PAPERLESS_DBPASS: ${PAPERLESS_POSTGRES_PASSWORD}
PAPERLESS_TIKA_ENABLED: 1
PAPERLESS_TIKA_GOTENBERG_ENDPOINT: http://gotenberg:3000
PAPERLESS_TIKA_ENDPOINT: http://tika:9998
PAPERLESS_APPS: "allauth.socialaccount.providers.openid_connect"
USE_X_FORWARD_HOST: true
USE_X_FORWARDED_PORT: true
PAPERLESS_DISABLE_REGULAR_LOGIN: true
PAPERLESS_REDIRECT_LOGIN_TO_SSO: true
networks:
- postgres-network
gotenberg:
# ... existing gotenberg configuration ...
tika:
# ... existing tika configuration ...
networks:
postgres-network:
external: true

View File

@@ -6,7 +6,7 @@ services:
- ${PAPERLESS_REDIS_DATA_DIR}:/data - ${PAPERLESS_REDIS_DATA_DIR}:/data
db: db:
image: docker.io/library/postgres:17 image: docker.io/library/postgres:18
restart: always restart: always
volumes: volumes:
- ${PAPERLESS_POSTGRES_DATA_DIR}:/var/lib/postgresql/data - ${PAPERLESS_POSTGRES_DATA_DIR}:/var/lib/postgresql/data
@@ -18,7 +18,7 @@ services:
- 5434:5432 - 5434:5432
paperless: paperless:
image: ghcr.io/paperless-ngx/paperless-ngx:2.19.4 image: ghcr.io/paperless-ngx/paperless-ngx:2.20.4
restart: always restart: always
depends_on: depends_on:
- db - db
@@ -49,7 +49,7 @@ services:
PAPERLESS_REDIRECT_LOGIN_TO_SSO: true PAPERLESS_REDIRECT_LOGIN_TO_SSO: true
gotenberg: gotenberg:
image: docker.io/gotenberg/gotenberg:8.24.0 image: docker.io/gotenberg/gotenberg:8.25.1
restart: always restart: always
# The gotenberg chromium route is used to convert .eml files. We do not # The gotenberg chromium route is used to convert .eml files. We do not

View File

@@ -2,7 +2,7 @@
services: services:
pihole: pihole:
container_name: pihole container_name: pihole
image: pihole/pihole:2025.11.0 image: pihole/pihole:2025.11.1
ports: ports:
# DNS Ports # DNS Ports
- "53:53/tcp" - "53:53/tcp"

View File

@@ -3,3 +3,5 @@ TRUST_PROXY=
MAXMIND_LICENSE_KEY= MAXMIND_LICENSE_KEY=
PUID= PUID=
PGID= PGID=
ENCRYPTION_KEY=
POCKETID_DATA_DIR=

View File

@@ -1,17 +1,16 @@
services: services:
pocket-id: pocket-id:
image: ghcr.io/pocket-id/pocket-id:v1.15.0 image: ghcr.io/pocket-id/pocket-id:v2.2.0
restart: always restart: always
env_file: .env env_file: .env
ports: ports:
- "3043:1411" - "3043:1411"
volumes: volumes:
#TODO change this to a more appropriate location - ${POCKETID_DATA_DIR}:/app/data
- ./data:/app/data
# Optional healthcheck # Optional healthcheck
healthcheck: healthcheck:
test: "curl -f http://localhost:1411/healthz" test: "curl -f http://localhost:1411/healthz"
interval: 1m30s interval: 1m30s
timeout: 5s timeout: 5s
retries: 2 retries: 2
start_period: 10s start_period: 10s

View File

@@ -1,2 +0,0 @@
SHARED_DB_PASSWORD=
SHARED_DB_DATA_DIR=

View File

@@ -1,35 +0,0 @@
services:
shared-postgres:
image: ghcr.io/immich-app/postgres:14-vectorchord0.3.0-pgvectors0.2.0
container_name: shared-postgres
restart: always
env_file:
# Env files for all services using this shared database
- ../spliit/.env
- ../shlink/.env
- ../immich/.env
- ../nextcloud/.env
- ../paperless/.env
- ../synapse/.env
environment:
POSTGRES_USER: postgres
POSTGRES_PASSWORD: ${SHARED_DB_PASSWORD}
POSTGRES_DB: postgres
POSTGRES_INITDB_ARGS: '--encoding=UTF-8 --locale=C --data-checksums'
volumes:
- ${SHARED_DB_DATA_DIR}:/var/lib/postgresql/data
- ./init-scripts:/docker-entrypoint-initdb.d:ro
ports:
- "5431:5432"
healthcheck:
test: ["CMD-SHELL", "pg_isready -U postgres"]
interval: 10s
timeout: 5s
retries: 5
networks:
- postgres-network
networks:
postgres-network:
name: postgres-network
driver: bridge

View File

@@ -1,73 +0,0 @@
#!/bin/bash
set -e
# This script initializes all databases and users for the homelab services
# It runs automatically when the PostgreSQL container starts for the first time
echo "Creating databases and users for homelab services..."
# Function to create database and user with restricted permissions
create_db_and_user() {
local db_name=$1
local db_user=$2
local db_password=$3
echo "Creating database: $db_name with user: $db_user"
psql -v ON_ERROR_STOP=1 --username "$POSTGRES_USER" --dbname "$POSTGRES_DB" <<-EOSQL
-- Create database
CREATE DATABASE "$db_name";
-- Create user with password
CREATE USER "$db_user" WITH ENCRYPTED PASSWORD '$db_password';
-- Grant connection to the specific database only
GRANT CONNECT ON DATABASE "$db_name" TO "$db_user";
-- Make user owner of the database
ALTER DATABASE "$db_name" OWNER TO "$db_user";
-- Connect to the specific database to set schema permissions
\c "$db_name"
-- Grant schema permissions
GRANT ALL ON SCHEMA public TO "$db_user";
GRANT ALL PRIVILEGES ON ALL TABLES IN SCHEMA public TO "$db_user";
GRANT ALL PRIVILEGES ON ALL SEQUENCES IN SCHEMA public TO "$db_user";
GRANT ALL PRIVILEGES ON ALL FUNCTIONS IN SCHEMA public TO "$db_user";
-- Set default privileges for future objects
ALTER DEFAULT PRIVILEGES IN SCHEMA public GRANT ALL ON TABLES TO "$db_user";
ALTER DEFAULT PRIVILEGES IN SCHEMA public GRANT ALL ON SEQUENCES TO "$db_user";
ALTER DEFAULT PRIVILEGES IN SCHEMA public GRANT ALL ON FUNCTIONS TO "$db_user";
-- Switch back to postgres database
\c postgres
EOSQL
}
# Create databases for each service
# Using environment variables that will be set in your .env file
# Spliit
create_db_and_user "${SPLIIT_POSTGRES_DB}" "${SPLIIT_POSTGRES_USER}" "${SPLIIT_POSTGRES_PASSWORD}"
# Shlink
create_db_and_user "${SHLINK_POSTGRES_DB}" "${SHLINK_POSTGRES_USER}" "${SHLINK_POSTGRES_PASSWORD}"
# Immich
create_db_and_user "${IMMICH_POSTGRES_DB}" "${IMMICH_POSTGRES_USER}" "${IMMICH_POSTGRES_PASSWORD}"
# Nextcloud
create_db_and_user "${NEXTCLOUD_POSTGRES_DB}" "${NEXTCLOUD_POSTGRES_USER}" "${NEXTCLOUD_POSTGRES_PASSWORD}"
# Paperless
create_db_and_user "${PAPERLESS_POSTGRES_DB}" "${PAPERLESS_POSTGRES_USER}" "${PAPERLESS_POSTGRES_PASSWORD}"
# Matrix and co
create_db_and_user "${SYNAPSE_POSTGRES_DB}" "${SYNAPSE_POSTGRES_USER}" "${SYNAPSE_POSTGRES_PASSWORD}"
create_db_and_user "${MAS_POSTGRES_DB}" "${MAS_POSTGRES_USER}" "${MAS_POSTGRES_PASSWORD}"
create_db_and_user "${MAUTRIX_SIGNAL_POSTGRES_DB}" "${MAUTRIX_SIGNAL_POSTGRES_USER}" "${MAUTRIX_SIGNAL_POSTGRES_PASSWORD}"
create_db_and_user "${MAUTRIX_WHATSAPP_POSTGRES_DB}" "${MAUTRIX_WHATSAPP_POSTGRES_USER}" "${MAUTRIX_WHATSAPP_POSTGRES_PASSWORD}"
echo "Database initialization completed successfully!"

View File

@@ -1,35 +0,0 @@
#!/bin/bash
set -e
# Enable vector extensions for Immich database
echo "Enabling vector extensions for Immich database..."
psql -v ON_ERROR_STOP=1 --username "$POSTGRES_USER" --dbname "${IMMICH_POSTGRES_DB}" <<-EOSQL
-- Create extensions as superuser
CREATE EXTENSION IF NOT EXISTS vectors;
CREATE EXTENSION IF NOT EXISTS earthdistance CASCADE;
-- Grant usage on the extension schemas to immich user
GRANT USAGE ON SCHEMA vectors TO ${IMMICH_POSTGRES_USER};
GRANT USAGE ON SCHEMA earthdistance TO ${IMMICH_POSTGRES_USER};
-- Grant all privileges on extension objects to immich user
GRANT ALL PRIVILEGES ON ALL TABLES IN SCHEMA vectors TO ${IMMICH_POSTGRES_USER};
GRANT ALL PRIVILEGES ON ALL SEQUENCES IN SCHEMA vectors TO ${IMMICH_POSTGRES_USER};
GRANT ALL PRIVILEGES ON ALL FUNCTIONS IN SCHEMA vectors TO ${IMMICH_POSTGRES_USER};
GRANT ALL PRIVILEGES ON ALL TABLES IN SCHEMA earthdistance TO ${IMMICH_POSTGRES_USER};
GRANT ALL PRIVILEGES ON ALL SEQUENCES IN SCHEMA earthdistance TO ${IMMICH_POSTGRES_USER};
GRANT ALL PRIVILEGES ON ALL FUNCTIONS IN SCHEMA earthdistance TO ${IMMICH_POSTGRES_USER};
-- Set default privileges for future extension objects
ALTER DEFAULT PRIVILEGES IN SCHEMA vectors GRANT ALL ON TABLES TO ${IMMICH_POSTGRES_USER};
ALTER DEFAULT PRIVILEGES IN SCHEMA vectors GRANT ALL ON SEQUENCES TO ${IMMICH_POSTGRES_USER};
ALTER DEFAULT PRIVILEGES IN SCHEMA vectors GRANT ALL ON FUNCTIONS TO ${IMMICH_POSTGRES_USER};
ALTER DEFAULT PRIVILEGES IN SCHEMA earthdistance GRANT ALL ON TABLES TO ${IMMICH_POSTGRES_USER};
ALTER DEFAULT PRIVILEGES IN SCHEMA earthdistance GRANT ALL ON SEQUENCES TO ${IMMICH_POSTGRES_USER};
ALTER DEFAULT PRIVILEGES IN SCHEMA earthdistance GRANT ALL ON FUNCTIONS TO ${IMMICH_POSTGRES_USER};
EOSQL
echo "Immich vector extensions enabled successfully!"

View File

@@ -23,7 +23,9 @@
"matrixdotorg/synapse", "matrixdotorg/synapse",
"ghcr.io/element-hq/matrix-authentication-service", "ghcr.io/element-hq/matrix-authentication-service",
"dock.mau.dev/mautrix/whatsapp", "dock.mau.dev/mautrix/whatsapp",
"dock.mau.dev/mautrix/signal" "dock.mau.dev/mautrix/signal",
"ghcr.io/element-hq/lk-jwt-service",
"livekit/livekit-server"
] ]
} }
] ]

View File

@@ -1,27 +0,0 @@
services:
shlink:
image: shlinkio/shlink:4.6
container_name: shlink
restart: always
ports:
- "8085:8080"
environment:
DEFAULT_DOMAIN: ${SHLINK_DOMAIN}
IS_HTTPS_ENABLED: ${SHLINK_IS_HTTPS_ENABLED}
GEOLITE_LICENSE_KEY: ${SHLINK_GEOIP_LICENSE_KEY}
INITIAL_API_KEY: ${SHLINK_API_KEY}
DB_DRIVER: postgres
DB_HOST: shared-postgres
DB_PORT: 5432
DB_NAME: ${SHLINK_POSTGRES_DB}
DB_USER: ${SHLINK_POSTGRES_USER}
DB_PASSWORD: ${SHLINK_POSTGRES_PASSWORD}
depends_on:
shared-postgres:
condition: service_healthy
networks:
- postgres-network
networks:
postgres-network:
external: true

View File

@@ -1,6 +1,6 @@
services: services:
shlink: shlink:
image: shlinkio/shlink:4.6 image: shlinkio/shlink:5.0
container_name: shlink container_name: shlink
restart: always restart: always
ports: ports:

View File

@@ -1,24 +0,0 @@
services:
spliit:
image: ghcr.io/spliit-app/spliit:1.19.0
restart: always
ports:
- 3001:3000
depends_on:
shared-postgres:
condition: service_healthy
env_file:
- .env
environment:
TZ: ${TZ}
POSTGRES_HOST: shared-postgres
POSTGRES_PORT: 5432
POSTGRES_DB: ${SPLIIT_POSTGRES_DB}
POSTGRES_USER: ${SPLIIT_POSTGRES_USER}
POSTGRES_PASSWORD: ${SPLIIT_POSTGRES_PASSWORD}
networks:
- postgres-network
networks:
postgres-network:
external: true

View File

@@ -1,6 +1,7 @@
services: services:
spliit: spliit:
image: ghcr.io/spliit-app/spliit:1.19.0 #image: ghcr.io/spliit-app/spliit:1.19.1
image: petersmit27/spliit:latest
restart: always restart: always
ports: ports:
- 3001:3000 - 3001:3000

View File

@@ -1,105 +0,0 @@
services:
element-call-auth-service:
image: ghcr.io/element-hq/lk-jwt-service:0.3.0
container_name: element-call-jwt
hostname: auth-server
environment:
- LK_JWT_PORT=8080
- LIVEKIT_URL=https://${LIVEKIT_DOMAIN}/livekit/sfu
- LIVEKIT_KEY=devkey
- LIVEKIT_SECRET=${LIVEKIT_SECRET_KEY}
- LIVEKIT_FULL_ACCESS_HOMESERVERS=${MATRIX_DOMAIN}
restart: always
ports:
- 8071:8080
element-call-livekit:
image: livekit/livekit-server:v1.9.4
command: --config /etc/livekit.yaml
ports:
- "7880:7880/tcp"
- "7881:7881/tcp"
- "7882:7882/tcp"
- "50100-50200:50100-50200/udp"
restart: always
volumes:
- ${LIVEKIT_CONFIG_DIR}/config.yaml:/etc/livekit.yaml:ro
mautrix-signal:
container_name: mautrix-signal
image: dock.mau.dev/mautrix/signal:v0.2510.0
restart: always
volumes:
- ${MAUTRIX_SIGNAL_DATA_DIR}:/data
depends_on:
shared-postgres:
condition: service_healthy
environment:
# Configure database connection for mautrix-signal
MAUTRIX_SIGNAL_DATABASE_TYPE: postgres
MAUTRIX_SIGNAL_DATABASE_URI: postgresql://${MAUTRIX_SIGNAL_POSTGRES_USER}:${MAUTRIX_SIGNAL_POSTGRES_PASSWORD}@shared-postgres:5432/${MAUTRIX_SIGNAL_POSTGRES_DB}?sslmode=disable
networks:
- postgres-network
mautrix-whatsapp:
container_name: mautrix-whatsapp
image: dock.mau.dev/mautrix/whatsapp:v0.2510.0
restart: always
volumes:
- ${MAUTRIX_WHATSAPP_DATA_DIR}:/data
depends_on:
shared-postgres:
condition: service_healthy
environment:
# Configure database connection for mautrix-whatsapp
MAUTRIX_WHATSAPP_DATABASE_TYPE: postgres
MAUTRIX_WHATSAPP_DATABASE_URI: postgresql://${MAUTRIX_WHATSAPP_POSTGRES_USER}:${MAUTRIX_WHATSAPP_POSTGRES_PASSWORD}@shared-postgres:5432/${MAUTRIX_WHATSAPP_POSTGRES_DB}?sslmode=disable
networks:
- postgres-network
mas:
image: ghcr.io/element-hq/matrix-authentication-service:1.6.0
restart: always
working_dir: /config
volumes:
- ${MAS_CONFIG_DIR}:/config
environment:
MAS_CONFIG: /config/config.yaml
# Database connection will be configured in the MAS config file
MAS_DATABASE_URL: postgresql://${MAS_POSTGRES_USER}:${MAS_POSTGRES_PASSWORD}@shared-postgres:5432/${MAS_POSTGRES_DB}?sslmode=disable
ports:
- "8090:8090"
depends_on:
shared-postgres:
condition: service_healthy
networks:
- postgres-network
synapse:
container_name: synapse
image: matrixdotorg/synapse:v1.142.0
restart: always
volumes:
- ${SYNAPSE_CONFIG_DIR}:/data
ports:
- "8008:8008"
environment:
# Synapse database connection will be configured in homeserver.yaml
SYNAPSE_DATABASE_HOST: shared-postgres
SYNAPSE_DATABASE_PORT: 5432
SYNAPSE_DATABASE_USER: ${SYNAPSE_POSTGRES_USER}
SYNAPSE_DATABASE_PASSWORD: ${SYNAPSE_POSTGRES_PASSWORD}
SYNAPSE_DATABASE_NAME: ${SYNAPSE_POSTGRES_DB}
depends_on:
shared-postgres:
condition: service_healthy
mas:
condition: service_started
mautrix-whatsapp:
condition: service_started
networks:
- postgres-network
networks:
postgres-network:
external: true

View File

@@ -1,6 +1,6 @@
services: services:
element-call-auth-service: element-call-auth-service:
image: ghcr.io/element-hq/lk-jwt-service:0.3.0 image: ghcr.io/element-hq/lk-jwt-service:0.4.1
container_name: element-call-jwt container_name: element-call-jwt
hostname: auth-server hostname: auth-server
environment: environment:
@@ -13,7 +13,7 @@ services:
ports: ports:
- 8071:8080 - 8071:8080
element-call-livekit: element-call-livekit:
image: livekit/livekit-server:v1.9.4 image: livekit/livekit-server:v1.9.11
command: --config /etc/livekit.yaml command: --config /etc/livekit.yaml
ports: ports:
- "7880:7880/tcp" - "7880:7880/tcp"
@@ -25,12 +25,12 @@ services:
- ${LIVEKIT_CONFIG_DIR}/config.yaml:/etc/livekit.yaml:ro - ${LIVEKIT_CONFIG_DIR}/config.yaml:/etc/livekit.yaml:ro
mautrix-signal: mautrix-signal:
container_name: mautrix-signal container_name: mautrix-signal
image: dock.mau.dev/mautrix/signal:v0.2510.0 image: dock.mau.dev/mautrix/signal:v0.2601.0
restart: always restart: always
volumes: volumes:
- ${MAUTRIX_SIGNAL_DATA_DIR}:/data - ${MAUTRIX_SIGNAL_DATA_DIR}:/data
mautrix-signal_db: mautrix-signal_db:
image: docker.io/library/postgres:17 image: docker.io/library/postgres:18
restart: always restart: always
volumes: volumes:
- ${MAUTRIX_SIGNAL_POSTGRES_DATA_DIR}:/var/lib/postgresql/data - ${MAUTRIX_SIGNAL_POSTGRES_DATA_DIR}:/var/lib/postgresql/data
@@ -42,7 +42,7 @@ services:
- 5439:5432 - 5439:5432
mautrix-whatsapp: mautrix-whatsapp:
container_name: mautrix-whatsapp container_name: mautrix-whatsapp
image: dock.mau.dev/mautrix/whatsapp:v0.2510.0 image: dock.mau.dev/mautrix/whatsapp:v0.2601.0
#image: petersmit27/mautrix-whatsapp:latest #image: petersmit27/mautrix-whatsapp:latest
restart: always restart: always
volumes: volumes:
@@ -50,7 +50,7 @@ services:
depends_on: depends_on:
- mautrix-whatsapp_db - mautrix-whatsapp_db
mautrix-whatsapp_db: mautrix-whatsapp_db:
image: docker.io/library/postgres:17 image: docker.io/library/postgres:18
restart: always restart: always
volumes: volumes:
- ${MAUTRIX_WHATSAPP_POSTGRES_DATA_DIR}:/var/lib/postgresql/data - ${MAUTRIX_WHATSAPP_POSTGRES_DATA_DIR}:/var/lib/postgresql/data
@@ -61,7 +61,7 @@ services:
ports: ports:
- 5440:5432 - 5440:5432
mas: mas:
image: ghcr.io/element-hq/matrix-authentication-service:1.6.0 image: ghcr.io/element-hq/matrix-authentication-service:1.9.0
restart: always restart: always
working_dir: /config working_dir: /config
volumes: volumes:
@@ -73,7 +73,7 @@ services:
depends_on: depends_on:
- mas_db - mas_db
mas_db: mas_db:
image: docker.io/library/postgres:17 image: docker.io/library/postgres:18
restart: always restart: always
volumes: volumes:
- ${MAS_POSTGRES_DATA_DIR}:/var/lib/postgresql/data - ${MAS_POSTGRES_DATA_DIR}:/var/lib/postgresql/data
@@ -84,7 +84,7 @@ services:
ports: ports:
- 5441:5432 - 5441:5432
synapse_db: synapse_db:
image: docker.io/library/postgres:17 image: docker.io/library/postgres:18
restart: always restart: always
volumes: volumes:
- ${SYNAPSE_POSTGRES_DATA_DIR}:/var/lib/postgresql/data - ${SYNAPSE_POSTGRES_DATA_DIR}:/var/lib/postgresql/data
@@ -97,7 +97,7 @@ services:
- 5442:5432 - 5442:5432
synapse: synapse:
container_name: synapse container_name: synapse
image: matrixdotorg/synapse:v1.142.0 image: matrixdotorg/synapse:v1.145.0
restart: always restart: always
volumes: volumes:
- ${SYNAPSE_CONFIG_DIR}:/data - ${SYNAPSE_CONFIG_DIR}:/data
@@ -107,3 +107,10 @@ services:
- synapse_db - synapse_db
- mas - mas
- mautrix-whatsapp - mautrix-whatsapp
element-admin:
image: oci.element.io/element-admin:0.1.10
restart: unless-stopped
ports:
- "8079:8080"
environment:
- SERVER_NAME=${MATRIX_DOMAIN}

View File

@@ -1,5 +1,5 @@
# Use the official PHP image with Apache # Use the official PHP image with Apache
FROM php:8.4-apache FROM php:8.5-apache
# Add Docker's official GPG key: # Add Docker's official GPG key:
RUN apt-get update &&\ RUN apt-get update &&\
@@ -16,7 +16,7 @@ RUN echo \
# Install git and docker-compose # Install git and docker-compose
RUN apt-get update && \ RUN apt-get update && \
apt-get install -y git docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin && \ apt-get install -y git docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin docker-model-plugin && \
rm -rf /var/lib/apt/lists/* rm -rf /var/lib/apt/lists/*
# Create .docker directory and set permissions # Create .docker directory and set permissions

View File

@@ -1,7 +1,7 @@
services: services:
vaultwarden: vaultwarden:
container_name: vaultwarden container_name: vaultwarden
image: vaultwarden/server:1.34.3 image: vaultwarden/server:1.35.2
restart: always restart: always
volumes: volumes:
- ${VAULTWARDEN_DATA_LOCATION}:/data/ - ${VAULTWARDEN_DATA_LOCATION}:/data/