iitwelders/deploy.sh

172 lines
4.2 KiB
Bash

#!/bin/bash
# Deployment script for IIT Welders
# This script handles the deployment process
set -e
# Configuration
APP_NAME="iitwelders"
DOCKER_COMPOSE_FILE="docker-compose.yml"
DOCKER_COMPOSE_DEV_FILE="docker-compose.dev.yml"
# 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 check if Docker is running
check_docker() {
if ! docker info > /dev/null 2>&1; then
print_error "Docker is not running. Please start Docker and try again."
exit 1
fi
print_success "Docker is running"
}
# Function to build and deploy
deploy() {
local environment=${1:-production}
print_status "Starting deployment for $environment environment..."
# Check Docker
check_docker
# Stop existing containers
print_status "Stopping existing containers..."
if [ "$environment" = "development" ]; then
docker-compose -f $DOCKER_COMPOSE_DEV_FILE down || true
else
docker-compose -f $DOCKER_COMPOSE_FILE down || true
fi
# Remove old images
print_status "Cleaning up old images..."
docker image prune -f
# Build and start containers
print_status "Building and starting containers..."
if [ "$environment" = "development" ]; then
docker-compose -f $DOCKER_COMPOSE_DEV_FILE up --build -d
else
docker-compose -f $DOCKER_COMPOSE_FILE up --build -d
fi
# Wait for application to start
print_status "Waiting for application to start..."
sleep 10
# Run health check
if [ -f "./healthcheck.sh" ]; then
print_status "Running health check..."
chmod +x ./healthcheck.sh
./healthcheck.sh
fi
print_success "Deployment completed successfully!"
if [ "$environment" = "development" ]; then
print_status "Application is available at: http://localhost:8080"
else
print_status "Application is available at: http://localhost:3000"
print_status "With Nginx at: http://localhost"
fi
}
# Function to show logs
show_logs() {
local environment=${1:-production}
if [ "$environment" = "development" ]; then
docker-compose -f $DOCKER_COMPOSE_DEV_FILE logs -f
else
docker-compose -f $DOCKER_COMPOSE_FILE logs -f
fi
}
# Function to stop application
stop() {
local environment=${1:-production}
print_status "Stopping $environment environment..."
if [ "$environment" = "development" ]; then
docker-compose -f $DOCKER_COMPOSE_DEV_FILE down
else
docker-compose -f $DOCKER_COMPOSE_FILE down
fi
print_success "Application stopped"
}
# Function to show status
status() {
print_status "Container status:"
docker ps --filter "name=$APP_NAME" --format "table {{.Names}}\t{{.Status}}\t{{.Ports}}"
}
# Main script logic
case "${1:-deploy}" in
"deploy")
deploy "${2:-production}"
;;
"dev")
deploy "development"
;;
"logs")
show_logs "${2:-production}"
;;
"stop")
stop "${2:-production}"
;;
"status")
status
;;
"help"|"-h"|"--help")
echo "Usage: $0 [command] [environment]"
echo ""
echo "Commands:"
echo " deploy Deploy to production (default)"
echo " dev Deploy to development"
echo " logs Show application logs"
echo " stop Stop application"
echo " status Show container status"
echo " help Show this help message"
echo ""
echo "Environments:"
echo " production Production environment (default)"
echo " development Development environment"
echo ""
echo "Examples:"
echo " $0 deploy production"
echo " $0 dev"
echo " $0 logs development"
echo " $0 stop"
;;
*)
print_error "Unknown command: $1"
echo "Use '$0 help' for usage information"
exit 1
;;
esac