Initial commit of Docker files

This commit is contained in:
2025-08-18 00:26:57 +12:00
commit 05297cf246
29 changed files with 2517 additions and 0 deletions

271
compose/utility-stack.yml Executable file
View File

@@ -0,0 +1,271 @@
# Utility Services - Dashboard, file management, sync, etc.
services:
# ===== DASHBOARD & MONITORING =====
homepage:
image: ghcr.io/gethomepage/homepage:latest
container_name: homepage
profiles: ["utilities", "all"]
volumes:
- ./Homepage/config/images:/app/public/images
- ./Homepage/config/icons:/app/public/icons
- ./Homepage/config:/app/config
ports:
- "7575:3000"
environment:
- PUID=${PUID}
- PGID=${PGID}
- TZ=${TZ}
- HOMEPAGE_ALLOWED_HOSTS=${HOMEPAGE_ALLOWED_HOSTS}
restart: unless-stopped
depends_on:
- dockerproxy
dockerproxy:
image: ghcr.io/tecnativa/docker-socket-proxy:latest
container_name: dockerproxy
profiles: ["utilities", "all"]
environment:
- CONTAINERS=${DOCKER_PROXY_CONTAINERS}
- SERVICES=${DOCKER_PROXY_SERVICES}
- TASKS=${DOCKER_PROXY_TASKS}
- POST=${DOCKER_PROXY_POST}
ports:
- "127.0.0.1:2375:2375"
volumes:
- /var/run/docker.sock:/var/run/docker.sock:ro
restart: unless-stopped
security_opt:
- no-new-privileges:true
# ===== FILE MANAGEMENT =====
filebrowser:
image: hurlenko/filebrowser:latest
container_name: filebrowser
profiles: ["utilities", "all"]
user: "${PUID}:${PGID}"
ports:
- "6633:8080"
volumes:
- ./filebrowser/data:/data
- ./filebrowser/config:/config
- /home/jamie:/data/home
- ${DATA_ROOT}:/data/media
environment:
- FB_BASEURL=/filebrowser
restart: unless-stopped
healthcheck:
test: ["CMD", "wget", "--no-verbose", "--tries=1", "--spider", "http://localhost:8080/health"]
interval: 30s
timeout: 10s
retries: 3
# ===== SYNCHRONIZATION =====
syncthing:
image: syncthing/syncthing:latest
container_name: syncthing
hostname: syncthing
profiles: ["utilities", "all"]
environment:
- PUID=${PUID}
- PGID=${PGID}
- TZ=${TZ}
volumes:
- ${DOCKER_CONFIG_ROOT}/syncthing:/var/syncthing
- ${DOCKER_CONFIG_ROOT}/obsidian/vaults:/var/syncthing/obsidian
ports:
- "8384:8384" # Web UI
- "22000:22000/tcp" # TCP file transfers
- "22000:22000/udp" # QUIC file transfers
- "21027:21027/udp" # Receive local discovery broadcasts
restart: unless-stopped
healthcheck:
test: ["CMD", "curl", "-f", "http://localhost:8384/rest/system/ping"]
interval: 30s
timeout: 10s
retries: 3
# ===== PRODUCTIVITY =====
obsidian:
image: ghcr.io/sytone/obsidian-remote:latest
container_name: obsidian-remote
profiles: ["utilities", "all"]
restart: unless-stopped
ports:
- "8181:8080"
- "8443:8443"
volumes:
- ${DOCKER_CONFIG_ROOT}/obsidian/vaults:/vaults
- ${DOCKER_CONFIG_ROOT}/obsidian/config:/config
environment:
- PUID=${PUID}
- PGID=${PGID}
- TZ=${TZ}
- DOCKER_MODS=linuxserver/mods:universal-git
depends_on:
- syncthing
stirling-pdf:
container_name: stirling-pdf
image: docker.stirlingpdf.com/stirlingtools/stirling-pdf:latest
profiles: ["utilities", "all"]
deploy:
resources:
limits:
memory: 4G
healthcheck:
test: ["CMD-SHELL", "curl -f http://localhost:8080/api/v1/info/status | grep -q 'UP' && curl -fL http://localhost:8080/ | grep -qv 'Please sign in'"]
interval: 30s
timeout: 10s
retries: 5
ports:
- "8090:8080"
volumes:
- ./stirling/latest/data:/usr/share/tessdata:rw
- ./stirling/latest/config:/configs:rw
- ./stirling/latest/logs:/logs:rw
environment:
- DISABLE_ADDITIONAL_FEATURES=true
- SECURITY_ENABLELOGIN=false
- LANGS=en_GB,en_US,ar_AR,de_DE,fr_FR,es_ES,zh_CN,zh_TW,ca_CA,it_IT,sv_SE,pl_PL,ro_RO,ko_KR,pt_BR,ru_RU,el_GR,hi_IN,hu_HU,tr_TR,id_ID
- SYSTEM_DEFAULTLOCALE=en-US
- UI_APPNAME=Stirling-PDF
- UI_HOMEDESCRIPTION=Stirling-PDF
- UI_APPNAMENAVBAR=Stirling-PDF
- SYSTEM_MAXFILESIZE=100
- METRICS_ENABLED=true
- SYSTEM_GOOGLEVISIBILITY=true
- SHOW_SURVEY=true
restart: unless-stopped
# ===== REMOTE ACCESS =====
hbbr:
container_name: hbbr
image: rustdesk/rustdesk-server:latest
profiles: ["remote", "all"]
command: hbbr
environment:
- PUID=${PUID}
- PGID=${PGID}
volumes:
- ${DOCKER_CONFIG_ROOT}/rustdesk/data:/root
network_mode: "host"
restart: unless-stopped
hbbs:
container_name: hbbs
image: rustdesk/rustdesk-server:latest
profiles: ["remote", "all"]
command: hbbs
environment:
- PUID=${PUID}
- PGID=${PGID}
volumes:
- ${DOCKER_CONFIG_ROOT}/rustdesk/data:/root
network_mode: "host"
depends_on:
- hbbr
restart: unless-stopped
# ===== GENEALOGY =====
grampsweb:
container_name: gramps
image: ghcr.io/gramps-project/grampsweb:latest
profiles: ["genealogy", "all"]
restart: unless-stopped
ports:
- "5511:5000"
environment:
- GRAMPSWEB_TREE=Gramps Web
- GRAMPSWEB_CELERY_CONFIG__broker_url=redis://grampsweb_redis:6379/0
- GRAMPSWEB_CELERY_CONFIG__result_backend=redis://grampsweb_redis:6379/0
- GRAMPSWEB_RATELIMIT_STORAGE_URI=redis://grampsweb_redis:6379/1
depends_on:
- grampsweb_redis
volumes:
- ${DOCKER_CONFIG_ROOT}/gramps/gramps_users:/app/users
- ${DOCKER_CONFIG_ROOT}/gramps/gramps_index:/app/indexdir
- ${DOCKER_CONFIG_ROOT}/gramps/gramps_thumb_cache:/app/thumbnail_cache
- ${DOCKER_CONFIG_ROOT}/gramps/gramps_cache:/app/cache
- ${DOCKER_CONFIG_ROOT}/gramps/gramps_secret:/app/secret
- ${DOCKER_CONFIG_ROOT}/gramps/gramps_db:/root/.gramps/grampsdb
- ${DOCKER_CONFIG_ROOT}/gramps/gramps_media:/app/media
- ${DOCKER_CONFIG_ROOT}/gramps/gramps_tmp:/tmp
grampsweb_celery:
container_name: grampsweb_celery
image: ghcr.io/gramps-project/grampsweb:latest
profiles: ["genealogy", "all"]
restart: unless-stopped
environment:
- GRAMPSWEB_TREE=Gramps Web
- GRAMPSWEB_CELERY_CONFIG__broker_url=redis://grampsweb_redis:6379/0
- GRAMPSWEB_CELERY_CONFIG__result_backend=redis://grampsweb_redis:6379/0
- GRAMPSWEB_RATELIMIT_STORAGE_URI=redis://grampsweb_redis:6379/1
depends_on:
- grampsweb_redis
volumes:
- ${DOCKER_CONFIG_ROOT}/gramps/gramps_users:/app/users
- ${DOCKER_CONFIG_ROOT}/gramps/gramps_index:/app/indexdir
- ${DOCKER_CONFIG_ROOT}/gramps/gramps_thumb_cache:/app/thumbnail_cache
- ${DOCKER_CONFIG_ROOT}/gramps/gramps_cache:/app/cache
- ${DOCKER_CONFIG_ROOT}/gramps/gramps_secret:/app/secret
- ${DOCKER_CONFIG_ROOT}/gramps/gramps_db:/root/.gramps/grampsdb
- ${DOCKER_CONFIG_ROOT}/gramps/gramps_media:/app/media
- ${DOCKER_CONFIG_ROOT}/gramps/gramps_tmp:/tmp
command: celery -A gramps_webapi.celery worker --loglevel=INFO --concurrency=2
grampsweb_redis:
image: redis:7.2.4-alpine
container_name: grampsweb_redis
profiles: ["genealogy", "all"]
restart: unless-stopped
volumes:
- grampsweb_redis_data:/data
healthcheck:
test: ["CMD", "redis-cli", "ping"]
interval: 30s
timeout: 10s
retries: 3
# ===== API SERVICES =====
racknerd-api-converter:
build: ./racknerd-converter
container_name: racknerd-api-converter
profiles: ["utilities", "all"]
ports:
- "5000:5000"
environment:
- RACKNERD_API_KEY=${RACKNERD_API_KEY}
- RACKNERD_API_HASH=${RACKNERD_API_HASH}
- RACKNERD_VSERVER_ID=${RACKNERD_VSERVER_ID}
- RACKNERD_BASE_URL=${RACKNERD_BASE_URL}
- UPDATE_INTERVAL=${RACKNERD_UPDATE_INTERVAL}
- HOST=0.0.0.0
- PORT=5000
restart: unless-stopped
healthcheck:
test: ["CMD", "curl", "-f", "http://localhost:5000/health"]
interval: 30s
timeout: 10s
retries: 3
start_period: 40s
logging:
driver: json-file
options:
max-size: "10m"
max-file: "3"
# ===== MISC SERVICES =====
newt:
image: fosrl/newt:latest
container_name: newt
profiles: ["utilities", "all"]
restart: unless-stopped
environment:
- PANGOLIN_ENDPOINT=${PANGOLIN_URL}
- NEWT_ID=${NEWT_ID}
- NEWT_SECRET=${NEWT_SECRET}
volumes:
grampsweb_redis_data:
driver: local