Files
TSYSDevStack/SupportStack/demo/docker-compose.yml
TSYSDevStack Team 534c486aea fix: resolve health check issues and update service configurations
- Fix MailHog health check: replace --no-verbose with -q and --tries with BusyBox-compatible options
- Fix InfluxDB health check: replace wget with curl (wget not available in container)
- Fix Pi-hole health check: replace wget with curl and remove user directive (requires root)
- Update Docker image versions with specific stable tags:
  * InfluxDB: 2.7.10
  * Wakapi: v2.7.1
  * ArchiveBox: v0.7.3
  * TubeArchivist: v0.5.8 (correct repository bbilly1/tubearchivist)
- Update README.md service table with correct ports and IP addresses
- Add MailHog configuration variables to demo.env
- Update demo-stack.sh status display to include Wakapi and MailHog URLs
- All services now showing as healthy in Homepage dashboard
2025-11-14 00:49:39 -05:00

450 lines
14 KiB
YAML

---
# =============================================================================
# This template uses environment variables for dynamic configuration
# Generate docker-compose.yml with: envsubst < docker-compose.yml.template > docker-compose.yml
# =============================================================================
services:
# =============================================================================
# INFRASTRUCTURE SERVICES
# =============================================================================
homepage:
image: ghcr.io/gethomepage/homepage:v0.9.13
user: "1000:1000"
container_name: "tsysdevstack-supportstack-demo-homepage"
restart: unless-stopped
networks:
- tsysdevstack-supportstack-demo-network
volumes:
- "tsysdevstack-supportstack-demo_homepage_config:/app/config"
- "tsysdevstack-supportstack-demo_homepage_images:/app/public/images"
ports:
- "4000:3000"
environment:
- PUID=1000
- PGID=1000
- TZ=UTC
- ADMIN_USERNAME=admin
- ADMIN_PASSWORD=admin
labels:
com.docker.compose.project: "tsysdevstack-supportstack-demo"
docker-socket-proxy:
image: tecnativa/docker-socket-proxy:0.3.0
container_name: "tsysdevstack-supportstack-demo-docker-socket-proxy"
group_add:
- "996"
restart: unless-stopped
networks:
- tsysdevstack-supportstack-demo-network
volumes:
- /var/run/docker.sock:/var/run/docker.sock:ro
environment:
- CONTAINERS=1
- POST=0
- PUT=0
- DELETE=0
- BUILD=0
- COMMIT=0
- CONFIGS=0
- EXEC=0
- IMAGES=1
- INFO=1
- NETWORKS=1
- PLUGINS=1
- SECRETS=0
- SERVICES=1
- SESSION=1
- SWARM=0
- SYSTEM=1
- TASKS=1
- VOLUMES=1
labels:
com.docker.compose.project: "tsysdevstack-supportstack-demo"
pihole:
image: pihole/pihole:2024.07.0
container_name: "tsysdevstack-supportstack-demo-pihole"
restart: unless-stopped
networks:
- tsysdevstack-supportstack-demo-network
volumes:
- "tsysdevstack-supportstack-demo_pihole_etc:/etc/pihole"
- "tsysdevstack-supportstack-demo_pihole_dnsmasq:/etc/dnsmasq.d"
ports:
- "4006:80"
- "53:53/tcp"
- "53:53/udp"
- "67:67/udp"
environment:
- PUID=1000
- PGID=1000
- TZ=UTC
- WEBPASSWORD=demo_password
- PIHOLE_DNS_=1.1.1.1;1.0.0.1;8.8.8.8
- WEBTHEME=light-darker
healthcheck:
test: ["CMD", "curl", "-f", "http://localhost:80/admin"]
interval: 30s
timeout: 10s
retries: 3
start_period: 40s
labels:
homepage.group: "Infrastructure"
homepage.name: "Pi-hole"
homepage.icon: "pihole.png"
homepage.href: "http://192.168.3.6:4006/admin"
homepage.description: "DNS-based ad blocking and network monitoring"
portainer:
image: portainer/portainer-ce:2.21.4
user: "1000:1000"
container_name: "tsysdevstack-supportstack-demo-portainer"
restart: unless-stopped
networks:
- tsysdevstack-supportstack-demo-network
volumes:
- "tsysdevstack-supportstack-demo_portainer_data:/data"
- /var/run/docker.sock:/var/run/docker.sock:ro
ports:
- "4007:9000"
environment:
- PUID=1000
- PGID=1000
labels:
homepage.group: "Infrastructure"
homepage.name: "Portainer"
homepage.icon: "portainer.png"
homepage.href: "http://192.168.3.6:4007"
homepage.description: "Web-based Docker container management"
# =============================================================================
# MONITORING & OBSERVABILITY
# =============================================================================
influxdb:
image: influxdb:2.7.10
container_name: "tsysdevstack-supportstack-demo-influxdb"
restart: unless-stopped
networks:
- tsysdevstack-supportstack-demo-network
volumes:
- "tsysdevstack-supportstack-demo_influxdb_data:/var/lib/influxdb"
ports:
- "4008:8086"
environment:
- DOCKER_INFLUXDB_INIT_MODE=setup
- DOCKER_INFLUXDB_INIT_USERNAME=demo_user
- DOCKER_INFLUXDB_INIT_PASSWORD=demo_password
- DOCKER_INFLUXDB_INIT_ORG=demo_org
- DOCKER_INFLUXDB_INIT_BUCKET=demo_bucket
- DOCKER_INFLUXDB_INIT_ADMIN_TOKEN=demo_token
- DOCKER_INFLUXDB_INIT_ADMIN_TOKEN=demo_token
healthcheck:
test: ["CMD", "curl", "-f", "http://localhost:8086/health"]
interval: 30s
timeout: 10s
retries: 3
start_period: 40s
labels:
homepage.group: "Monitoring"
homepage.name: "InfluxDB"
homepage.icon: "influxdb.png"
homepage.href: "http://192.168.3.6:4008"
homepage.description: "Time series database for metrics"
grafana:
image: grafana/grafana:10.4.2
user: "1000:1000"
container_name: "tsysdevstack-supportstack-demo-grafana"
restart: unless-stopped
networks:
- tsysdevstack-supportstack-demo-network
volumes:
- "tsysdevstack-supportstack-demo_grafana_data:/var/lib/grafana"
ports:
- "4009:3000"
environment:
- GF_SECURITY_ADMIN_USER=admin
- GF_SECURITY_ADMIN_PASSWORD=demo_password
- GF_INSTALL_PLUGINS=grafana-clock-panel,grafana-simple-json-datasource
- GF_INSTALL_PLUGINS=grafana-influxdb-flux-datasource
labels:
homepage.group: "Monitoring"
homepage.name: "Grafana"
homepage.icon: "grafana.png"
homepage.href: "http://192.168.3.6:4009"
homepage.description: "Analytics and visualization platform"
# =============================================================================
# DOCUMENTATION & DIAGRAMMING
# =============================================================================
drawio:
image: jgraph/drawio:24.7.17
user: "1000:1000"
container_name: "tsysdevstack-supportstack-demo-drawio"
restart: unless-stopped
networks:
- tsysdevstack-supportstack-demo-network
ports:
- "4010:8080"
environment:
- PUID=1000
- PGID=1000
labels:
homepage.group: "Documentation"
homepage.name: "Draw.io"
homepage.icon: "drawio.png"
homepage.href: "http://192.168.3.6:4010"
homepage.description: "Web-based diagramming application"
kroki:
image: yuzutech/kroki:0.25.0
user: "1000:1000"
container_name: "tsysdevstack-supportstack-demo-kroki"
restart: unless-stopped
networks:
- tsysdevstack-supportstack-demo-network
ports:
- "4011:8000"
environment:
- KROKI_SAFE_MODE=secure
healthcheck:
test: ["CMD", "curl", "-f", "http://localhost:8000/health"]
interval: 30s
timeout: 10s
retries: 3
start_period: 40s
labels:
homepage.group: "Documentation"
homepage.name: "Kroki"
homepage.icon: "kroki.png"
homepage.href: "http://192.168.3.6:4011"
homepage.description: "Diagrams as a service"
# =============================================================================
# DEVELOPER TOOLS
# =============================================================================
atomic-tracker:
image: ghcr.io/majorpeter/atomic-tracker:v1.2.0
user: "1000:1000"
container_name: "tsysdevstack-supportstack-demo-atomic-tracker"
restart: unless-stopped
networks:
- tsysdevstack-supportstack-demo-network
volumes:
- "tsysdevstack-supportstack-demo_atomic_tracker_config:/config"
ports:
- "4012:8080"
environment:
- CONFIG_DIR=/config
- LISTENING_PORT=8080
- BYPASS_LOGIN=1
- USE_DUMMY_DATA=1
labels:
homepage.group: "Developer Tools"
homepage.name: "Atomic Tracker"
homepage.icon: "atomic-tracker.png"
homepage.href: "http://192.168.3.6:4012"
homepage.description: "Habit tracking and personal dashboard"
wakapi:
image: ghcr.io/muety/wakapi:v2.7.1
user: "1000:1000"
container_name: "tsysdevstack-supportstack-demo-wakapi"
restart: unless-stopped
networks:
- tsysdevstack-supportstack-demo-network
volumes:
- "tsysdevstack-supportstack-demo_wakapi_data:/data"
ports:
- "4015:3000"
environment:
- WAKAPI_DB_TYPE=sqlite3
- WAKAPI_DB_PATH=/data/wakapi.db
- WAKAPI_PASSWORD_SALT=demo_salt_only
- WAKAPI_INSECURE_COOKIES=true
- WAKAPI_ENVIRONMENT=production
healthcheck:
test: ["CMD", "wget", "--no-verbose", "--tries=1", "--spider", "http://localhost:3000/api/health"]
interval: 30s
timeout: 10s
retries: 3
start_period: 40s
labels:
homepage.group: "Developer Tools"
homepage.name: "Wakapi"
homepage.icon: "wakapi.png"
homepage.href: "http://192.168.3.6:4015"
homepage.description: "Open-source WakaTime alternative for time tracking"
mailhog:
image: mailhog/mailhog:v1.0.0
container_name: "tsysdevstack-supportstack-demo-mailhog"
restart: unless-stopped
networks:
- tsysdevstack-supportstack-demo-network
ports:
- "4016:1025"
- "4017:8025"
environment:
- PUID=1000
- PGID=1000
- MH_SMTP_BIND_ADDR=0.0.0.0:1025
- MH_UI_BIND_ADDR=0.0.0.0:8025
- MH_STORAGE=memory
healthcheck:
test: ["CMD", "wget", "-q", "-s", "http://localhost:8025"]
interval: 30s
timeout: 10s
retries: 3
start_period: 40s
labels:
homepage.group: "Developer Tools"
homepage.name: "MailHog"
homepage.icon: "mailhog.png"
homepage.href: "http://192.168.3.6:4017"
homepage.description: "Web and API based SMTP testing tool"
# =============================================================================
# ARCHIVAL & CONTENT MANAGEMENT
# =============================================================================
archivebox:
image: archivebox/archivebox:v0.7.3
container_name: "tsysdevstack-supportstack-demo-archivebox"
restart: unless-stopped
networks:
- tsysdevstack-supportstack-demo-network
volumes:
- "tsysdevstack-supportstack-demo_archivebox_data:/data"
ports:
- "4013:8000"
environment:
- PUID=1000
- PGID=1000
- TZ=UTC
labels:
homepage.group: "Archival"
homepage.name: "ArchiveBox"
homepage.icon: "archivebox.png"
homepage.href: "http://192.168.3.6:4013"
homepage.description: "Self-hosted internet archiving solution"
tube-archivist:
image: bbilly1/tubearchivist:v0.5.8
container_name: "tsysdevstack-supportstack-demo-tube-archivist"
restart: unless-stopped
networks:
- tsysdevstack-supportstack-demo-network
volumes:
- "tsysdevstack-supportstack-demo_tube_archivist_media:/youtube"
- "tsysdevstack-supportstack-demo_tube_archivist_data:/cache"
ports:
- "4014:8000"
environment:
- PUID=1000
- PGID=1000
- TZ=UTC
- ELASTICSEARCH_URL=http://elasticsearch:9200
- REDIS_URL=redis://redis:6379
- TA_USERNAME=tubearchivist
- TA_PASSWORD=tubearchivist
- TA_HOST=http://192.168.3.6:4014
- ELASTIC_PASSWORD=changeme
- TA_ENABLE_AUTH_PROXY=false
- HOST_UID=1000
- HOST_GID=1000
depends_on:
- elasticsearch
- redis
labels:
homepage.group: "Archival"
homepage.name: "Tube Archivist"
homepage.icon: "tube-archivist.png"
homepage.href: "http://192.168.3.6:4014"
homepage.description: "YouTube media archiving and management"
elasticsearch:
image: docker.elastic.co/elasticsearch/elasticsearch:8.11.0
user: "1000:1000"
container_name: "tsysdevstack-supportstack-demo-elasticsearch"
restart: unless-stopped
networks:
- tsysdevstack-supportstack-demo-network
volumes:
- "tsysdevstack-supportstack-demo_elasticsearch_data:/usr/share/elasticsearch/data"
environment:
- PUID=1000
- PGID=1000
- discovery.type=single-node
- xpack.security.enabled=false
- "ES_JAVA_OPTS=-Xms512m -Xmx512m"
- ELASTIC_PASSWORD=changeme
labels:
com.docker.compose.project: "tsysdevstack-supportstack-demo"
redis:
image: redis:7.2-alpine
user: "1000:1000"
container_name: "tsysdevstack-supportstack-demo-redis"
restart: unless-stopped
networks:
- tsysdevstack-supportstack-demo-network
volumes:
- "tsysdevstack-supportstack-demo_redis_data:/data"
environment:
- PUID=1000
- PGID=1000
labels:
com.docker.compose.project: "tsysdevstack-supportstack-demo"
# =============================================================================
# NETWORKS
# =============================================================================
networks:
tsysdevstack-supportstack-demo-network:
driver: bridge
name: tsysdevstack-supportstack-demo-network
# =============================================================================
# VOLUMES
# =============================================================================
volumes:
tsysdevstack-supportstack-demo_homepage_config:
driver: local
tsysdevstack-supportstack-demo_homepage_images:
driver: local
tsysdevstack-supportstack-demo_pihole_etc:
driver: local
tsysdevstack-supportstack-demo_pihole_dnsmasq:
driver: local
tsysdevstack-supportstack-demo_portainer_data:
driver: local
tsysdevstack-supportstack-demo_influxdb_data:
driver: local
tsysdevstack-supportstack-demo_grafana_data:
driver: local
tsysdevstack-supportstack-demo_atomic_tracker_config:
driver: local
tsysdevstack-supportstack-demo_wakapi_data:
driver: local
tsysdevstack-supportstack-demo_mailhog_data:
driver: local
tsysdevstack-supportstack-demo_archivebox_data:
driver: local
tsysdevstack-supportstack-demo_tube_archivist_media:
driver: local
tsysdevstack-supportstack-demo_tube_archivist_data:
driver: local
tsysdevstack-supportstack-demo_elasticsearch_data:
driver: local
tsysdevstack-supportstack-demo_redis_data:
driver: local