fetch_ml/deployments/deploy.sh

162 lines
4.2 KiB
Bash
Executable file

#!/bin/bash
# Quick deployment script for fetch_ml
set -e
# Colors for output
RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
BLUE='\033[0;34m'
NC='\033[0m' # No Color
# Function to print colored output
print_status() {
echo -e "${BLUE}[INFO]${NC} $1"
}
print_success() {
echo -e "${GREEN}[SUCCESS]${NC} $1"
}
print_warning() {
echo -e "${YELLOW}[WARNING]${NC} $1"
}
print_error() {
echo -e "${RED}[ERROR]${NC} $1"
}
# Function to show usage
show_usage() {
echo "Usage: $0 [ENVIRONMENT] [ACTION]"
echo ""
echo "Environments:"
echo " dev Development environment"
echo " secure Secure homelab environment"
echo " prod Production environment"
echo ""
echo "Actions:"
echo " up Start services"
echo " down Stop services"
echo " restart Restart services"
echo " logs Show logs"
echo " status Show status"
echo ""
echo "Examples:"
echo " $0 dev up # Start development environment"
echo " $0 prod down # Stop production environment"
echo " $0 secure logs # Show secure environment logs"
}
# Function to check if docker-compose file exists
check_compose_file() {
local env=$1
local compose_file=""
case $env in
"dev")
compose_file="deployments/docker-compose.dev.yml"
;;
"secure")
compose_file="deployments/docker-compose.homelab-secure.yml"
;;
"prod")
compose_file="deployments/docker-compose.prod.yml"
;;
*)
print_error "Unknown environment: $env"
show_usage
exit 1
;;
esac
if [ ! -f "$compose_file" ]; then
print_error "Docker Compose file not found: $compose_file"
exit 1
fi
echo "$compose_file"
}
# Function to check if .env file exists
check_env_file() {
local env=$1
if [ ! -f ".env" ]; then
print_warning ".env file not found. Creating from example..."
if [ "$env" = "dev" ]; then
cp deployments/env.dev.example .env
elif [ "$env" = "prod" ]; then
cp deployments/env.prod.example .env
else
cp deployments/env.dev.example .env
fi
print_warning "Please edit .env file with your configuration"
fi
}
# Main script
main() {
if [ $# -ne 2 ]; then
show_usage
exit 1
fi
local environment=$1
local action=$2
print_status "Environment: $environment"
print_status "Action: $action"
# Check compose file
compose_file=$(check_compose_file "$environment")
print_status "Using: $compose_file"
# Check .env file
check_env_file "$environment"
# Execute action
case $action in
"up")
print_status "Starting $environment environment..."
docker-compose -f "$compose_file" up -d
print_success "$environment environment started successfully!"
# Show service URLs
echo ""
print_status "Service URLs:"
echo " API Server: http://localhost:9101"
if [ "$environment" = "dev" ]; then
echo " Grafana: http://localhost:3000 (admin/admin123)"
echo " Prometheus: http://localhost:9090"
fi
;;
"down")
print_status "Stopping $environment environment..."
docker-compose -f "$compose_file" down
print_success "$environment environment stopped successfully!"
;;
"restart")
print_status "Restarting $environment environment..."
docker-compose -f "$compose_file" restart
print_success "$environment environment restarted successfully!"
;;
"logs")
print_status "Showing logs for $environment environment..."
docker-compose -f "$compose_file" logs -f
;;
"status")
print_status "Status of $environment environment:"
docker-compose -f "$compose_file" ps
;;
*)
print_error "Unknown action: $action"
show_usage
exit 1
;;
esac
}
# Run main function
main "$@"