mirror of
https://github.com/Dvorinka/Trackeep.git
synced 2026-06-03 20:12:58 +00:00
b083dac3f0
Add real API support in demo mode with credential checking, implement build-time version injection from package.json, and refactor update checking with 24-hour caching. Migrate landing page from Vue to Astro with comprehensive UI components including Hero, Features, Benefits, and Tech Stack sections. Update CI/CD workflow with expanded cache paths and security scanner version pinned.
229 lines
5.6 KiB
Bash
Executable File
229 lines
5.6 KiB
Bash
Executable File
#!/bin/bash
|
|
|
|
# Trackkeep Landing Page - Docker Deployment Script
|
|
|
|
set -e
|
|
|
|
# Colors for output
|
|
RED='\033[0;31m'
|
|
GREEN='\033[0;32m'
|
|
YELLOW='\033[1;33m'
|
|
NC='\033[0m' # No Color
|
|
|
|
# Configuration
|
|
IMAGE_NAME="trackeep-landing"
|
|
CONTAINER_NAME="trackeep-landing-container"
|
|
PORT="8080"
|
|
|
|
# Functions
|
|
log_info() {
|
|
echo -e "${GREEN}[INFO]${NC} $1"
|
|
}
|
|
|
|
log_warn() {
|
|
echo -e "${YELLOW}[WARN]${NC} $1"
|
|
}
|
|
|
|
log_error() {
|
|
echo -e "${RED}[ERROR]${NC} $1"
|
|
}
|
|
|
|
# Check if Docker is installed
|
|
check_docker() {
|
|
if ! command -v docker &> /dev/null; then
|
|
log_error "Docker is not installed. Please install Docker first."
|
|
exit 1
|
|
fi
|
|
|
|
if ! command -v docker-compose &> /dev/null; then
|
|
log_error "Docker Compose is not installed. Please install Docker Compose first."
|
|
exit 1
|
|
fi
|
|
|
|
log_info "Docker and Docker Compose are installed"
|
|
}
|
|
|
|
# Build the Docker image
|
|
build_image() {
|
|
log_info "Building Docker image..."
|
|
docker build -t $IMAGE_NAME .
|
|
log_info "Docker image built successfully"
|
|
}
|
|
|
|
# Run the container
|
|
run_container() {
|
|
log_info "Starting container..."
|
|
|
|
# Stop and remove existing container if it exists
|
|
if docker ps -a --format 'table {{.Names}}' | grep -q "^$CONTAINER_NAME$"; then
|
|
log_warn "Container $CONTAINER_NAME already exists. Stopping and removing..."
|
|
docker stop $CONTAINER_NAME 2>/dev/null || true
|
|
docker rm $CONTAINER_NAME 2>/dev/null || true
|
|
fi
|
|
|
|
# Run new container
|
|
docker run -d \
|
|
--name $CONTAINER_NAME \
|
|
-p $PORT:80 \
|
|
--restart unless-stopped \
|
|
$IMAGE_NAME
|
|
|
|
log_info "Container started successfully"
|
|
log_info "Landing page is available at: http://localhost:$PORT"
|
|
}
|
|
|
|
# Health check
|
|
health_check() {
|
|
log_info "Performing health check..."
|
|
|
|
# Wait for container to start
|
|
sleep 5
|
|
|
|
# Check if container is running
|
|
if ! docker ps --format 'table {{.Names}}' | grep -q "^$CONTAINER_NAME$"; then
|
|
log_error "Container is not running"
|
|
exit 1
|
|
fi
|
|
|
|
# Check health endpoint
|
|
if curl -f http://localhost:$PORT/health > /dev/null 2>&1; then
|
|
log_info "Health check passed"
|
|
else
|
|
log_warn "Health check failed, but container is running"
|
|
fi
|
|
}
|
|
|
|
# Show logs
|
|
show_logs() {
|
|
log_info "Showing container logs (press Ctrl+C to exit)..."
|
|
docker logs -f $CONTAINER_NAME
|
|
}
|
|
|
|
# Stop container
|
|
stop_container() {
|
|
log_info "Stopping container..."
|
|
docker stop $CONTAINER_NAME 2>/dev/null || true
|
|
docker rm $CONTAINER_NAME 2>/dev/null || true
|
|
log_info "Container stopped and removed"
|
|
}
|
|
|
|
# Clean up
|
|
cleanup() {
|
|
log_info "Cleaning up..."
|
|
|
|
# Stop and remove container
|
|
stop_container
|
|
|
|
# Remove image
|
|
if docker images --format 'table {{.Repository}}' | grep -q "^$IMAGE_NAME$"; then
|
|
docker rmi $IMAGE_NAME 2>/dev/null || true
|
|
log_info "Docker image removed"
|
|
fi
|
|
|
|
log_info "Cleanup completed"
|
|
}
|
|
|
|
# Deploy with Docker Compose
|
|
deploy_compose() {
|
|
log_info "Deploying with Docker Compose..."
|
|
|
|
# Stop existing services
|
|
docker-compose down 2>/dev/null || true
|
|
|
|
# Build and start services
|
|
docker-compose up -d --build
|
|
|
|
log_info "Deployment completed"
|
|
log_info "Landing page is available at: http://localhost:8080"
|
|
}
|
|
|
|
# Deploy with SSL (Traefik)
|
|
deploy_ssl() {
|
|
log_info "Deploying with SSL (Traefik)..."
|
|
|
|
# Create letsencrypt directory if it doesn't exist
|
|
mkdir -p letsencrypt
|
|
|
|
# Stop existing services
|
|
docker-compose --profile ssl down 2>/dev/null || true
|
|
|
|
# Build and start services with SSL profile
|
|
docker-compose --profile ssl up -d --build
|
|
|
|
log_info "SSL deployment completed"
|
|
log_info "Landing page is available at: https://trackeep.org"
|
|
log_info "Traefik dashboard: http://localhost:8081"
|
|
}
|
|
|
|
# Show help
|
|
show_help() {
|
|
echo "Trackkeep Landing Page - Docker Deployment Script"
|
|
echo ""
|
|
echo "Usage: $0 [COMMAND]"
|
|
echo ""
|
|
echo "Commands:"
|
|
echo " build Build Docker image"
|
|
echo " run Run container"
|
|
echo " deploy Build and run container"
|
|
echo " compose Deploy with Docker Compose"
|
|
echo " ssl Deploy with SSL (Traefik)"
|
|
echo " logs Show container logs"
|
|
echo " health Perform health check"
|
|
echo " stop Stop container"
|
|
echo " cleanup Stop container and remove image"
|
|
echo " help Show this help message"
|
|
echo ""
|
|
echo "Examples:"
|
|
echo " $0 deploy # Build and run container"
|
|
echo " $0 compose # Deploy with Docker Compose"
|
|
echo " $0 ssl # Deploy with SSL"
|
|
echo " $0 logs # Show logs"
|
|
echo " $0 cleanup # Clean up everything"
|
|
}
|
|
|
|
# Main script
|
|
main() {
|
|
case "${1:-help}" in
|
|
"build")
|
|
check_docker
|
|
build_image
|
|
;;
|
|
"run")
|
|
check_docker
|
|
run_container
|
|
;;
|
|
"deploy")
|
|
check_docker
|
|
build_image
|
|
run_container
|
|
health_check
|
|
;;
|
|
"compose")
|
|
check_docker
|
|
deploy_compose
|
|
;;
|
|
"ssl")
|
|
check_docker
|
|
deploy_ssl
|
|
;;
|
|
"logs")
|
|
show_logs
|
|
;;
|
|
"health")
|
|
health_check
|
|
;;
|
|
"stop")
|
|
stop_container
|
|
;;
|
|
"cleanup")
|
|
cleanup
|
|
;;
|
|
"help"|*)
|
|
show_help
|
|
;;
|
|
esac
|
|
}
|
|
|
|
# Run main function with all arguments
|
|
main "$@"
|