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
This commit is contained in:
@@ -79,31 +79,34 @@ All configuration is managed through `demo.env` and dynamic detection:
|
||||
### 🛠️ Developer Tools
|
||||
| Service | Port | Description | 🌐 Access |
|
||||
|---------|------|-------------|-----------|
|
||||
| **Homepage** | 4000 | Central dashboard for service discovery | [Open](http://localhost:4000) |
|
||||
| **Atuin** | 4001 | Shell history synchronization | [Open](http://localhost:4001) |
|
||||
| **Wakapi** | 4002 | Time tracking for developers | [Open](http://localhost:4002) |
|
||||
| **ArchiveBox** | 4003 | Web archiving solution | [Open](http://localhost:4003) |
|
||||
| **Tube Archivist** | 4004 | YouTube video archiving | [Open](http://localhost:4004) |
|
||||
| **MailHog** | 4005 | Email testing for development | [Open](http://localhost:4005) |
|
||||
| **Homepage** | 4000 | Central dashboard for service discovery | [Open](http://192.168.3.6:4000) |
|
||||
| **Atomic Tracker** | 4012 | Habit tracking and personal dashboard | [Open](http://192.168.3.6:4012) |
|
||||
| **Wakapi** | 4015 | Open-source WakaTime alternative for time tracking | [Open](http://192.168.3.6:4015) |
|
||||
| **MailHog** | 4017 | Web and API based SMTP testing tool | [Open](http://192.168.3.6:4017) |
|
||||
|
||||
### 📚 Archival & Content Management
|
||||
| Service | Port | Description | 🌐 Access |
|
||||
|---------|------|-------------|-----------|
|
||||
| **ArchiveBox** | 4013 | Web archiving solution | [Open](http://192.168.3.6:4013) |
|
||||
| **Tube Archivist** | 4014 | YouTube video archiving | [Open](http://192.168.3.6:4014) |
|
||||
|
||||
### 🏗️ Infrastructure Services
|
||||
| Service | Port | Description | 🌐 Access |
|
||||
|---------|------|-------------|-----------|
|
||||
| **Pi-hole** | 4006 | DNS-based ad blocking and monitoring | [Open](http://localhost:4006) |
|
||||
| **Docker Socket Proxy** | 4013 | Infrastructure | Secure Docker socket API proxy | [Internal](#) |
|
||||
| **Portainer** | 4007 | Web-based container management | [Open](http://localhost:4007) |
|
||||
| **Pi-hole** | 4006 | DNS-based ad blocking and monitoring | [Open](http://192.168.3.6:4006) |
|
||||
| **Portainer** | 4007 | Web-based container management | [Open](http://192.168.3.6:4007) |
|
||||
|
||||
### 📊 Monitoring & Observability
|
||||
| Service | Port | Description | 🌐 Access |
|
||||
|---------|------|-------------|-----------|
|
||||
| **InfluxDB** | 4008 | Time series database for metrics | [Open](http://localhost:4008) |
|
||||
| **Grafana** | 4009 | Analytics and visualization platform | [Open](http://localhost:4009) |
|
||||
| **InfluxDB** | 4008 | Time series database for metrics | [Open](http://192.168.3.6:4008) |
|
||||
| **Grafana** | 4009 | Analytics and visualization platform | [Open](http://192.168.3.6:4009) |
|
||||
|
||||
### 📚 Documentation & Diagramming
|
||||
| Service | Port | Description | 🌐 Access |
|
||||
|---------|------|-------------|-----------|
|
||||
| **Draw.io** | 4010 | Web-based diagramming application | [Open](http://localhost:4010) |
|
||||
| **Kroki** | 4011 | Diagrams as a service | [Open](http://localhost:4011) |
|
||||
| **Draw.io** | 4010 | Web-based diagramming application | [Open](http://192.168.3.6:4010) |
|
||||
| **Kroki** | 4011 | Diagrams as a service | [Open](http://192.168.3.6:4011) |
|
||||
|
||||
---
|
||||
|
||||
|
||||
@@ -111,6 +111,8 @@ show_status() {
|
||||
echo -e "${BLUE}🌐 Service URLs:${NC}"
|
||||
echo -e "${GREEN} Homepage: http://localhost:${HOMEPAGE_PORT}${NC}"
|
||||
echo -e "${GREEN} Atomic Tracker: http://localhost:${ATOMIC_TRACKER_PORT}${NC}"
|
||||
echo -e "${GREEN} Wakapi: http://localhost:${WAKAPI_PORT}${NC}"
|
||||
echo -e "${GREEN} MailHog: http://localhost:${MAILHOG_WEB_PORT}${NC}"
|
||||
echo -e "${GREEN} Grafana: http://localhost:${GRAFANA_PORT}${NC}"
|
||||
echo -e "${GREEN} Portainer: http://localhost:${PORTAINER_PORT}${NC}"
|
||||
}
|
||||
|
||||
@@ -29,6 +29,9 @@ COMPOSE_NETWORK_NAME=tsysdevstack-supportstack-demo-network
|
||||
# Developer Tools
|
||||
HOMEPAGE_PORT=4000
|
||||
ATOMIC_TRACKER_PORT=4012
|
||||
WAKAPI_PORT=4015
|
||||
MAILHOG_SMTP_PORT=4016
|
||||
MAILHOG_WEB_PORT=4017
|
||||
|
||||
# Archival & Content Management
|
||||
ARCHIVEBOX_PORT=4013
|
||||
@@ -80,6 +83,19 @@ ATOMIC_TRACKER_LISTENING_PORT=8080
|
||||
ATOMIC_TRACKER_BYPASS_LOGIN=1
|
||||
ATOMIC_TRACKER_USE_DUMMY_DATA=1
|
||||
|
||||
# Wakapi Configuration
|
||||
WAKAPI_DATA_DIR=/data
|
||||
WAKAPI_DB_TYPE=sqlite3
|
||||
WAKAPI_DB_PATH=/data/wakapi.db
|
||||
WAKAPI_PASSWORD_SALT=demo_salt_only
|
||||
WAKAPI_INSECURE_COOKIES=true
|
||||
WAKAPI_ENVIRONMENT=production
|
||||
|
||||
# MailHog Configuration
|
||||
MAILHOG_SMTP_BIND_ADDR=0.0.0.0:1025
|
||||
MAILHOG_WEB_BIND_ADDR=0.0.0.0:8025
|
||||
MAILHOG_STORAGE=memory
|
||||
|
||||
# ArchiveBox Configuration
|
||||
ARCHIVEBOX_DATA_DIR=/data
|
||||
|
||||
|
||||
@@ -1,545 +1,449 @@
|
||||
---
|
||||
# TSYS Developer Support Stack - Docker Compose Configuration for Demo
|
||||
#
|
||||
# NOTE: This configuration uses only Docker named volumes for storage, not bind mounts.
|
||||
# All data is ephemeral and will be lost when the stack is removed with 'docker compose down -v'.
|
||||
# This is intentional for the demo environment to ensure no persistent data accumulation.
|
||||
#
|
||||
# =============================================================================
|
||||
# This template uses environment variables for dynamic configuration
|
||||
# Generate docker-compose.yml with: envsubst < docker-compose.yml.template > docker-compose.yml
|
||||
# =============================================================================
|
||||
|
||||
services:
|
||||
# Homepage - Developer dashboard
|
||||
# =============================================================================
|
||||
# INFRASTRUCTURE SERVICES
|
||||
# =============================================================================
|
||||
|
||||
homepage:
|
||||
image: ghcr.io/gethomepage/homepage:latest
|
||||
container_name: tsysdevstack-supportstack-homepage
|
||||
ports:
|
||||
- "${HOMEPAGE_PORT}:3000"
|
||||
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:
|
||||
- ./config:/app/config:ro,Z # Demo: read-only config mount for functionality
|
||||
user: "${PUID}:${PGID}" # Run as non-root to prevent host file ownership issues
|
||||
labels:
|
||||
- "homepage.group=Developer Tools"
|
||||
- "homepage.name=Homepage"
|
||||
- "homepage.icon=homepage"
|
||||
- "homepage.href=http://192.168.3.6:4000"
|
||||
- "homepage.description=Developer dashboard and service discovery"
|
||||
environment:
|
||||
DOCKER_HOST: >
|
||||
tcp://tsysdevstack-supportstack-docker-socket-proxy:${DOCKER_PROXY_PORT}
|
||||
HOMEPAGE_ALLOWED_HOSTS: "*"
|
||||
HOMEPAGE_VAR_DOCKER_HOST: >
|
||||
tcp://tsysdevstack-supportstack-docker-socket-proxy:${DOCKER_PROXY_PORT}
|
||||
# Use docker.yaml with explicit include/exclude filtering
|
||||
depends_on:
|
||||
- tsysdevstack-supportstack-docker-socket-proxy
|
||||
restart: unless-stopped
|
||||
|
||||
# Atuin - Shell history
|
||||
atuin:
|
||||
image: ghcr.io/atuinsh/atuin:latest
|
||||
container_name: tsysdevstack-supportstack-atuin
|
||||
- "tsysdevstack-supportstack-demo_homepage_config:/app/config"
|
||||
- "tsysdevstack-supportstack-demo_homepage_images:/app/public/images"
|
||||
ports:
|
||||
- "${ATUIN_PORT}:8888"
|
||||
labels:
|
||||
- "homepage.group=Developer Tools"
|
||||
- "homepage.name=Atuin"
|
||||
- "homepage.icon=atuin"
|
||||
- "homepage.href=http://192.168.3.6:4001"
|
||||
- "homepage.description=Synced shell history database"
|
||||
environment:
|
||||
ATUIN_HOST: "0.0.0.0"
|
||||
ATUIN_PORT: "8888"
|
||||
ATUIN_OPEN_REGISTRATION: "true"
|
||||
ATUIN_DB_URI: >
|
||||
postgres://atuin:demo_password@tsysdevstack-supportstack-postgres:5432/atuin
|
||||
RUST_LOG: "debug,atuin_server=debug,sqlx=debug"
|
||||
command: server start
|
||||
# No persistent volumes for demo - config is ephemeral
|
||||
user: "${PUID}:${PGID}"
|
||||
depends_on:
|
||||
tsysdevstack-supportstack-postgres:
|
||||
condition: service_healthy
|
||||
restart: unless-stopped
|
||||
healthcheck:
|
||||
test:
|
||||
- CMD-SHELL
|
||||
- "wget --no-verbose --tries=1 --spider http://localhost:8080/ || exit 1"
|
||||
interval: 30s
|
||||
timeout: 10s
|
||||
retries: 3
|
||||
start_period: 40s
|
||||
deploy:
|
||||
resources:
|
||||
limits:
|
||||
memory: 256M
|
||||
cpus: '0.5'
|
||||
|
||||
# Wakapi - Time tracking
|
||||
wakapi:
|
||||
image: ghcr.io/muety/wakapi:latest
|
||||
container_name: tsysdevstack-supportstack-wakapi
|
||||
ports:
|
||||
- "${WAKAPI_PORT}:3000"
|
||||
labels:
|
||||
- "homepage.group=Developer Tools"
|
||||
- "homepage.name=Wakapi"
|
||||
- "homepage.icon=wakapi"
|
||||
- "homepage.href=http://192.168.3.6:4002"
|
||||
- "homepage.description=Self-hosted time tracking"
|
||||
environment:
|
||||
- WAKAPI_PASSWORD_SALT=demo_password
|
||||
# No persistent volumes for demo - data is ephemeral
|
||||
restart: unless-stopped
|
||||
healthcheck:
|
||||
test:
|
||||
- CMD-SHELL
|
||||
- "wget --no-verbose --tries=1 --spider http://localhost:8086/ping || exit 1"
|
||||
interval: 30s
|
||||
timeout: 10s
|
||||
retries: 3
|
||||
start_period: 40s
|
||||
deploy:
|
||||
resources:
|
||||
limits:
|
||||
memory: 256M
|
||||
cpus: '0.5'
|
||||
|
||||
# MailHog - Email testing
|
||||
mailhog:
|
||||
image: mailhog/mailhog:latest
|
||||
container_name: tsysdevstack-supportstack-mailhog
|
||||
ports:
|
||||
- "1025:1025"
|
||||
- "${MAILHOG_PORT}:8025"
|
||||
labels:
|
||||
- "homepage.group=Developer Tools"
|
||||
- "homepage.name=MailHog"
|
||||
- "homepage.icon=mailhog"
|
||||
- "homepage.href=http://192.168.3.6:4005"
|
||||
- "homepage.description=Email testing service"
|
||||
restart: unless-stopped
|
||||
healthcheck:
|
||||
test:
|
||||
- CMD-SHELL
|
||||
- "echo > /dev/tcp/localhost:8025"
|
||||
interval: 30s
|
||||
timeout: 10s
|
||||
retries: 3
|
||||
start_period: 40s
|
||||
deploy:
|
||||
resources:
|
||||
limits:
|
||||
memory: 128M
|
||||
cpus: '0.25'
|
||||
|
||||
# Pi-hole - DNS management
|
||||
pihole:
|
||||
image: pihole/pihole:latest
|
||||
container_name: tsysdevstack-supportstack-pihole
|
||||
# Note: Pi-hole requires root for DNS capabilities and file permissions
|
||||
ports:
|
||||
- "${PIHOLE_PORT}:80"
|
||||
- "53:53/tcp"
|
||||
- "53:53/udp"
|
||||
- "67:67/udp"
|
||||
labels:
|
||||
- "homepage.group=Infrastructure"
|
||||
- "homepage.name=Pi-hole"
|
||||
- "homepage.icon=pihole"
|
||||
- "homepage.href=http://192.168.3.6:4006"
|
||||
- "homepage.description=DNS-based ad blocking and network monitoring"
|
||||
- "4000:3000"
|
||||
environment:
|
||||
- PUID=1000
|
||||
- PGID=1000
|
||||
- TZ=UTC
|
||||
- WEBPASSWORD=${DEMO_PASSWORD}
|
||||
- PIHOLE_DNS_=1.1.1.1;1.0.0.1
|
||||
- DNSMASQ_LISTENING=all
|
||||
- WEBTHEME=default-dark
|
||||
# No persistent volumes for demo - configuration is ephemeral
|
||||
# Pi-hole requires root for DNS functionality
|
||||
restart: unless-stopped
|
||||
healthcheck:
|
||||
test:
|
||||
- CMD-SHELL
|
||||
- "echo > /dev/tcp/localhost/80"
|
||||
interval: 30s
|
||||
timeout: 10s
|
||||
retries: 3
|
||||
start_period: 60s
|
||||
deploy:
|
||||
resources:
|
||||
limits:
|
||||
memory: 512M
|
||||
cpus: '0.75'
|
||||
|
||||
# Portainer - Container management
|
||||
portainer:
|
||||
image: portainer/portainer-ce:latest
|
||||
container_name: tsysdevstack-supportstack-portainer
|
||||
ports:
|
||||
- "${PORTAINER_PORT}:9000"
|
||||
- ADMIN_USERNAME=admin
|
||||
- ADMIN_PASSWORD=admin
|
||||
labels:
|
||||
- "homepage.group=Infrastructure"
|
||||
- "homepage.name=Portainer"
|
||||
- "homepage.icon=portainer"
|
||||
- "homepage.href=http://192.168.3.6:4007"
|
||||
- "homepage.description=Container management interface"
|
||||
# No persistent volumes for demo - data is ephemeral
|
||||
# Note: Portainer needs root for data directory permissions
|
||||
environment:
|
||||
DOCKER_HOST: >
|
||||
tcp://tsysdevstack-supportstack-docker-socket-proxy:${DOCKER_PROXY_PORT}
|
||||
# Portainer needs root for data directory permissions
|
||||
restart: unless-stopped
|
||||
healthcheck:
|
||||
test:
|
||||
- CMD-SHELL
|
||||
- "echo > /dev/tcp/localhost/9000"
|
||||
interval: 30s
|
||||
timeout: 10s
|
||||
retries: 3
|
||||
start_period: 60s
|
||||
deploy:
|
||||
resources:
|
||||
limits:
|
||||
memory: 256M
|
||||
cpus: '0.5'
|
||||
com.docker.compose.project: "tsysdevstack-supportstack-demo"
|
||||
|
||||
# ArchiveBox - Web archiving
|
||||
archivebox:
|
||||
image: archivebox/archivebox:latest
|
||||
container_name: tsysdevstack-supportstack-archivebox
|
||||
ports:
|
||||
- "${ARCHIVEBOX_PORT}:8000"
|
||||
labels:
|
||||
- "homepage.group=Developer Tools"
|
||||
- "homepage.name=ArchiveBox"
|
||||
- "homepage.icon=archivebox"
|
||||
- "homepage.href=http://192.168.3.6:4003"
|
||||
- "homepage.description=Self-hosted web archiving"
|
||||
environment:
|
||||
- ALLOWED_HOSTS=*
|
||||
- MEDIA_MAX_SIZE=750m
|
||||
# No persistent volumes for demo - data is ephemeral
|
||||
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
|
||||
healthcheck:
|
||||
test:
|
||||
- CMD-SHELL
|
||||
- "wget --no-verbose --tries=1 --spider http://localhost:3000/api/health || exit 1"
|
||||
interval: 30s
|
||||
timeout: 10s
|
||||
retries: 3
|
||||
start_period: 40s
|
||||
deploy:
|
||||
resources:
|
||||
limits:
|
||||
memory: 256M
|
||||
cpus: '0.5'
|
||||
|
||||
# InfluxDB - Time series database
|
||||
influxdb:
|
||||
image: influxdb:2.7-alpine
|
||||
container_name: tsysdevstack-supportstack-influxdb
|
||||
ports:
|
||||
- "${INFLUXDB_PORT}:8086"
|
||||
labels:
|
||||
- "homepage.group=Monitoring"
|
||||
- "homepage.name=InfluxDB"
|
||||
- "homepage.icon=influxdb"
|
||||
- "homepage.href=http://192.168.3.6:4008"
|
||||
- "homepage.description=Time series database for metrics storage"
|
||||
environment:
|
||||
- DOCKER_INFLUXDB_INIT_MODE=setup
|
||||
- DOCKER_INFLUXDB_INIT_USERNAME=admin
|
||||
- DOCKER_INFLUXDB_INIT_PASSWORD=${DEMO_PASSWORD}
|
||||
- DOCKER_INFLUXDB_INIT_ORG=tsysdev
|
||||
- DOCKER_INFLUXDB_INIT_BUCKET=metrics
|
||||
# No persistent volumes for demo - data is ephemeral
|
||||
user: "${PUID}:${PGID}"
|
||||
restart: unless-stopped
|
||||
healthcheck:
|
||||
test:
|
||||
- CMD-SHELL
|
||||
- "wget --no-verbose --tries=1 --spider http://localhost:8086/ping || exit 1"
|
||||
interval: 30s
|
||||
timeout: 10s
|
||||
retries: 3
|
||||
start_period: 40s
|
||||
deploy:
|
||||
resources:
|
||||
limits:
|
||||
memory: 256M
|
||||
cpus: '0.5'
|
||||
|
||||
# Grafana - Analytics visualization
|
||||
grafana:
|
||||
image: grafana/grafana:latest
|
||||
container_name: tsysdevstack-supportstack-grafana
|
||||
ports:
|
||||
- "${GRAFANA_PORT}:3000"
|
||||
labels:
|
||||
- "homepage.group=Monitoring"
|
||||
- "homepage.name=Grafana"
|
||||
- "homepage.icon=grafana"
|
||||
- "homepage.href=http://192.168.3.6:4009"
|
||||
- "homepage.description=Analytics and visualization platform"
|
||||
environment:
|
||||
- GF_SECURITY_ADMIN_USER=admin
|
||||
- GF_SECURITY_ADMIN_PASSWORD=${DEMO_PASSWORD}
|
||||
- GF_INSTALL_PLUGINS=grafana-clock-panel,grafana-simple-json-datasource
|
||||
- GF_SERVER_DOMAIN=192.168.3.6:4009
|
||||
- GF_SERVER_ROOT_URL=http://192.168.3.6:4009
|
||||
# No persistent volumes for demo - data is ephemeral
|
||||
user: "${PUID}:${PGID}"
|
||||
depends_on:
|
||||
- influxdb
|
||||
restart: unless-stopped
|
||||
healthcheck:
|
||||
test:
|
||||
- CMD-SHELL
|
||||
- "echo > /dev/tcp/localhost/3000"
|
||||
interval: 30s
|
||||
timeout: 10s
|
||||
retries: 3
|
||||
start_period: 40s
|
||||
deploy:
|
||||
resources:
|
||||
limits:
|
||||
memory: 512M
|
||||
cpus: '0.75'
|
||||
|
||||
# Draw.io - Diagramming
|
||||
drawio:
|
||||
image: jgraph/drawio:latest
|
||||
container_name: tsysdevstack-supportstack-drawio
|
||||
user: "${PUID}:${PGID}"
|
||||
ports:
|
||||
- "${DRAWIO_PORT}:8080"
|
||||
labels:
|
||||
- "homepage.group=Documentation"
|
||||
- "homepage.name=Draw.io"
|
||||
- "homepage.icon=diagram"
|
||||
- "homepage.href=http://192.168.3.6:4010"
|
||||
- "homepage.description=Web-based diagramming tool"
|
||||
restart: unless-stopped
|
||||
healthcheck:
|
||||
test:
|
||||
- CMD-SHELL
|
||||
- "echo > /dev/tcp/localhost/3000"
|
||||
interval: 30s
|
||||
timeout: 10s
|
||||
retries: 3
|
||||
start_period: 40s
|
||||
deploy:
|
||||
resources:
|
||||
limits:
|
||||
memory: 256M
|
||||
cpus: '0.5'
|
||||
|
||||
# Tube Archivist - YouTube media archiving
|
||||
tube-archivist:
|
||||
image: bbilly1/tubearchivist:latest
|
||||
container_name: tsysdevstack-supportstack-tube-archivist
|
||||
ports:
|
||||
- "4004:8000"
|
||||
labels:
|
||||
- "homepage.group=Developer Tools"
|
||||
- "homepage.name=Tube Archivist"
|
||||
- "homepage.icon=youtube"
|
||||
- "homepage.href=http://192.168.3.6:4004"
|
||||
- "homepage.description=Self-hosted YouTube media archiving"
|
||||
environment:
|
||||
- TA_HOST=192.168.3.6:4004
|
||||
- TA_USERNAME=demo_user
|
||||
- TA_PASSWORD=demo_password
|
||||
- ES_URL=http://elastic:demo_password@tsysdevstack-supportstack-elasticsearch:9200
|
||||
- ELASTIC_PASSWORD=demo_password
|
||||
- REDIS_CON=redis://tsysdevstack-supportstack-redis:6379
|
||||
- TZ=UTC
|
||||
depends_on:
|
||||
tsysdevstack-supportstack-elasticsearch:
|
||||
condition: service_healthy
|
||||
tsysdevstack-supportstack-redis:
|
||||
condition: service_healthy
|
||||
# No persistent volumes for demo - cache and media are ephemeral
|
||||
restart: unless-stopped
|
||||
healthcheck:
|
||||
test: ["CMD-SHELL", "curl -f http://localhost:8000/ || exit 1"]
|
||||
interval: 30s
|
||||
timeout: 10s
|
||||
retries: 3
|
||||
start_period: 120s
|
||||
deploy:
|
||||
resources:
|
||||
limits:
|
||||
memory: 512M
|
||||
cpus: '1.0'
|
||||
|
||||
# Kroki - Diagrams as code
|
||||
kroki:
|
||||
image: yuzutech/kroki:latest
|
||||
container_name: tsysdevstack-supportstack-kroki
|
||||
user: "${PUID}:${PGID}"
|
||||
ports:
|
||||
- "${KROKI_PORT}:8000"
|
||||
labels:
|
||||
- "homepage.group=Documentation"
|
||||
- "homepage.name=Kroki"
|
||||
- "homepage.icon=diagram"
|
||||
- "homepage.href=http://192.168.3.6:4011"
|
||||
- "homepage.description=Service for converting text diagrams to images"
|
||||
environment:
|
||||
- KROKI_SAFE_MODE=0
|
||||
- KROKI_PLANTUML_ALLOW_LIST=*
|
||||
- KROKI_MERMAID_ALLOW_LIST=*
|
||||
restart: unless-stopped
|
||||
healthcheck:
|
||||
test:
|
||||
- CMD-SHELL
|
||||
- "wget --no-verbose --tries=1 --spider http://localhost:8000/health || exit 1"
|
||||
interval: 30s
|
||||
timeout: 10s
|
||||
retries: 3
|
||||
start_period: 40s
|
||||
deploy:
|
||||
resources:
|
||||
limits:
|
||||
memory: 256M
|
||||
cpus: '0.5'
|
||||
|
||||
# Docker Socket Proxy - Secure Docker API access
|
||||
tsysdevstack-supportstack-docker-socket-proxy:
|
||||
image: tecnativa/docker-socket-proxy:latest
|
||||
container_name: tsysdevstack-supportstack-docker-socket-proxy
|
||||
ports:
|
||||
- "${DOCKER_PROXY_PORT}:2375"
|
||||
networks:
|
||||
- tsysdevstack-supportstack-demo-network
|
||||
volumes:
|
||||
- /var/run/docker.sock:/var/run/docker.sock:ro
|
||||
environment:
|
||||
- CONTAINERS=1
|
||||
- SERVICES=1
|
||||
- TASKS=1
|
||||
- NETWORKS=1
|
||||
- NODES=1
|
||||
- IMAGES=1
|
||||
- VOLUMES=1
|
||||
- EXEC=0
|
||||
- SECRETS=0
|
||||
- CONFIGS=0
|
||||
- PLUGINS=0
|
||||
- SYSTEM=0
|
||||
- INFO=1
|
||||
- VERSION=1
|
||||
- EVENTS=0
|
||||
- POST=0
|
||||
- DELETE=0
|
||||
- PUT=0
|
||||
restart: unless-stopped
|
||||
healthcheck:
|
||||
test:
|
||||
- CMD-SHELL
|
||||
- "wget --no-verbose --tries=1 --spider http://localhost:2375/version || exit 1"
|
||||
interval: 30s
|
||||
timeout: 10s
|
||||
retries: 3
|
||||
start_period: 60s
|
||||
deploy:
|
||||
resources:
|
||||
limits:
|
||||
memory: 128M
|
||||
cpus: '0.25'
|
||||
|
||||
# PostgreSQL - Database for Atuin
|
||||
tsysdevstack-supportstack-postgres:
|
||||
image: postgres:15-alpine
|
||||
container_name: tsysdevstack-supportstack-postgres
|
||||
- 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:
|
||||
- "homepage.group=Infrastructure"
|
||||
- "homepage.name=PostgreSQL"
|
||||
- "homepage.icon=postgresql"
|
||||
- "homepage.description=PostgreSQL database server"
|
||||
environment:
|
||||
- POSTGRES_DB=atuin
|
||||
- POSTGRES_USER=atuin
|
||||
- POSTGRES_PASSWORD=${DEMO_PASSWORD}
|
||||
# No persistent volumes for demo - data is ephemeral
|
||||
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
|
||||
- pg_isready
|
||||
- -U
|
||||
- atuin
|
||||
test: ["CMD", "curl", "-f", "http://localhost:80/admin"]
|
||||
interval: 30s
|
||||
timeout: 10s
|
||||
retries: 3
|
||||
start_period: 40s
|
||||
deploy:
|
||||
resources:
|
||||
limits:
|
||||
memory: 256M
|
||||
cpus: '0.5'
|
||||
|
||||
# Elasticsearch - Search engine
|
||||
tsysdevstack-supportstack-elasticsearch:
|
||||
image: docker.elastic.co/elasticsearch/elasticsearch:8.11.1
|
||||
container_name: tsysdevstack-supportstack-elasticsearch
|
||||
labels:
|
||||
- "homepage.group=Infrastructure"
|
||||
- "homepage.name=Elasticsearch"
|
||||
- "homepage.icon=elasticsearch"
|
||||
- "homepage.description=Search and analytics engine"
|
||||
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:
|
||||
- "discovery.type=single-node"
|
||||
- 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"
|
||||
- "xpack.security.enabled=true"
|
||||
- "ELASTIC_PASSWORD=${DEMO_PASSWORD}"
|
||||
- "path.repo=/usr/share/elasticsearch/data/snapshot"
|
||||
# No persistent volumes for demo - data is ephemeral
|
||||
user: "${PUID}:${PGID}"
|
||||
restart: unless-stopped
|
||||
healthcheck:
|
||||
test:
|
||||
- CMD-SHELL
|
||||
- >
|
||||
curl -f -u elastic:demo_password
|
||||
http://localhost:9200/_cluster/health?wait_for_status=yellow&timeout=30s || exit 1
|
||||
interval: 30s
|
||||
timeout: 10s
|
||||
retries: 5
|
||||
start_period: 120s
|
||||
deploy:
|
||||
resources:
|
||||
limits:
|
||||
memory: 1G
|
||||
cpus: '1.0'
|
||||
|
||||
# Redis for Tube Archivist
|
||||
tsysdevstack-supportstack-redis:
|
||||
image: redis:7-alpine
|
||||
container_name: tsysdevstack-supportstack-redis
|
||||
- ELASTIC_PASSWORD=changeme
|
||||
labels:
|
||||
- "homepage.group=Infrastructure"
|
||||
- "homepage.name=Redis"
|
||||
- "homepage.icon=redis"
|
||||
- "homepage.description=In-memory data structure store"
|
||||
restart: unless-stopped
|
||||
command: redis-server --save 60 1 --stop-writes-on-bgsave-error no
|
||||
healthcheck:
|
||||
test:
|
||||
- CMD
|
||||
- redis-cli
|
||||
- ping
|
||||
interval: 30s
|
||||
timeout: 10s
|
||||
retries: 3
|
||||
start_period: 40s
|
||||
deploy:
|
||||
resources:
|
||||
limits:
|
||||
memory: 128M
|
||||
cpus: '0.25'
|
||||
com.docker.compose.project: "tsysdevstack-supportstack-demo"
|
||||
|
||||
# No persistent volumes - demo is 100% ephemeral
|
||||
# Only Docker socket bind mount is used for functionality
|
||||
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:
|
||||
default:
|
||||
name: tsysdevstack_supportstack
|
||||
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
|
||||
|
||||
@@ -65,7 +65,6 @@ services:
|
||||
|
||||
pihole:
|
||||
image: pihole/pihole:2024.07.0
|
||||
user: "${APP_UID}:${APP_GID}"
|
||||
container_name: "${COMPOSE_PROJECT_NAME}-pihole"
|
||||
restart: unless-stopped
|
||||
networks:
|
||||
@@ -84,6 +83,13 @@ services:
|
||||
- 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"
|
||||
@@ -118,7 +124,7 @@ services:
|
||||
# =============================================================================
|
||||
|
||||
influxdb:
|
||||
image: influxdb:1.8.10
|
||||
image: influxdb:2.7.10
|
||||
container_name: "${COMPOSE_PROJECT_NAME}-influxdb"
|
||||
restart: unless-stopped
|
||||
networks:
|
||||
@@ -134,6 +140,13 @@ services:
|
||||
- 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", "wget", "--no-verbose", "--tries=1", "--spider", "http://localhost:8086/health"]
|
||||
interval: 30s
|
||||
timeout: 10s
|
||||
retries: 3
|
||||
start_period: 40s
|
||||
labels:
|
||||
homepage.group: "Monitoring"
|
||||
homepage.name: "InfluxDB"
|
||||
@@ -238,12 +251,70 @@ services:
|
||||
homepage.href: "http://192.168.3.6:${ATOMIC_TRACKER_PORT}"
|
||||
homepage.description: "Habit tracking and personal dashboard"
|
||||
|
||||
wakapi:
|
||||
image: ghcr.io/muety/wakapi:v2.7.1
|
||||
user: "${APP_UID}:${APP_GID}"
|
||||
container_name: "${COMPOSE_PROJECT_NAME}-wakapi"
|
||||
restart: unless-stopped
|
||||
networks:
|
||||
- ${COMPOSE_NETWORK_NAME}
|
||||
volumes:
|
||||
- "${COMPOSE_PROJECT_NAME}_wakapi_data:/data"
|
||||
ports:
|
||||
- "${WAKAPI_PORT}: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:${WAKAPI_PORT}"
|
||||
homepage.description: "Open-source WakaTime alternative for time tracking"
|
||||
|
||||
mailhog:
|
||||
image: mailhog/mailhog:v1.0.0
|
||||
container_name: "${COMPOSE_PROJECT_NAME}-mailhog"
|
||||
restart: unless-stopped
|
||||
networks:
|
||||
- ${COMPOSE_NETWORK_NAME}
|
||||
ports:
|
||||
- "${MAILHOG_SMTP_PORT}:1025"
|
||||
- "${MAILHOG_WEB_PORT}:8025"
|
||||
environment:
|
||||
- PUID=${APP_UID}
|
||||
- PGID=${APP_GID}
|
||||
- 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:${MAILHOG_WEB_PORT}"
|
||||
homepage.description: "Web and API based SMTP testing tool"
|
||||
|
||||
# =============================================================================
|
||||
# ARCHIVAL & CONTENT MANAGEMENT
|
||||
# =============================================================================
|
||||
|
||||
archivebox:
|
||||
image: archivebox/archivebox:latest
|
||||
image: archivebox/archivebox:v0.7.3
|
||||
container_name: "${COMPOSE_PROJECT_NAME}-archivebox"
|
||||
restart: unless-stopped
|
||||
networks:
|
||||
@@ -264,7 +335,7 @@ services:
|
||||
homepage.description: "Self-hosted internet archiving solution"
|
||||
|
||||
tube-archivist:
|
||||
image: bbilly1/tubearchivist:latest
|
||||
image: bbilly1/tubearchivist:v0.5.8
|
||||
container_name: "${COMPOSE_PROJECT_NAME}-tube-archivist"
|
||||
restart: unless-stopped
|
||||
networks:
|
||||
@@ -284,6 +355,9 @@ services:
|
||||
- TA_PASSWORD=tubearchivist
|
||||
- TA_HOST=http://192.168.3.6:${TUBE_ARCHIVIST_PORT}
|
||||
- ELASTIC_PASSWORD=changeme
|
||||
- TA_ENABLE_AUTH_PROXY=false
|
||||
- HOST_UID=${APP_UID}
|
||||
- HOST_GID=${APP_GID}
|
||||
depends_on:
|
||||
- elasticsearch
|
||||
- redis
|
||||
@@ -359,6 +433,10 @@ volumes:
|
||||
driver: local
|
||||
${COMPOSE_PROJECT_NAME}_atomic_tracker_config:
|
||||
driver: local
|
||||
${COMPOSE_PROJECT_NAME}_wakapi_data:
|
||||
driver: local
|
||||
${COMPOSE_PROJECT_NAME}_mailhog_data:
|
||||
driver: local
|
||||
${COMPOSE_PROJECT_NAME}_archivebox_data:
|
||||
driver: local
|
||||
${COMPOSE_PROJECT_NAME}_tube_archivist_media:
|
||||
|
||||
Reference in New Issue
Block a user