- Add Atuin v18.10.0 service with PostgreSQL 14 database backend - Configure Atuin server on port 4018 with open registration for demo - Add PostgreSQL database service with proper health checks - Update demo-stack.sh status display to include Atuin URL - Update README.md service table with Atuin entry - Add Atuin configuration variables to demo.env - Use TCP socket health check for Atuin (no curl available in container) - Atuin server accessible and responding with version info - All services including Atuin now operational and healthy
163 lines
5.0 KiB
Bash
Executable File
163 lines
5.0 KiB
Bash
Executable File
#!/bin/bash
|
|
|
|
# =============================================================================
|
|
# TSYS Developer Support Stack - Demo Deployment Script
|
|
# =============================================================================
|
|
#
|
|
# This script dynamically detects user environment and deploys the demo stack
|
|
# with proper permissions, naming conventions, and security settings.
|
|
#
|
|
# Usage: ./demo-stack.sh [deploy|stop|restart|status]
|
|
# =============================================================================
|
|
|
|
set -euo pipefail
|
|
|
|
# =============================================================================
|
|
# CONFIGURATION
|
|
# =============================================================================
|
|
|
|
# Colors for output
|
|
RED='\033[0;31m'
|
|
GREEN='\033[0;32m'
|
|
YELLOW='\033[1;33m'
|
|
BLUE='\033[0;34m'
|
|
NC='\033[0m' # No Color
|
|
|
|
# Script directory
|
|
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
|
cd "$SCRIPT_DIR"
|
|
|
|
# =============================================================================
|
|
# DYNAMIC DETECTION
|
|
# =============================================================================
|
|
|
|
echo -e "${BLUE}🔍 Detecting environment...${NC}"
|
|
|
|
# Load environment variables
|
|
# shellcheck source=demo.env
|
|
if [[ -f "demo.env" ]]; then
|
|
set -a
|
|
source demo.env
|
|
set +a
|
|
echo -e "${GREEN}✅ Loaded demo.env${NC}"
|
|
else
|
|
echo -e "${RED}❌ demo.env not found!${NC}"
|
|
exit 1
|
|
fi
|
|
|
|
# Dynamic user and group detection
|
|
APP_UID=$(id -u)
|
|
export APP_UID
|
|
APP_GID=$(id -g)
|
|
export APP_GID
|
|
DOCKER_GID=$(getent group docker 2>/dev/null | cut -d: -f3 || echo "972")
|
|
export DOCKER_GID
|
|
|
|
echo -e "${GREEN}👤 User ID: ${APP_UID}${NC}"
|
|
echo -e "${GREEN}👥 Group ID: ${APP_GID}${NC}"
|
|
echo -e "${GREEN}🐳 Docker Group ID: ${DOCKER_GID}${NC}"
|
|
|
|
# Validate docker group access
|
|
if ! groups | grep -q docker; then
|
|
echo -e "${YELLOW}⚠️ Warning: User not in docker group${NC}"
|
|
echo -e "${YELLOW} Docker socket proxy may not work correctly${NC}"
|
|
fi
|
|
|
|
# =============================================================================
|
|
# FUNCTIONS
|
|
# =============================================================================
|
|
|
|
deploy_stack() {
|
|
echo -e "${BLUE}🚀 Deploying TSYS Developer Support Stack Demo...${NC}"
|
|
|
|
# Generate docker-compose.yml from template
|
|
if [[ -f "docker-compose.yml.template" ]]; then
|
|
echo -e "${BLUE}📝 Generating docker-compose.yml...${NC}"
|
|
envsubst < docker-compose.yml.template > docker-compose.yml
|
|
echo -e "${GREEN}✅ docker-compose.yml generated${NC}"
|
|
else
|
|
echo -e "${RED}❌ docker-compose.yml.template not found!${NC}"
|
|
exit 1
|
|
fi
|
|
|
|
# Network will be created by docker compose
|
|
echo -e "${BLUE}🌐 Docker network will be created by compose...${NC}"
|
|
|
|
# Deploy services
|
|
echo -e "${BLUE}🐳 Starting services...${NC}"
|
|
docker compose up -d
|
|
|
|
echo -e "${GREEN}✅ Stack deployed successfully!${NC}"
|
|
echo -e "${BLUE}🌐 Access Homepage at: http://localhost:${HOMEPAGE_PORT}${NC}"
|
|
}
|
|
|
|
stop_stack() {
|
|
echo -e "${YELLOW}🛑 Stopping TSYS Developer Support Stack Demo...${NC}"
|
|
docker compose down
|
|
echo -e "${GREEN}✅ Stack stopped${NC}"
|
|
}
|
|
|
|
restart_stack() {
|
|
echo -e "${BLUE}🔄 Restarting TSYS Developer Support Stack Demo...${NC}"
|
|
stop_stack
|
|
sleep 2
|
|
deploy_stack
|
|
}
|
|
|
|
show_status() {
|
|
echo -e "${BLUE}📊 Stack Status:${NC}"
|
|
docker compose ps
|
|
|
|
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} Atuin: http://localhost:${ATUIN_PORT}${NC}"
|
|
echo -e "${GREEN} Grafana: http://localhost:${GRAFANA_PORT}${NC}"
|
|
echo -e "${GREEN} Portainer: http://localhost:${PORTAINER_PORT}${NC}"
|
|
}
|
|
|
|
show_help() {
|
|
echo -e "${BLUE}TSYS Developer Support Stack - Demo Deployment${NC}"
|
|
echo ""
|
|
echo -e "${YELLOW}Usage:${NC} $0 [command]"
|
|
echo ""
|
|
echo -e "${YELLOW}Commands:${NC}"
|
|
echo -e " ${GREEN}deploy${NC} Deploy the demo stack"
|
|
echo -e " ${GREEN}stop${NC} Stop all services"
|
|
echo -e " ${GREEN}restart${NC} Restart all services"
|
|
echo -e " ${GREEN}status${NC} Show service status and URLs"
|
|
echo -e " ${GREEN}help${NC} Show this help message"
|
|
echo ""
|
|
echo -e "${YELLOW}Examples:${NC}"
|
|
echo -e " $0 deploy"
|
|
echo -e " $0 status"
|
|
}
|
|
|
|
# =============================================================================
|
|
# MAIN EXECUTION
|
|
# =============================================================================
|
|
|
|
case "${1:-help}" in
|
|
deploy)
|
|
deploy_stack
|
|
;;
|
|
stop)
|
|
stop_stack
|
|
;;
|
|
restart)
|
|
restart_stack
|
|
;;
|
|
status)
|
|
show_status
|
|
;;
|
|
help|--help|-h)
|
|
show_help
|
|
;;
|
|
*)
|
|
echo -e "${RED}❌ Unknown command: $1${NC}"
|
|
show_help
|
|
exit 1
|
|
;;
|
|
esac |