144 lines
4.2 KiB
Bash
Executable File
144 lines
4.2 KiB
Bash
Executable File
#!/bin/bash
|
|
|
|
# Ghost Chess Deployment Script for Oracle A1 Instance
|
|
# Usage: ./deploy.sh [OPTIONS]
|
|
# Options:
|
|
# --build-only Only build the Docker image
|
|
# --no-nginx Deploy without nginx reverse proxy
|
|
# --with-ssl Deploy with SSL (requires SSL certificates)
|
|
|
|
set -e
|
|
|
|
# Colors for output
|
|
RED='\033[0;31m'
|
|
GREEN='\033[0;32m'
|
|
YELLOW='\033[1;33m'
|
|
NC='\033[0m' # No Color
|
|
|
|
# Default settings
|
|
BUILD_ONLY=false
|
|
USE_NGINX=true
|
|
WITH_SSL=false
|
|
|
|
# Parse command line arguments
|
|
while [[ $# -gt 0 ]]; do
|
|
case $1 in
|
|
--build-only)
|
|
BUILD_ONLY=true
|
|
shift
|
|
;;
|
|
--no-nginx)
|
|
USE_NGINX=false
|
|
shift
|
|
;;
|
|
--with-ssl)
|
|
WITH_SSL=true
|
|
shift
|
|
;;
|
|
-h|--help)
|
|
echo "Usage: $0 [OPTIONS]"
|
|
echo "Options:"
|
|
echo " --build-only Only build the Docker image"
|
|
echo " --no-nginx Deploy without nginx reverse proxy"
|
|
echo " --with-ssl Deploy with SSL (requires SSL certificates)"
|
|
echo " -h, --help Show this help message"
|
|
exit 0
|
|
;;
|
|
*)
|
|
echo -e "${RED}Unknown option: $1${NC}"
|
|
exit 1
|
|
;;
|
|
esac
|
|
done
|
|
|
|
echo -e "${GREEN}🚀 Starting Ghost Chess deployment...${NC}"
|
|
|
|
# Check if Docker is installed and running
|
|
if ! command -v docker &> /dev/null; then
|
|
echo -e "${RED}❌ Docker is not installed. Please install Docker first.${NC}"
|
|
exit 1
|
|
fi
|
|
|
|
if ! docker info &> /dev/null; then
|
|
echo -e "${RED}❌ Docker is not running. Please start Docker first.${NC}"
|
|
exit 1
|
|
fi
|
|
|
|
# Check if docker-compose is available
|
|
if ! command -v docker-compose &> /dev/null && ! docker compose version &> /dev/null; then
|
|
echo -e "${RED}❌ Docker Compose is not available. Please install Docker Compose.${NC}"
|
|
exit 1
|
|
fi
|
|
|
|
# Use docker compose or docker-compose based on availability
|
|
COMPOSE_CMD="docker compose"
|
|
if ! docker compose version &> /dev/null; then
|
|
COMPOSE_CMD="docker-compose"
|
|
fi
|
|
|
|
echo -e "${YELLOW}📦 Building Docker images...${NC}"
|
|
|
|
# Build the application
|
|
if [ "$USE_NGINX" = true ]; then
|
|
if [ "$WITH_SSL" = true ]; then
|
|
echo -e "${YELLOW}🔒 Building with SSL support...${NC}"
|
|
$COMPOSE_CMD --profile production build
|
|
else
|
|
echo -e "${YELLOW}🌐 Building with nginx (HTTP only)...${NC}"
|
|
$COMPOSE_CMD --profile production build
|
|
fi
|
|
else
|
|
echo -e "${YELLOW}📱 Building application only...${NC}"
|
|
$COMPOSE_CMD build ghost-chess
|
|
fi
|
|
|
|
if [ "$BUILD_ONLY" = true ]; then
|
|
echo -e "${GREEN}✅ Build completed successfully!${NC}"
|
|
echo -e "${YELLOW}To deploy, run: $0${NC}"
|
|
exit 0
|
|
fi
|
|
|
|
echo -e "${YELLOW}🔧 Stopping existing containers...${NC}"
|
|
$COMPOSE_CMD down --remove-orphans
|
|
|
|
echo -e "${YELLOW}🚀 Starting deployment...${NC}"
|
|
|
|
# Deploy based on configuration
|
|
if [ "$USE_NGINX" = true ]; then
|
|
if [ "$WITH_SSL" = true ]; then
|
|
# Check if SSL certificates exist
|
|
if [ ! -d "./ssl" ] || [ ! -f "./ssl/cert.pem" ] || [ ! -f "./ssl/key.pem" ]; then
|
|
echo -e "${RED}❌ SSL certificates not found in ./ssl/ directory${NC}"
|
|
echo -e "${YELLOW}Please provide cert.pem and key.pem in ./ssl/ directory${NC}"
|
|
exit 1
|
|
fi
|
|
echo -e "${GREEN}🔒 Deploying with SSL...${NC}"
|
|
$COMPOSE_CMD --profile production up -d
|
|
else
|
|
echo -e "${GREEN}🌐 Deploying with nginx (HTTP only)...${NC}"
|
|
$COMPOSE_CMD --profile production up -d
|
|
fi
|
|
|
|
echo -e "${GREEN}✅ Deployment completed!${NC}"
|
|
echo -e "${YELLOW}📝 Application URLs:${NC}"
|
|
echo -e " - HTTP: http://$(curl -s ifconfig.me):80"
|
|
if [ "$WITH_SSL" = true ]; then
|
|
echo -e " - HTTPS: https://$(curl -s ifconfig.me):443"
|
|
fi
|
|
else
|
|
echo -e "${GREEN}📱 Deploying application only...${NC}"
|
|
$COMPOSE_CMD up -d ghost-chess
|
|
echo -e "${GREEN}✅ Deployment completed!${NC}"
|
|
echo -e "${YELLOW}📝 Application URL: http://$(curl -s ifconfig.me):3000${NC}"
|
|
fi
|
|
|
|
echo ""
|
|
echo -e "${GREEN}🎉 Ghost Chess is now running!${NC}"
|
|
echo -e "${YELLOW}📊 To check status: $COMPOSE_CMD ps${NC}"
|
|
echo -e "${YELLOW}📋 To view logs: $COMPOSE_CMD logs -f${NC}"
|
|
echo -e "${YELLOW}🛑 To stop: $COMPOSE_CMD down${NC}"
|
|
|
|
# Show running containers
|
|
echo ""
|
|
echo -e "${YELLOW}📋 Container Status:${NC}"
|
|
$COMPOSE_CMD ps |