⚙️ Services — Core Homelab Megastack
Host: Homelab · Compose:
Homelab/Docker/services/compose.yaml
Stack name:services[!NOTE] Update Available: Updates for this stack are pending in:
renovate/docker-dependencies,renovate/major-docker-dependencies.
1. Overview
The largest compose file in the homelab. This is the main services megastack containing general-purpose applications: a homepage dashboard, document management, automation, databases, monitoring tools, developer tools, and various utilities. All services share common external Docker networks and are routed through Traefik or Cloudflare Tunnel.
2. Architecture & Services
| Service | Image | Port | Role |
|---|---|---|---|
code-server |
ghcr.io/linuxserver/code-server:4.137.0 |
8443 |
Browser-based VS Code IDE |
dad_magicmirror |
karsten13/magicmirror:v2.37.0 |
— | MagicMirror display for Dad |
database |
mariadb:11.8.9 |
3306 |
— |
database_mysql |
mysql:5.7 |
3307 |
Legacy MySQL 5.7 instance |
epicgames-freegames |
charlocharlie/epicgames-freegames:c64d897b9ca8113ea4933ff18d86a3b0f726827a |
— | Auto-claim Epic Games free games |
ftp |
delfer/alpine-ftp-server:latest@sha256:60bb774d8408d9d4d5c74d05d1c086a34ce192c6c1a142ffac268cac0dbc6fac |
21, 21000-21010 |
FTP server for Paperless intake |
gatus |
twinproduction/gatus:v5.36.0 |
8081 |
Service health monitoring dashboard |
gatus_db |
11notes/postgres:17@sha256:6860d92d13eabd73703220ebc9ee401c12922d4eb7715e70adf3b2041768a486 |
— | PostgreSQL for Gatus |
grafana |
grafana/grafana:13.2.2 |
— | Metrics visualisation (OAuth via Authentik) |
granna_magicmirror |
karsten13/magicmirror:v2.37.0 |
— | MagicMirror display for Granna |
guacd |
guacamole/guacd:latest@sha256:2d266a525a72ad55d8ea7cd4ca8342a1b44075759b03660d8684821b3636a922 |
4822 |
Apache Guacamole daemon (for Termix) |
hass_db |
11notes/postgres:17@sha256:6860d92d13eabd73703220ebc9ee401c12922d4eb7715e70adf3b2041768a486 |
5431 |
PostgreSQL for Home Assistant |
homehub |
ghcr.io/surajverma/homehub:0.2.3.4 |
5372 |
Home management hub |
homepage |
ghcr.io/gethomepage/homepage:v1.13.2 |
3022 |
Primary homelab dashboard |
influxdb_peanut |
influxdb:2.9.1 |
— | InfluxDB for UPS metrics |
it-tools |
ghcr.io/corentinth/it-tools:2024.10.22-7ca5933 |
8075 |
Online IT tools collection |
meilisearch |
getmeili/meilisearch:v1.53.2 |
7700 |
Full-text search engine |
n8n |
n8nio/n8n:2.40.3 |
5678 |
Workflow automation |
node-red |
nodered/node-red:4.1.15-20 |
1880 |
Visual flow programming |
omni-tools |
iib0011/omni-tools:0.6.0 |
38080 |
All-in-one web tools |
open-webui |
ghcr.io/open-webui/open-webui:latest@sha256:1a6399d237dc392a2313e0ca826020b3fd5d22536357840eb63393d18dc8b924 |
— | AI chat UI (Ollama frontend) |
paperless-ng |
ghcr.io/paperless-ngx/paperless-ngx:3.1.3 |
8839 |
Document management system |
peanut |
brandawg93/peanut:6.0.0 |
28080 |
UPS monitoring dashboard |
pgadmin |
dpage/pgadmin4:9.18.0 |
— | PostgreSQL admin UI (OAuth via Authentik) |
postgres |
postgres:17 |
5432 |
General-purpose PostgreSQL |
pulse |
rcourtman/pulse:6.4.2 |
7655 |
Proxmox monitoring dashboard |
recipes |
vabene1111/recipes:2.6.15 |
8181 |
Recipe manager (Mealie alternative) |
recipes_db |
11notes/postgres:17@sha256:6860d92d13eabd73703220ebc9ee401c12922d4eb7715e70adf3b2041768a486 |
— | PostgreSQL for Recipes |
redis |
redis:6.2 |
6379 |
General-purpose Redis cache |
remmina |
lscr.io/linuxserver/remmina:1.4.35dfsg-0ubuntu5.1-ls165 |
— | Remote desktop client (browser-based) |
scrutiny |
ghcr.io/analogj/scrutiny:master-web@sha256:192656ce791dc3e5bda7f7bf81cd3cb9f77ab2cde42a9bd0d8cac442b7e8bee1 |
8180 |
SMART disk health monitoring |
simple-dash |
busybox:1.38.0 |
34566 |
Minimal HTTP static file server (homelab dash) |
speedtest_db |
11notes/postgres:17@sha256:6860d92d13eabd73703220ebc9ee401c12922d4eb7715e70adf3b2041768a486 |
— | PostgreSQL for Speedtest Tracker |
speedtest-tracker |
lscr.io/linuxserver/speedtest-tracker:1.15.0 |
8448, 8870 |
Scheduled internet speed tests |
stirling-pdf |
frooodle/s-pdf:2.14.3 |
8085 |
PDF manipulation tools |
termix |
ghcr.io/lukegus/termix:release-2.7.1 |
— | Web-based terminal / remote desktop (Guacamole-based) |
whatsupdocker |
getwud/wud:8.4.0 |
3000 |
— |
3. Networking
backend— —cloudflare-net— —database— —gatus-net— —internal— —servers— —termix-net— —traefik— —
4. Persistent Storage
| Container | Host Path / Volume | Description |
|---|---|---||
| code-server | /docker | — |
| code-server | /docker/services/code/config | VS Code settings and extensions |
| dad_magicmirror | /docker/data/services/magicmirror/dad/config | — |
| dad_magicmirror | /docker/data/services/magicmirror/dad/images | — |
| dad_magicmirror | /docker/data/services/magicmirror/shared/css | — |
| dad_magicmirror | /docker/data/services/magicmirror/shared/modules | — |
| database | /docker/services/mariadb | MariaDB data |
| database_mysql | /docker/services/mysql | — |
| epicgames-freegames | /docker/services/epicgames/config/ | — |
| ftp | /docker/services/paperless-ng/consume | — |
| gatus | /docker/data/services/gatus | — |
| gatus_db | /backup/database/services/gatus | — |
| gatus_db | gatus.postgres.etc | — |
| gatus_db | gatus.postgres.var | — |
| grafana | /docker/services/grafana | Grafana dashboards and datasources |
| granna_magicmirror | /docker/data/services/magicmirror/granna/config | — |
| granna_magicmirror | /docker/data/services/magicmirror/granna/images | — |
| granna_magicmirror | /docker/data/services/magicmirror/shared/css | — |
| granna_magicmirror | /docker/data/services/magicmirror/shared/modules | — |
| hass_db | /backup/database/services/hass | — |
| hass_db | hass.postgres.etc | — |
| hass_db | hass.postgres.var | — |
| homehub | /docker/data/services/homehub/config.yml | — |
| homehub | /docker/data/services/homehub/data | — |
| homehub | /docker/data/services/homehub/media | — |
| homehub | /docker/data/services/homehub/pdfs | — |
| homehub | /docker/data/services/homehub/uploads | — |
| homepage | /Storage | — |
| homepage | /docker/services/homepage/homepage-conf | Homepage config (YAML) |
| homepage | /docker/services/homepage/icons/ | — |
| homepage | /docker/services/homepage/images/ | — |
| homepage | /var/run/docker.sock | — |
| influxdb_peanut | /docker/services/penut/influxdb | — |
| meilisearch | /docker/services/meilisearch | Search index |
| n8n | /docker/services/n8n | Workflows and credentials |
| node-red | /docker/services/nodered/data | Flow definitions |
| open-webui | open-webui | — |
| paperless-ng | /docker/services/paperless-ng/consume | — |
| paperless-ng | /docker/services/paperless-ng/data | — |
| paperless-ng | /docker/services/paperless-ng/export | — |
| paperless-ng | /docker/services/paperless-ng/media | — |
| peanut | /docker/services/penut/config | — |
| pgadmin | /docker/gui/obsidian/files | — |
| pgadmin | pgadmin-data | — |
| postgres | /docker/services/database/postgres | Main PostgreSQL data |
| pulse | /docker/data/services/pulse | — |
| recipes | /docker/data/services/recipes/mediafiles | — |
| recipes | /docker/data/services/recipes/staticfiles | — |
| recipes_db | /backup/database/services/recipes | — |
| recipes_db | recipes.postgres.etc | — |
| recipes_db | recipes.postgres.var | — |
| remmina | /docker/data/services/remmina/config | — |
| scrutiny | /docker/services/scrutiny/config | Disk health history |
| simple-dash | /docker/data/services/dash | — |
| speedtest_db | /backup/database/services/speedtest | — |
| speedtest_db | speedtest.postgres.etc | — |
| speedtest_db | speedtest.postgres.var | — |
| speedtest-tracker | /docker/services/speedtest-tracker/config | Speed test history |
| speedtest-tracker | /docker/services/speedtest-tracker/ssl-keys | — |
| stirling-pdf | /docker/stirling/extraConfigs | — |
| stirling-pdf | /docker/stirling/trainingData | — |
| termix | /docker/data/services/termix | — |
| whatsupdocker | /var/run/docker.sock | — |
5. Environment Variables
| Variable | Service | Description |
|---|---|---|
PGID |
code-server |
— |
PROXY_DOMAIN |
code-server |
— |
PUID |
code-server |
— |
TZ |
code-server |
— |
MYSQL_DATABASE |
database |
— |
MYSQL_PASSWORD |
database |
— |
MYSQL_ROOT_PASSWORD |
database |
— |
MYSQL_USER |
database |
— |
MYSQL_ROOT_PASSWORD |
database_mysql |
— |
TZ |
epicgames-freegames |
— |
ADDRESS |
ftp |
— |
USERS |
ftp |
— |
POSTGRES_BACKUP_RETENTION |
gatus_db |
— |
POSTGRES_BACKUP_SCHEDULE |
gatus_db |
— |
POSTGRES_PASSWORD |
gatus_db |
— |
TZ |
gatus_db |
— |
GF_AUTH_GENERIC_OAUTH_API_URL |
grafana |
— |
GF_AUTH_GENERIC_OAUTH_AUTH_URL |
grafana |
— |
GF_AUTH_GENERIC_OAUTH_CLIENT_ID |
grafana |
— |
GF_AUTH_GENERIC_OAUTH_CLIENT_SECRET |
grafana |
— |
GF_AUTH_GENERIC_OAUTH_ENABLED |
grafana |
— |
GF_AUTH_GENERIC_OAUTH_NAME |
grafana |
— |
GF_AUTH_GENERIC_OAUTH_SCOPES |
grafana |
— |
GF_AUTH_GENERIC_OAUTH_SKIP_ORG_ROLE_SYNC |
grafana |
— |
GF_AUTH_GENERIC_OAUTH_TOKEN_URL |
grafana |
— |
GF_AUTH_OAUTH_AUTO_LOGIN |
grafana |
— |
GF_AUTH_SIGNOUT_REDIRECT_URL |
grafana |
— |
GF_SERVER_ROOT_URL |
grafana |
— |
POSTGRES_BACKUP_RETENTION |
hass_db |
— |
POSTGRES_BACKUP_SCHEDULE |
hass_db |
— |
POSTGRES_PASSWORD |
hass_db |
— |
TZ |
hass_db |
— |
FLASK_ENV |
homehub |
— |
SECRET_KEY |
homehub |
Flask secret key |
HOMEPAGE_ALLOWED_HOSTS |
homepage |
— |
HOMEPAGE_PROXY_DISABLE_IPV6 |
homepage |
— |
DOCKER_INFLUXDB_INIT_ADMIN_TOKEN |
influxdb_peanut |
— |
DOCKER_INFLUXDB_INIT_BUCKET |
influxdb_peanut |
— |
DOCKER_INFLUXDB_INIT_MODE |
influxdb_peanut |
— |
DOCKER_INFLUXDB_INIT_ORG |
influxdb_peanut |
— |
DOCKER_INFLUXDB_INIT_PASSWORD |
influxdb_peanut |
— |
DOCKER_INFLUXDB_INIT_USERNAME |
influxdb_peanut |
— |
MEILI_MASTER_KEY |
meilisearch |
Search engine admin key |
GENERIC_TIMEZONE |
n8n |
— |
N8N_HOST |
n8n |
— |
N8N_PORT |
n8n |
— |
N8N_PROTOCOL |
n8n |
— |
NODE_ENV |
n8n |
— |
WEBHOOK_URL |
n8n |
— |
TZ |
node-red |
— |
PAPERLESS_REDIS |
paperless-ng |
— |
PAPERLESS_TIME_ZONE |
paperless-ng |
— |
PAPERLESS_URL |
paperless-ng |
— |
AUTH_DISABLED |
peanut |
— |
INFLUX_BUCKET |
peanut |
— |
INFLUX_HOST |
peanut |
— |
INFLUX_INTERVAL |
peanut |
— |
INFLUX_ORG |
peanut |
— |
INFLUX_TOKEN |
peanut |
— |
WEB_PORT |
peanut |
— |
PGADMIN_CONFIG_AUTHENTICATION_SOURCES |
pgadmin |
— |
PGADMIN_CONFIG_MASTER_PASSWORD_HOOK |
pgadmin |
— |
PGADMIN_CONFIG_MASTER_PASSWORD_REQUIRED |
pgadmin |
— |
PGADMIN_CONFIG_OAUTH2_AUTO_CREATE_USER |
pgadmin |
— |
PGADMIN_CONFIG_OAUTH2_CONFIG |
pgadmin |
— |
PGADMIN_DEFAULT_EMAIL |
pgadmin |
— |
PGADMIN_DEFAULT_PASSWORD |
pgadmin |
— |
POSTGRES_DB |
postgres |
— |
POSTGRES_PASSWORD |
postgres |
— |
POSTGRES_USER |
postgres |
— |
TZ |
pulse |
— |
POSTGRES_BACKUP_RETENTION |
recipes_db |
— |
POSTGRES_BACKUP_SCHEDULE |
recipes_db |
— |
POSTGRES_PASSWORD |
recipes_db |
— |
TZ |
recipes_db |
— |
AUDIO |
remmina |
— |
PGID |
remmina |
— |
PUID |
remmina |
— |
TZ |
remmina |
— |
SCRUTINY_WEB_INFLUXDB_HOST |
scrutiny |
— |
POSTGRES_BACKUP_RETENTION |
speedtest_db |
— |
POSTGRES_BACKUP_SCHEDULE |
speedtest_db |
— |
POSTGRES_PASSWORD |
speedtest_db |
— |
TZ |
speedtest_db |
— |
APP_KEY |
speedtest-tracker |
— |
APP_URL |
speedtest-tracker |
— |
DB_CONNECTION |
speedtest-tracker |
— |
DB_DATABASE |
speedtest-tracker |
— |
DB_HOST |
speedtest-tracker |
— |
DB_PASSWORD |
speedtest-tracker |
— |
DB_PORT |
speedtest-tracker |
— |
DB_USERNAME |
speedtest-tracker |
— |
DISPLAY_TIMEZONE |
speedtest-tracker |
— |
PGID |
speedtest-tracker |
— |
PUID |
speedtest-tracker |
— |
SPEEDTEST_SCHEDULE |
speedtest-tracker |
— |
DOCKER_ENABLE_SECURITY |
stirling-pdf |
— |
INSTALL_BOOK_AND_ADVANCED_HTML_OPS |
stirling-pdf |
— |
LANGS |
stirling-pdf |
— |
PORT |
termix |
— |
6. Access & Usage
| Service | URL |
|---|---|
| Homepage | https://home-lab.micky.id.au or https://lab.m1ckyb.com |
| Gatus | https://gatus.home-lab.micky.id.au |
| Grafana | https://grafana.m1ckyb.com |
| Code Server | https://code.home-lab.micky.id.au |
| Paperless | https://paperless.home-lab.micky.id.au |
| N8N | https://n8n.m1ckyb.com |
| Speedtest | https://speedtest.home-lab.micky.id.au |
| Scrutiny | https://scrutiny.home-lab.micky.id.au |
| IT Tools | https://tools.home-lab.micky.id.au |
| Pulse (Proxmox) | https://pulse.home-lab.micky.id.au |
# Start
docker compose -f Homelab/Docker/services/compose.yaml up -d
# Check specific service
docker compose -f Homelab/Docker/services/compose.yaml logs -f grafana
7. Maintenance & Backup
# Update
docker compose -f Homelab/Docker/services/compose.yaml pull
docker compose -f Homelab/Docker/services/compose.yaml up -d
# Backup (use backup=services label to identify containers)
rsync -av /docker/services/ /backup/services/
# Database backups (gatus, hass, recipes, speedtest run auto-backups every 2h)
ls /backup/database/services/