From 45abd5c2e0b0f446e377f1acc0de4be47deae8f9 Mon Sep 17 00:00:00 2001 From: ReachableCEO Date: Sat, 24 Jan 2026 10:53:23 -0500 Subject: [PATCH] refactor(demo): replace Portainer with Dockhand MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Replace Portainer container management service with Dockhand: - Update docker-compose.yml.template with Dockhand service definition - Replace portainer_data volume with dockhand_data - Update PORTAINER_PORT to DOCKHAND_PORT in demo.env - Update all script references (demo-stack.sh, demo-test.sh, validate-all.sh) - Update integration test from Portainer to Dockhand - Update documentation files (README.md, AGENTS.md, api-docs, service-guides, troubleshooting) Dockhand provides modern Docker management UI with: - Container lifecycle management - Compose stack orchestration - Git-based deployments - Multi-environment support - Terminal access and log streaming - File browser capabilities Maintains same port (4007) for consistency. 💘 Generated with Crush Assisted-by: GLM-4.7 via Crush --- AGENTS.md | 2 +- demo/README.md | 2 +- demo/demo.env | 4 +-- demo/docker-compose.yml.template | 26 ++++++++++--------- demo/docs/api-docs/README.md | 18 +++++++------ demo/docs/service-guides/README.md | 4 +-- demo/docs/troubleshooting/README.md | 14 +++++----- demo/scripts/demo-stack.sh | 2 +- demo/scripts/demo-test.sh | 2 +- demo/scripts/validate-all.sh | 2 +- .../integration/test_service_communication.sh | 12 ++++----- 11 files changed, 46 insertions(+), 42 deletions(-) diff --git a/AGENTS.md b/AGENTS.md index 4aa180b..be61ae3 100644 --- a/AGENTS.md +++ b/AGENTS.md @@ -34,7 +34,7 @@ TSYSDevStack-SupportStack-LocalWorkstation/ │ │ ├── homepage/ # Homepage dashboard config │ │ ├── grafana/ # Grafana dashboards/datasources │ │ ├── pihole/ # Pi-hole configuration -│ │ ├── portainer/ # Portainer configuration +│ │ ├── dockhand/ # Dockhand configuration │ │ ├── influxdb/ # InfluxDB configuration │ │ ├── drawio/ # Draw.io configuration │ │ ├── kroki/ # Kroki configuration diff --git a/demo/README.md b/demo/README.md index e4c811f..d54ae6d 100644 --- a/demo/README.md +++ b/demo/README.md @@ -95,7 +95,7 @@ All configuration is managed through `demo.env` and dynamic detection: | Service | Port | Description | 🌐 Access | |---------|------|-------------|-----------| | **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) | +| **Dockhand** | 4007 | Modern Docker management UI | [Open](http://192.168.3.6:4007) | ### 📊 Monitoring & Observability | Service | Port | Description | 🌐 Access | diff --git a/demo/demo.env b/demo/demo.env index 0265c45..3b9c04d 100644 --- a/demo/demo.env +++ b/demo/demo.env @@ -12,7 +12,7 @@ DEMO_DOCKER_GID=996 HOMEPAGE_PORT=4000 DOCKER_SOCKET_PROXY_PORT=4005 PIHOLE_PORT=4006 -PORTAINER_PORT=4007 +DOCKHAND_PORT=4007 INFLUXDB_PORT=4008 GRAFANA_PORT=4009 DRAWIO_PORT=4010 @@ -28,7 +28,7 @@ ATUIN_PORT=4018 DEMO_ADMIN_USER=admin DEMO_ADMIN_PASSWORD=demo_password DEMO_GRAFANA_ADMIN_PASSWORD=demo_password -DEMO_PORTAINER_PASSWORD=demo_password +DEMO_DOCKHAND_PASSWORD=demo_password # Network Configuration NETWORK_SUBNET=192.168.3.0/24 diff --git a/demo/docker-compose.yml.template b/demo/docker-compose.yml.template index 5a6c565..f81b0f8 100644 --- a/demo/docker-compose.yml.template +++ b/demo/docker-compose.yml.template @@ -17,8 +17,9 @@ volumes: driver: local ${COMPOSE_PROJECT_NAME}_pihole_data: driver: local - ${COMPOSE_PROJECT_NAME}_portainer_data: + ${COMPOSE_PROJECT_NAME}_dockhand_data: driver: local + ${COMPOSE_PROJECT_NAME}_influxdb_data: driver: local ${COMPOSE_PROJECT_NAME}_grafana_data: @@ -128,29 +129,30 @@ services: timeout: ${HEALTH_CHECK_TIMEOUT} retries: ${HEALTH_CHECK_RETRIES} - # Portainer - Container Management - portainer: - image: portainer/portainer-ce:latest - container_name: "${COMPOSE_PROJECT_NAME}-portainer" + # Dockhand - Docker Management + dockhand: + image: fnsys/dockhand:latest + container_name: "${COMPOSE_PROJECT_NAME}-dockhand" restart: unless-stopped networks: - ${COMPOSE_NETWORK_NAME} ports: - - "${PORTAINER_PORT}:9000" + - "${DOCKHAND_PORT}:3000" volumes: - - ${COMPOSE_PROJECT_NAME}_portainer_data:/data + - ${COMPOSE_PROJECT_NAME}_dockhand_data:/app/data + - /var/run/docker.sock:/var/run/docker.sock environment: - PUID=${DEMO_UID} - PGID=${DEMO_GID} labels: homepage.group: "Infrastructure" - homepage.name: "Portainer" - homepage.icon: "portainer" - homepage.href: "http://localhost:${PORTAINER_PORT}" - homepage.description: "Web-based container management" + homepage.name: "Dockhand" + homepage.icon: "dockhand" + homepage.href: "http://localhost:${DOCKHAND_PORT}" + homepage.description: "Modern Docker management UI" healthcheck: test: ["CMD", "wget", "--no-verbose", "--tries=1", "--spider", - "http://localhost:9000"] + "http://localhost:3000"] interval: ${HEALTH_CHECK_INTERVAL} timeout: ${HEALTH_CHECK_TIMEOUT} retries: ${HEALTH_CHECK_RETRIES} diff --git a/demo/docs/api-docs/README.md b/demo/docs/api-docs/README.md index 382aa92..1a79ba2 100644 --- a/demo/docs/api-docs/README.md +++ b/demo/docs/api-docs/README.md @@ -25,15 +25,17 @@ This document provides API endpoint information for all services in the stack. - `GET /admin/api.php?list` - Blocked domains list - `GET /admin/api.php?summaryRaw` - Raw statistics -### Portainer +### Dockhand - **Base URL**: `http://localhost:4007` -- **API Version**: v2 -- **Authentication**: Bearer token -- **Endpoints**: - - `POST /api/auth` - Authentication - - `GET /api/endpoints` - List endpoints - - `GET /api/containers` - List containers - - `GET /api/images` - List images +- **Authentication**: Direct Docker API access +- **Features**: + - Container lifecycle management + - Compose stack orchestration + - Git-based deployments + - Multi-environment support + - Terminal access + - Log streaming + - File browser ## Monitoring & Observability APIs diff --git a/demo/docs/service-guides/README.md b/demo/docs/service-guides/README.md index 19fb688..89fb0a0 100644 --- a/demo/docs/service-guides/README.md +++ b/demo/docs/service-guides/README.md @@ -18,7 +18,7 @@ All services are accessible through the Homepage dashboard at http://localhost:4 ### 🏗️ Infrastructure Services - **Pi-hole** (Port 4006): DNS management with ad blocking -- **Portainer** (Port 4007): Web-based container management +- **Dockhand** (Port 4007): Modern Docker management UI - **Docker Socket Proxy** (Port 4005): Secure Docker socket access ### 📊 Monitoring & Observability @@ -45,7 +45,7 @@ All services are accessible through the Homepage dashboard at http://localhost:4 - **Username**: `admin` - **Password**: `demo_password` -These credentials work for Grafana and Portainer. Other services may have different authentication requirements. +These credentials work for Grafana and Dockhand. Other services may have different authentication requirements. ## Getting Help diff --git a/demo/docs/troubleshooting/README.md b/demo/docs/troubleshooting/README.md index bfca380..bf611b4 100644 --- a/demo/docs/troubleshooting/README.md +++ b/demo/docs/troubleshooting/README.md @@ -121,18 +121,18 @@ docker compose logs grafana # Navigate to: http://localhost:4009/datasources ``` -#### Portainer Container Access +#### Dockhand Container Access **Symptoms**: Can't manage containers **Solution**: ```bash -# Check Docker socket proxy -docker compose logs docker-socket-proxy +# Check Dockhand logs +docker compose logs dockhand -# Verify proxy permissions -curl http://localhost:4005/version +# Verify Docker socket access +docker exec tsysdevstack-supportstack-demo-dockhand docker version -# Restart Portainer -docker compose restart portainer +# Restart Dockhand +docker compose restart dockhand ``` ### Performance Issues diff --git a/demo/scripts/demo-stack.sh b/demo/scripts/demo-stack.sh index 2b32ed9..36a88f5 100755 --- a/demo/scripts/demo-stack.sh +++ b/demo/scripts/demo-stack.sh @@ -184,7 +184,7 @@ display_summary() { echo "📊 Homepage Dashboard: http://localhost:${HOMEPAGE_PORT:-4000}" echo "🏗️ Infrastructure Services:" echo " - Pi-hole (DNS): http://localhost:${PIHOLE_PORT:-4006}" - echo " - Portainer (Containers): http://localhost:${PORTAINER_PORT:-4007}" + echo " - Dockhand (Containers): http://localhost:${DOCKHAND_PORT:-4007}" echo "📊 Monitoring & Observability:" echo " - InfluxDB (Database): http://localhost:${INFLUXDB_PORT:-4008}" echo " - Grafana (Visualization): http://localhost:${GRAFANA_PORT:-4009}" diff --git a/demo/scripts/demo-test.sh b/demo/scripts/demo-test.sh index c09fa4e..5d04931 100755 --- a/demo/scripts/demo-test.sh +++ b/demo/scripts/demo-test.sh @@ -180,7 +180,7 @@ test_port_accessibility() { "$HOMEPAGE_PORT:Homepage" "$DOCKER_SOCKET_PROXY_PORT:Docker Socket Proxy" "$PIHOLE_PORT:Pi-hole" - "$PORTAINER_PORT:Portainer" + "$DOCKHAND_PORT:Dockhand" "$INFLUXDB_PORT:InfluxDB" "$GRAFANA_PORT:Grafana" "$DRAWIO_PORT:Draw.io" diff --git a/demo/scripts/validate-all.sh b/demo/scripts/validate-all.sh index 8e31b53..f1e206f 100755 --- a/demo/scripts/validate-all.sh +++ b/demo/scripts/validate-all.sh @@ -118,7 +118,7 @@ validate_port_availability() { "$HOMEPAGE_PORT" "$DOCKER_SOCKET_PROXY_PORT" "$PIHOLE_PORT" - "$PORTAINER_PORT" + "$DOCKHAND_PORT" "$INFLUXDB_PORT" "$GRAFANA_PORT" "$DRAWIO_PORT" diff --git a/demo/tests/integration/test_service_communication.sh b/demo/tests/integration/test_service_communication.sh index 790ab16..4718b0c 100755 --- a/demo/tests/integration/test_service_communication.sh +++ b/demo/tests/integration/test_service_communication.sh @@ -15,13 +15,13 @@ test_grafana_influxdb_integration() { fi } -test_portainer_docker_integration() { - # Test Portainer can reach Docker socket - if docker exec tsysdevstack-supportstack-demo-portainer docker version >/dev/null 2>&1; then - echo "PASS: Portainer-Docker integration" +test_dockhand_docker_integration() { + # Test Dockhand can reach Docker socket + if docker exec tsysdevstack-supportstack-demo-dockhand docker version >/dev/null 2>&1; then + echo "PASS: Dockhand-Docker integration" return 0 else - echo "FAIL: Portainer-Docker integration" + echo "FAIL: Dockhand-Docker integration" return 1 fi } @@ -41,5 +41,5 @@ test_homepage_discovery() { # Run integration tests test_grafana_influxdb_integration -test_portainer_docker_integration +test_dockhand_docker_integration test_homepage_discovery \ No newline at end of file