Files
CapacityReport/dist/deploy.sh
T

241 lines
6.1 KiB
Bash

#!/bin/bash
# CapacityReport Deployment Script
# Run this script on offline machine to import images and start services
set -e
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
cd "$SCRIPT_DIR"
echo "=========================================="
echo "CapacityReport Deployment"
echo "=========================================="
echo ""
# Set permissions for dist directory and make scripts executable
echo "Setting permissions..."
chmod -R 0777 "$SCRIPT_DIR" 2>/dev/null || true
find "$SCRIPT_DIR" -type f \( -name "*.sh" -o -name "*.py" \) -exec chmod +x {} \; 2>/dev/null || true
echo " Permissions set"
echo ""
# Check Docker
if ! command -v docker &> /dev/null; then
echo "Error: Docker not found, please install Docker"
exit 1
fi
# Check Docker Compose
DOCKER_COMPOSE_CMD=""
if docker compose version &> /dev/null; then
DOCKER_COMPOSE_CMD="docker compose"
elif command -v docker-compose &> /dev/null; then
DOCKER_COMPOSE_CMD="docker-compose"
else
echo "Error: Docker Compose not found, please install Docker Compose"
exit 1
fi
# Check image file
if [ ! -f "images/capacity-images.tar" ]; then
echo "Error: Image file not found: images/capacity-images.tar"
exit 1
fi
echo "Step 1: Checking ports..."
# 检查端口是否被占用
check_port() {
local port=$1
local name=$2
local in_use=false
# 尝试多种方法检查端口
if command -v lsof &> /dev/null; then
if lsof -Pi :$port -sTCP:LISTEN -t >/dev/null 2>&1; then
in_use=true
fi
elif command -v netstat &> /dev/null; then
if netstat -tuln 2>/dev/null | grep -q ":$port "; then
in_use=true
fi
elif command -v ss &> /dev/null; then
if ss -tuln 2>/dev/null | grep -q ":$port "; then
in_use=true
fi
fi
if [ "$in_use" = true ]; then
echo "Warning: Port $port ($name) is in use"
read -p "Continue? (y/n) " -n 1 -r
echo
if [[ ! $REPLY =~ ^[Yy]$ ]]; then
exit 1
fi
fi
}
check_port 19081 "App"
check_port 13306 "MySQL"
echo ""
echo "Step 2: Loading images..."
docker load -i images/capacity-images.tar >/dev/null 2>&1
echo ""
echo "Step 3: Verifying images..."
if docker images | grep -q "capacity-report-app.*latest"; then
echo " App image: OK"
else
echo " App image: FAILED"
exit 1
fi
if docker images | grep -q "capacity-mysql.*8.0.44"; then
echo " MySQL image: OK"
else
echo " MySQL image: FAILED"
exit 1
fi
echo ""
echo "Step 4: Creating directories..."
mkdir -p cache logs
chmod 777 cache logs 2>/dev/null || true
echo ""
echo "Step 5: Checking config..."
if [ ! -f "Configure.json" ]; then
echo " Creating default Configure.json..."
cat > Configure.json << 'EOF'
{
"MySQL_DBInfo": {
"host": "capacity-mysql",
"port": 3306,
"user": "root",
"passwd": "gmcc123",
"dbname": "CapacityReport"
},
"ExtractField": []
}
EOF
else
# Update config for Docker environment
if command -v python3 &> /dev/null || command -v python &> /dev/null; then
(command -v python3 >/dev/null && python3 || python) << 'PYEOF'
import json
import sys
try:
with open('Configure.json', 'r', encoding='utf-8') as f:
config = json.load(f)
db_info = config.get('MySQL_DBInfo', {})
needs_update = False
if db_info.get('host') != 'capacity-mysql':
db_info['host'] = 'capacity-mysql'
needs_update = True
if db_info.get('port') != 3306:
db_info['port'] = 3306
needs_update = True
if db_info.get('user') != 'root':
db_info['user'] = 'root'
needs_update = True
if db_info.get('passwd') != 'gmcc123':
db_info['passwd'] = 'gmcc123'
needs_update = True
if db_info.get('dbname') != 'CapacityReport':
db_info['dbname'] = 'CapacityReport'
needs_update = True
if needs_update:
with open('Configure.json', 'w', encoding='utf-8') as f:
json.dump(config, f, ensure_ascii=False, indent=2)
print(" Updated Configure.json")
except:
pass
PYEOF
fi
fi
if [ ! -f "ReportScript.sql" ]; then
touch ReportScript.sql
fi
echo ""
echo "Step 6: Starting services..."
$DOCKER_COMPOSE_CMD down 2>/dev/null || true
$DOCKER_COMPOSE_CMD up -d >/dev/null 2>&1
echo ""
echo "Step 7: Waiting for services..."
for i in {1..30}; do
if docker exec capacity-mysql mysqladmin ping -h localhost -u root -pgmcc123 --silent 2>/dev/null; then
echo " MySQL: Ready"
break
fi
if [ $i -eq 30 ]; then
echo " MySQL: Timeout"
exit 1
fi
sleep 2
done
if command -v curl &> /dev/null; then
for i in {1..30}; do
if curl -f http://localhost:19081/health >/dev/null 2>&1; then
echo " App: Ready"
break
fi
if [ $i -eq 30 ]; then
echo " App: Timeout"
echo " Check logs: $DOCKER_COMPOSE_CMD logs capacity-app"
exit 1
fi
sleep 2
done
else
for i in {1..30}; do
if docker ps --filter "name=capacity-report-app" --filter "status=running" --format "{{.Names}}" | grep -q "capacity-report-app"; then
if docker inspect capacity-report-app --format='{{.State.Health.Status}}' 2>/dev/null | grep -q "healthy"; then
echo " App: Ready"
break
elif [ $i -gt 10 ]; then
echo " App: Running"
break
fi
fi
if [ $i -eq 30 ]; then
echo " App: Timeout"
exit 1
fi
sleep 2
done
fi
echo ""
echo "=========================================="
echo "Deployment completed!"
echo "=========================================="
echo ""
echo "Access: http://localhost:19081"
echo ""
echo "Commands:"
echo " Logs: $DOCKER_COMPOSE_CMD logs -f"
echo " Stop: $DOCKER_COMPOSE_CMD down"
echo " Restart: $DOCKER_COMPOSE_CMD restart"
echo " Status: $DOCKER_COMPOSE_CMD ps"
echo ""
echo "Database:"
echo " Host: localhost"
echo " Port: 13306"
echo " User: root"
echo " Password: gmcc123"
echo " Database: CapacityReport"
echo ""