From 077f483faf87129d5291a7b57746e0ef16c47d52 Mon Sep 17 00:00:00 2001 From: reachableceo Date: Mon, 27 Apr 2026 13:06:31 -0500 Subject: [PATCH] feat(demo): restore ArchiveBox, TubeArchivist, Atuin and fix all service configs MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Restore 3 services that were previously removed due to health issues, bringing the stack to 16 services. Add companion services (Elasticsearch, Redis) required by TubeArchivist. Key changes: - Add ArchiveBox with proper health check and admin credentials - Add TubeArchivist with ta-redis and ta-elasticsearch companions - Add Atuin server with correct `server start` command and TCP health check - Fix Wakapi health check to use /app/healthcheck binary - Add Grafana provisioning bind mount for datasources/dashboards - Add Homepage config bind mount for docker.yaml - Fix Docker Socket Proxy label (remove unreachable localhost:4005 href) - Fix credentials: INFLUXDB_ADMIN_USER and TA_USERNAME → admin - Fix Grafana datasources.yml user to match - Fix homepage/docker.yaml to contain Docker provider config - Add all missing env vars (TA_PASSWORD, ELASTIC_PASSWORD, ES_JAVA_OPTS, etc.) - Remove Pi-hole port 53 bindings (DNS not needed for demo) - Bump template version to 2.0 💘 Generated with Crush Assisted-by: GLM-5.1 via Crush --- demo/config/grafana/datasources.yml | 2 +- demo/config/homepage/docker.yaml | 36 +---- demo/demo.env | 21 ++- demo/docker-compose.yml | 232 ++++++++++++++++++---------- demo/docker-compose.yml.template | 118 +++++++++++--- 5 files changed, 269 insertions(+), 140 deletions(-) diff --git a/demo/config/grafana/datasources.yml b/demo/config/grafana/datasources.yml index 2cac766..ce1c193 100644 --- a/demo/config/grafana/datasources.yml +++ b/demo/config/grafana/datasources.yml @@ -8,7 +8,7 @@ datasources: access: proxy url: http://influxdb:8086 database: demo_metrics - user: demo_admin + user: admin password: demo_password isDefault: true jsonData: diff --git a/demo/config/homepage/docker.yaml b/demo/config/homepage/docker.yaml index d4e6f63..b9731e3 100644 --- a/demo/config/homepage/docker.yaml +++ b/demo/config/homepage/docker.yaml @@ -1,34 +1,6 @@ --- -# TSYS Developer Support Stack - Homepage Configuration -# This file will be automatically generated by Homepage service discovery +# TSYS Developer Support Stack - Homepage Docker Integration +# Connects Homepage to Docker for automatic service discovery -providers: - openweathermap: openweathermapapikey - longshore: longshoreapikey - -widgets: - - resources: - cpu: true - memory: true - disk: true - - search: - provider: duckduckgo - target: _blank - - datetime: - format: - dateStyle: long - timeStyle: short - hour12: true - -bookmarks: - - Development: - - Github: - - abbr: GH - href: https://github.com/ - - Docker Hub: - - abbr: DH - href: https://hub.docker.com/ - - Documentation: - - TSYS Docs: - - abbr: TSYS - href: https://docs.tsys.dev/ +my-docker: + socket: docker-socket-proxy:2375 diff --git a/demo/demo.env b/demo/demo.env index 3b9c04d..85e1618 100644 --- a/demo/demo.env +++ b/demo/demo.env @@ -1,12 +1,12 @@ # TSYS Developer Support Stack - Demo Environment Configuration # Project Identification -COMPOSE_PROJECT_NAME=tsysdevstack-supportstack-demo -COMPOSE_NETWORK_NAME=tsysdevstack-supportstack-demo-network +COMPOSE_PROJECT_NAME=kneldevstack-supportstack-demo +COMPOSE_NETWORK_NAME=kneldevstack-supportstack-demo-network # Dynamic User Detection (to be auto-populated by scripts) DEMO_UID=1000 DEMO_GID=1000 -DEMO_DOCKER_GID=996 +DEMO_DOCKER_GID=986 # Port Assignments (4000-4099 range) HOMEPAGE_PORT=4000 @@ -59,7 +59,7 @@ DOCKER_SOCKET_PROXY_PLUGINS=0 # InfluxDB Configuration INFLUXDB_ORG=tsysdemo INFLUXDB_BUCKET=demo_metrics -INFLUXDB_ADMIN_USER=demo_admin +INFLUXDB_ADMIN_USER=admin INFLUXDB_ADMIN_PASSWORD=demo_password INFLUXDB_AUTH_TOKEN=demo_token_replace_in_production @@ -76,7 +76,7 @@ WEBTHEME=default-darker ARCHIVEBOX_SECRET_KEY=demo_secret_replace_in_production # Tube Archivist Configuration -TA_HOST=tubearchivist +TA_HOST=http://localhost:4014 TA_PORT=4014 TA_DEBUG=false @@ -84,6 +84,11 @@ TA_DEBUG=false WAKAPI_PASSWORD_SALT=demo_salt_replace_in_production # Atuin Configuration -ATUIN_HOST=atuin -ATUIN_PORT=4018 -ATUIN_OPEN_REGISTRATION=true \ No newline at end of file +ATUIN_HOST=0.0.0.0 +ATUIN_OPEN_REGISTRATION=true +TA_PASSWORD=demo_password +ELASTIC_PASSWORD=demo_password +ES_JAVA_OPTS="-Xms512m -Xmx512m" +ARCHIVEBOX_ADMIN_USER=admin +ARCHIVEBOX_ADMIN_PASSWORD=demo_password +TA_USERNAME=admin diff --git a/demo/docker-compose.yml b/demo/docker-compose.yml index 02783e7..5e56486 100644 --- a/demo/docker-compose.yml +++ b/demo/docker-compose.yml @@ -1,11 +1,11 @@ --- # TSYS Developer Support Stack - Docker Compose Template -# Version: 1.0 +# Version: 2.0 # Purpose: Demo deployment with dynamic configuration -# ⚠️ DEMO CONFIGURATION ONLY - NOT FOR PRODUCTION +# DEMO CONFIGURATION ONLY - NOT FOR PRODUCTION networks: - tsysdevstack-supportstack-demo-network: + kneldevstack-supportstack-demo-network: driver: bridge ipam: config: @@ -13,42 +13,45 @@ networks: gateway: 192.168.3.1 volumes: - tsysdevstack-supportstack-demo_homepage_data: + kneldevstack-supportstack-demo_homepage_data: driver: local - tsysdevstack-supportstack-demo_pihole_data: + kneldevstack-supportstack-demo_pihole_data: driver: local - tsysdevstack-supportstack-demo_dockhand_data: + kneldevstack-supportstack-demo_dockhand_data: driver: local - - tsysdevstack-supportstack-demo_influxdb_data: + kneldevstack-supportstack-demo_influxdb_data: driver: local - tsysdevstack-supportstack-demo_grafana_data: + kneldevstack-supportstack-demo_grafana_data: driver: local - tsysdevstack-supportstack-demo_drawio_data: + kneldevstack-supportstack-demo_drawio_data: driver: local - tsysdevstack-supportstack-demo_kroki_data: + kneldevstack-supportstack-demo_kroki_data: driver: local - tsysdevstack-supportstack-demo_atomictracker_data: + kneldevstack-supportstack-demo_atomictracker_data: driver: local - tsysdevstack-supportstack-demo_archivebox_data: + kneldevstack-supportstack-demo_archivebox_data: driver: local - tsysdevstack-supportstack-demo_tubearchivist_data: + kneldevstack-supportstack-demo_tubearchivist_data: driver: local - tsysdevstack-supportstack-demo_wakapi_data: + kneldevstack-supportstack-demo_ta_redis_data: driver: local - tsysdevstack-supportstack-demo_mailhog_data: + kneldevstack-supportstack-demo_ta_es_data: driver: local - tsysdevstack-supportstack-demo_atuin_data: + kneldevstack-supportstack-demo_wakapi_data: + driver: local + kneldevstack-supportstack-demo_mailhog_data: + driver: local + kneldevstack-supportstack-demo_atuin_data: driver: local services: # Docker Socket Proxy - Security Layer docker-socket-proxy: image: tecnativa/docker-socket-proxy:latest - container_name: "tsysdevstack-supportstack-demo-docker-socket-proxy" + container_name: "kneldevstack-supportstack-demo-docker-socket-proxy" restart: unless-stopped networks: - - tsysdevstack-supportstack-demo-network + - kneldevstack-supportstack-demo-network volumes: - /var/run/docker.sock:/var/run/docker.sock:ro environment: @@ -67,20 +70,20 @@ services: homepage.group: "Infrastructure" homepage.name: "Docker Socket Proxy" homepage.icon: "docker" - homepage.href: "http://localhost:4005" - homepage.description: "Secure proxy for Docker socket access" + homepage.description: "Secure proxy for Docker socket access (internal only)" # Homepage - Central Dashboard homepage: image: ghcr.io/gethomepage/homepage:latest - container_name: "tsysdevstack-supportstack-demo-homepage" + container_name: "kneldevstack-supportstack-demo-homepage" restart: unless-stopped networks: - - tsysdevstack-supportstack-demo-network + - kneldevstack-supportstack-demo-network ports: - "4000:3000" volumes: - - tsysdevstack-supportstack-demo_homepage_data:/app/config + - kneldevstack-supportstack-demo_homepage_data:/app/config + - ./config/homepage:/app/config/default:ro environment: - PUID=1000 - PGID=1000 @@ -100,16 +103,14 @@ services: # Pi-hole - DNS Management pihole: image: pihole/pihole:latest - container_name: "tsysdevstack-supportstack-demo-pihole" + container_name: "kneldevstack-supportstack-demo-pihole" restart: unless-stopped networks: - - tsysdevstack-supportstack-demo-network + - kneldevstack-supportstack-demo-network ports: - "4006:80" - - "53:53/tcp" - - "53:53/udp" volumes: - - tsysdevstack-supportstack-demo_pihole_data:/etc/pihole + - kneldevstack-supportstack-demo_pihole_data:/etc/pihole environment: - TZ=UTC - WEBPASSWORD=demo_password @@ -132,14 +133,14 @@ services: # Dockhand - Docker Management dockhand: image: fnsys/dockhand:latest - container_name: "tsysdevstack-supportstack-demo-dockhand" + container_name: "kneldevstack-supportstack-demo-dockhand" restart: unless-stopped networks: - - tsysdevstack-supportstack-demo-network + - kneldevstack-supportstack-demo-network ports: - "4007:3000" volumes: - - tsysdevstack-supportstack-demo_dockhand_data:/app/data + - kneldevstack-supportstack-demo_dockhand_data:/app/data - /var/run/docker.sock:/var/run/docker.sock environment: - PUID=1000 @@ -160,17 +161,17 @@ services: # InfluxDB - Time Series Database influxdb: image: influxdb:2.7-alpine - container_name: "tsysdevstack-supportstack-demo-influxdb" + container_name: "kneldevstack-supportstack-demo-influxdb" restart: unless-stopped networks: - - tsysdevstack-supportstack-demo-network + - kneldevstack-supportstack-demo-network ports: - "4008:8086" volumes: - - tsysdevstack-supportstack-demo_influxdb_data:/var/lib/influxdb2 + - kneldevstack-supportstack-demo_influxdb_data:/var/lib/influxdb2 environment: - DOCKER_INFLUXDB_INIT_MODE=setup - - DOCKER_INFLUXDB_INIT_USERNAME=demo_admin + - DOCKER_INFLUXDB_INIT_USERNAME=admin - DOCKER_INFLUXDB_INIT_PASSWORD=demo_password - DOCKER_INFLUXDB_INIT_ORG=tsysdemo - DOCKER_INFLUXDB_INIT_BUCKET=demo_metrics @@ -193,18 +194,20 @@ services: # Grafana - Visualization Platform grafana: image: grafana/grafana:latest - container_name: "tsysdevstack-supportstack-demo-grafana" + container_name: "kneldevstack-supportstack-demo-grafana" restart: unless-stopped networks: - - tsysdevstack-supportstack-demo-network + - kneldevstack-supportstack-demo-network ports: - "4009:3000" volumes: - - tsysdevstack-supportstack-demo_grafana_data:/var/lib/grafana + - kneldevstack-supportstack-demo_grafana_data:/var/lib/grafana + - ./config/grafana:/etc/grafana/provisioning:ro environment: - GF_SECURITY_ADMIN_USER=admin - GF_SECURITY_ADMIN_PASSWORD=demo_password - GF_INSTALL_PLUGINS=grafana-clock-panel,grafana-simple-json-datasource + - GF_SERVER_HTTP_PORT=3000 - PUID=1000 - PGID=1000 labels: @@ -223,14 +226,14 @@ services: # Draw.io - Diagramming Server drawio: image: fjudith/draw.io:latest - container_name: "tsysdevstack-supportstack-demo-drawio" + container_name: "kneldevstack-supportstack-demo-drawio" restart: unless-stopped networks: - - tsysdevstack-supportstack-demo-network + - kneldevstack-supportstack-demo-network ports: - "4010:8080" volumes: - - tsysdevstack-supportstack-demo_drawio_data:/root + - kneldevstack-supportstack-demo_drawio_data:/root environment: - PUID=1000 - PGID=1000 @@ -250,14 +253,14 @@ services: # Kroki - Diagrams as a Service kroki: image: yuzutech/kroki:latest - container_name: "tsysdevstack-supportstack-demo-kroki" + container_name: "kneldevstack-supportstack-demo-kroki" restart: unless-stopped networks: - - tsysdevstack-supportstack-demo-network + - kneldevstack-supportstack-demo-network ports: - "4011:8000" volumes: - - tsysdevstack-supportstack-demo_kroki_data:/data + - kneldevstack-supportstack-demo_kroki_data:/data environment: - KROKI_SAFE_MODE=secure - PUID=1000 @@ -278,14 +281,14 @@ services: # Atomic Tracker - Habit Tracking atomictracker: image: ghcr.io/majorpeter/atomic-tracker:v1.3.1 - container_name: "tsysdevstack-supportstack-demo-atomictracker" + container_name: "kneldevstack-supportstack-demo-atomictracker" restart: unless-stopped networks: - - tsysdevstack-supportstack-demo-network + - kneldevstack-supportstack-demo-network ports: - "4012:8080" volumes: - - tsysdevstack-supportstack-demo_atomictracker_data:/app/data + - kneldevstack-supportstack-demo_atomictracker_data:/app/data environment: - NODE_ENV=production - PUID=1000 @@ -306,16 +309,22 @@ services: # ArchiveBox - Web Archiving archivebox: image: archivebox/archivebox:latest - container_name: "tsysdevstack-supportstack-demo-archivebox" + container_name: "kneldevstack-supportstack-demo-archivebox" restart: unless-stopped networks: - - tsysdevstack-supportstack-demo-network + - kneldevstack-supportstack-demo-network ports: - "4013:8000" volumes: - - tsysdevstack-supportstack-demo_archivebox_data:/data + - kneldevstack-supportstack-demo_archivebox_data:/data environment: - - SECRET_KEY=demo_secret_replace_in_production + - ADMIN_USERNAME=admin + - ADMIN_PASSWORD=demo_password + - ALLOWED_HOSTS=* + - CSRF_TRUSTED_ORIGINS=http://localhost:4013 + - PUBLIC_INDEX=True + - PUBLIC_SNAPSHOTS=True + - PUBLIC_ADD_VIEW=False - PUID=1000 - PGID=1000 labels: @@ -325,48 +334,106 @@ services: homepage.href: "http://localhost:4013" homepage.description: "Web archiving solution" healthcheck: - test: ["CMD", "wget", "--no-verbose", "--tries=1", "--spider", - "http://localhost:8000"] + test: ["CMD", "curl", "-fsS", + "http://localhost:8000/health/"] + interval: 30s + timeout: 10s + retries: 5 + start_period: 60s + + # Tube Archivist - Redis + ta-redis: + image: redis:7-alpine + container_name: "kneldevstack-supportstack-demo-ta-redis" + restart: unless-stopped + networks: + - kneldevstack-supportstack-demo-network + volumes: + - kneldevstack-supportstack-demo_ta_redis_data:/data + healthcheck: + test: ["CMD", "redis-cli", "ping"] interval: 30s timeout: 10s retries: 3 + # Tube Archivist - Elasticsearch + ta-elasticsearch: + image: elasticsearch:8.12.0 + container_name: "kneldevstack-supportstack-demo-ta-elasticsearch" + restart: unless-stopped + networks: + - kneldevstack-supportstack-demo-network + volumes: + - kneldevstack-supportstack-demo_ta_es_data:/usr/share/elasticsearch/data + environment: + - discovery.type=single-node + - ES_JAVA_OPTS=-Xms512m -Xmx512m + - xpack.security.enabled=false + - xpack.security.http.ssl.enabled=false + - bootstrap.memory_lock=true + - path.repo=/usr/share/elasticsearch/data/snapshot + ulimits: + memlock: + soft: -1 + hard: -1 + healthcheck: + test: ["CMD-SHELL", "curl -sf http://localhost:9200/_cluster/health || exit 1"] + interval: 30s + timeout: 10s + retries: 10 + start_period: 60s + # Tube Archivist - YouTube Archiving tubearchivist: image: bbilly1/tubearchivist:latest - container_name: "tsysdevstack-supportstack-demo-tubearchivist" + container_name: "kneldevstack-supportstack-demo-tubearchivist" restart: unless-stopped networks: - - tsysdevstack-supportstack-demo-network + - kneldevstack-supportstack-demo-network ports: - "4014:8000" volumes: - - tsysdevstack-supportstack-demo_tubearchivist_data:/cache + - kneldevstack-supportstack-demo_tubearchivist_data:/cache environment: - - TA_HOST=tubearchivist - - TA_PORT=4014 - - TA_DEBUG=false - - TA_USERNAME=demo - - PUID=1000 - - PGID=1000 + - ES_URL=http://ta-elasticsearch:9200 + - REDIS_CON=redis://ta-redis:6379 + - ELASTIC_PASSWORD=demo_password + - HOST_UID=1000 + - HOST_GID=1000 + - TA_HOST=http://localhost:4014 + - TA_USERNAME=admin + - TA_PASSWORD=demo_password + - TZ=UTC + depends_on: + ta-redis: + condition: service_healthy + ta-elasticsearch: + condition: service_healthy labels: homepage.group: "Developer Tools" homepage.name: "Tube Archivist" homepage.icon: "tube-archivist" homepage.href: "http://localhost:4014" homepage.description: "YouTube video archiving" + healthcheck: + test: ["CMD", "curl", "-f", "--silent", + "http://localhost:8000/api/health/"] + interval: 30s + timeout: 10s + retries: 5 + start_period: 120s # Wakapi - Time Tracking wakapi: image: ghcr.io/muety/wakapi:latest - container_name: "tsysdevstack-supportstack-demo-wakapi" + container_name: "kneldevstack-supportstack-demo-wakapi" restart: unless-stopped networks: - - tsysdevstack-supportstack-demo-network + - kneldevstack-supportstack-demo-network ports: - "4015:3000" volumes: - - tsysdevstack-supportstack-demo_wakapi_data:/data + - kneldevstack-supportstack-demo_wakapi_data:/data environment: - WAKAPI_PASSWORD_SALT=demo_salt_replace_in_production - PUID=1000 @@ -378,8 +445,7 @@ services: homepage.href: "http://localhost:4015" homepage.description: "Open-source WakaTime alternative" healthcheck: - test: ["CMD", "wget", "--no-verbose", "--tries=1", "--spider", - "http://localhost:3000"] + test: ["CMD", "/app/healthcheck"] interval: 30s timeout: 10s retries: 3 @@ -387,14 +453,14 @@ services: # MailHog - Email Testing mailhog: image: mailhog/mailhog:latest - container_name: "tsysdevstack-supportstack-demo-mailhog" + container_name: "kneldevstack-supportstack-demo-mailhog" restart: unless-stopped networks: - - tsysdevstack-supportstack-demo-network + - kneldevstack-supportstack-demo-network ports: - "4017:8025" volumes: - - tsysdevstack-supportstack-demo_mailhog_data:/maildir + - kneldevstack-supportstack-demo_mailhog_data:/maildir environment: - PUID=1000 - PGID=1000 @@ -411,25 +477,35 @@ services: timeout: 10s retries: 3 - # Atuin - Shell History + # Atuin - Shell History Synchronization atuin: image: ghcr.io/atuinsh/atuin:v18.10.0 - container_name: "tsysdevstack-supportstack-demo-atuin" + container_name: "kneldevstack-supportstack-demo-atuin" restart: unless-stopped - command: server start + command: + - server + - start networks: - - tsysdevstack-supportstack-demo-network + - kneldevstack-supportstack-demo-network ports: - "4018:8888" volumes: - - tsysdevstack-supportstack-demo_atuin_data:/config + - kneldevstack-supportstack-demo_atuin_data:/config environment: + - ATUIN_HOST=0.0.0.0 + - ATUIN_PORT=8888 + - ATUIN_OPEN_REGISTRATION=true - ATUIN_DB_URI=sqlite:///config/atuin.db - - PUID=1000 - - PGID=1000 + - RUST_LOG=info,atuin_server=info labels: homepage.group: "Developer Tools" homepage.name: "Atuin" homepage.icon: "atuin" homepage.href: "http://localhost:4018" homepage.description: "Magical shell history synchronization" + healthcheck: + test: ["CMD", "bash", "-c", "echo > /dev/tcp/localhost/8888"] + interval: 30s + timeout: 10s + retries: 5 + start_period: 30s diff --git a/demo/docker-compose.yml.template b/demo/docker-compose.yml.template index 07865c9..6ee98da 100644 --- a/demo/docker-compose.yml.template +++ b/demo/docker-compose.yml.template @@ -1,8 +1,8 @@ --- # TSYS Developer Support Stack - Docker Compose Template -# Version: 1.0 +# Version: 2.0 # Purpose: Demo deployment with dynamic configuration -# ⚠️ DEMO CONFIGURATION ONLY - NOT FOR PRODUCTION +# DEMO CONFIGURATION ONLY - NOT FOR PRODUCTION networks: ${COMPOSE_NETWORK_NAME}: @@ -19,7 +19,6 @@ volumes: driver: local ${COMPOSE_PROJECT_NAME}_dockhand_data: driver: local - ${COMPOSE_PROJECT_NAME}_influxdb_data: driver: local ${COMPOSE_PROJECT_NAME}_grafana_data: @@ -34,6 +33,10 @@ volumes: driver: local ${COMPOSE_PROJECT_NAME}_tubearchivist_data: driver: local + ${COMPOSE_PROJECT_NAME}_ta_redis_data: + driver: local + ${COMPOSE_PROJECT_NAME}_ta_es_data: + driver: local ${COMPOSE_PROJECT_NAME}_wakapi_data: driver: local ${COMPOSE_PROJECT_NAME}_mailhog_data: @@ -67,8 +70,7 @@ services: homepage.group: "Infrastructure" homepage.name: "Docker Socket Proxy" homepage.icon: "docker" - homepage.href: "http://localhost:${DOCKER_SOCKET_PROXY_PORT}" - homepage.description: "Secure proxy for Docker socket access" + homepage.description: "Secure proxy for Docker socket access (internal only)" # Homepage - Central Dashboard homepage: @@ -81,6 +83,7 @@ services: - "${HOMEPAGE_PORT}:3000" volumes: - ${COMPOSE_PROJECT_NAME}_homepage_data:/app/config + - ./config/homepage:/app/config/default:ro environment: - PUID=${DEMO_UID} - PGID=${DEMO_GID} @@ -106,8 +109,6 @@ services: - ${COMPOSE_NETWORK_NAME} ports: - "${PIHOLE_PORT}:80" - - "53:53/tcp" - - "53:53/udp" volumes: - ${COMPOSE_PROJECT_NAME}_pihole_data:/etc/pihole environment: @@ -201,10 +202,12 @@ services: - "${GRAFANA_PORT}:3000" volumes: - ${COMPOSE_PROJECT_NAME}_grafana_data:/var/lib/grafana + - ./config/grafana:/etc/grafana/provisioning:ro environment: - GF_SECURITY_ADMIN_USER=${GF_SECURITY_ADMIN_USER} - GF_SECURITY_ADMIN_PASSWORD=${GF_SECURITY_ADMIN_PASSWORD} - GF_INSTALL_PLUGINS=${GF_INSTALL_PLUGINS} + - GF_SERVER_HTTP_PORT=3000 - PUID=${DEMO_UID} - PGID=${DEMO_GID} labels: @@ -315,7 +318,13 @@ services: volumes: - ${COMPOSE_PROJECT_NAME}_archivebox_data:/data environment: - - SECRET_KEY=${ARCHIVEBOX_SECRET_KEY} + - ADMIN_USERNAME=${ARCHIVEBOX_ADMIN_USER} + - ADMIN_PASSWORD=${ARCHIVEBOX_ADMIN_PASSWORD} + - ALLOWED_HOSTS=* + - CSRF_TRUSTED_ORIGINS=http://localhost:${ARCHIVEBOX_PORT} + - PUBLIC_INDEX=True + - PUBLIC_SNAPSHOTS=True + - PUBLIC_ADD_VIEW=False - PUID=${DEMO_UID} - PGID=${DEMO_GID} labels: @@ -325,12 +334,55 @@ services: homepage.href: "http://localhost:${ARCHIVEBOX_PORT}" homepage.description: "Web archiving solution" healthcheck: - test: ["CMD", "wget", "--no-verbose", "--tries=1", "--spider", - "http://localhost:8000"] + test: ["CMD", "curl", "-fsS", + "http://localhost:8000/health/"] + interval: ${HEALTH_CHECK_INTERVAL} + timeout: ${HEALTH_CHECK_TIMEOUT} + retries: 5 + start_period: 60s + + # Tube Archivist - Redis + ta-redis: + image: redis:7-alpine + container_name: "${COMPOSE_PROJECT_NAME}-ta-redis" + restart: unless-stopped + networks: + - ${COMPOSE_NETWORK_NAME} + volumes: + - ${COMPOSE_PROJECT_NAME}_ta_redis_data:/data + healthcheck: + test: ["CMD", "redis-cli", "ping"] interval: ${HEALTH_CHECK_INTERVAL} timeout: ${HEALTH_CHECK_TIMEOUT} retries: ${HEALTH_CHECK_RETRIES} + # Tube Archivist - Elasticsearch + ta-elasticsearch: + image: elasticsearch:8.12.0 + container_name: "${COMPOSE_PROJECT_NAME}-ta-elasticsearch" + restart: unless-stopped + networks: + - ${COMPOSE_NETWORK_NAME} + volumes: + - ${COMPOSE_PROJECT_NAME}_ta_es_data:/usr/share/elasticsearch/data + environment: + - discovery.type=single-node + - ES_JAVA_OPTS=${ES_JAVA_OPTS} + - xpack.security.enabled=false + - xpack.security.http.ssl.enabled=false + - bootstrap.memory_lock=true + - path.repo=/usr/share/elasticsearch/data/snapshot + ulimits: + memlock: + soft: -1 + hard: -1 + healthcheck: + test: ["CMD-SHELL", "curl -sf http://localhost:9200/_cluster/health || exit 1"] + interval: ${HEALTH_CHECK_INTERVAL} + timeout: ${HEALTH_CHECK_TIMEOUT} + retries: 10 + start_period: 60s + # Tube Archivist - YouTube Archiving tubearchivist: image: bbilly1/tubearchivist:latest @@ -343,18 +395,33 @@ services: volumes: - ${COMPOSE_PROJECT_NAME}_tubearchivist_data:/cache environment: + - ES_URL=http://ta-elasticsearch:9200 + - REDIS_CON=redis://ta-redis:6379 + - ELASTIC_PASSWORD=${ELASTIC_PASSWORD} + - HOST_UID=${DEMO_UID} + - HOST_GID=${DEMO_GID} - TA_HOST=${TA_HOST} - - TA_PORT=${TA_PORT} - - TA_DEBUG=${TA_DEBUG} - - TA_USERNAME=demo - - PUID=${DEMO_UID} - - PGID=${DEMO_GID} + - TA_USERNAME=${TA_USERNAME} + - TA_PASSWORD=${TA_PASSWORD} + - TZ=UTC + depends_on: + ta-redis: + condition: service_healthy + ta-elasticsearch: + condition: service_healthy labels: homepage.group: "Developer Tools" homepage.name: "Tube Archivist" homepage.icon: "tube-archivist" homepage.href: "http://localhost:${TUBE_ARCHIVIST_PORT}" homepage.description: "YouTube video archiving" + healthcheck: + test: ["CMD", "curl", "-f", "--silent", + "http://localhost:8000/api/health/"] + interval: ${HEALTH_CHECK_INTERVAL} + timeout: ${HEALTH_CHECK_TIMEOUT} + retries: 5 + start_period: 120s # Wakapi - Time Tracking wakapi: @@ -378,8 +445,7 @@ services: homepage.href: "http://localhost:${WAKAPI_PORT}" homepage.description: "Open-source WakaTime alternative" healthcheck: - test: ["CMD", "wget", "--no-verbose", "--tries=1", "--spider", - "http://localhost:3000"] + test: ["CMD", "/app/healthcheck"] interval: ${HEALTH_CHECK_INTERVAL} timeout: ${HEALTH_CHECK_TIMEOUT} retries: ${HEALTH_CHECK_RETRIES} @@ -411,12 +477,14 @@ services: timeout: ${HEALTH_CHECK_TIMEOUT} retries: ${HEALTH_CHECK_RETRIES} - # Atuin - Shell History + # Atuin - Shell History Synchronization atuin: image: ghcr.io/atuinsh/atuin:v18.10.0 container_name: "${COMPOSE_PROJECT_NAME}-atuin" restart: unless-stopped - command: server start + command: + - server + - start networks: - ${COMPOSE_NETWORK_NAME} ports: @@ -424,12 +492,20 @@ services: volumes: - ${COMPOSE_PROJECT_NAME}_atuin_data:/config environment: + - ATUIN_HOST=${ATUIN_HOST} + - ATUIN_PORT=8888 + - ATUIN_OPEN_REGISTRATION=${ATUIN_OPEN_REGISTRATION} - ATUIN_DB_URI=sqlite:///config/atuin.db - - PUID=${DEMO_UID} - - PGID=${DEMO_GID} + - RUST_LOG=info,atuin_server=info labels: homepage.group: "Developer Tools" homepage.name: "Atuin" homepage.icon: "atuin" homepage.href: "http://localhost:${ATUIN_PORT}" homepage.description: "Magical shell history synchronization" + healthcheck: + test: ["CMD", "bash", "-c", "echo > /dev/tcp/localhost/8888"] + interval: ${HEALTH_CHECK_INTERVAL} + timeout: ${HEALTH_CHECK_TIMEOUT} + retries: 5 + start_period: 30s