Files
happy-life-star/packages/emotion-museum-1.0.0-20250713_123404/deploy.sh
T

258 lines
5.6 KiB
Bash
Executable File

#!/bin/bash
# 情绪博物馆容器部署脚本
# 作者: EmotionMuseum Team
# 版本: 1.0.0
# 日期: 2025-07-13
set -e
# 颜色定义
RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
BLUE='\033[0;34m'
NC='\033[0m' # No Color
# 日志函数
log_info() {
echo -e "${GREEN}[INFO]${NC} $1"
}
log_warn() {
echo -e "${YELLOW}[WARN]${NC} $1"
}
log_error() {
echo -e "${RED}[ERROR]${NC} $1"
}
log_step() {
echo -e "${BLUE}[STEP]${NC} $1"
}
# 检查Docker和Docker Compose
check_requirements() {
log_step "检查系统要求..."
if ! command -v docker &> /dev/null; then
log_error "Docker未安装,请先安装Docker"
exit 1
fi
if ! command -v docker-compose &> /dev/null; then
log_error "Docker Compose未安装,请先安装Docker Compose"
exit 1
fi
log_info "Docker和Docker Compose检查通过"
}
# 创建必要的目录
create_directories() {
log_step "创建部署目录..."
mkdir -p deploy/{mysql/conf.d,redis,nginx/{conf.d,ssl},logs}
mkdir -p data/{mysql,redis,nacos}
log_info "目录创建完成"
}
# 生成配置文件
generate_configs() {
log_step "生成配置文件..."
# MySQL配置
if [ ! -f "deploy/mysql/conf.d/my.cnf" ]; then
cat > deploy/mysql/conf.d/my.cnf << 'EOF'
[mysqld]
character-set-server=utf8mb4
collation-server=utf8mb4_unicode_ci
default-time-zone='+8:00'
max_connections=1000
max_allowed_packet=64M
innodb_buffer_pool_size=512M
innodb_log_file_size=256M
slow_query_log=1
slow_query_log_file=/var/log/mysql/slow.log
long_query_time=2
EOF
log_info "MySQL配置文件已生成"
fi
# Redis配置
if [ ! -f "deploy/redis/redis.conf" ]; then
cat > deploy/redis/redis.conf << 'EOF'
bind 0.0.0.0
port 6379
timeout 300
tcp-keepalive 60
maxmemory 256mb
maxmemory-policy allkeys-lru
save 900 1
save 300 10
save 60 10000
appendonly yes
appendfsync everysec
EOF
log_info "Redis配置文件已生成"
fi
}
# 构建镜像
build_images() {
log_step "构建Docker镜像..."
log_info "构建后端服务镜像..."
docker-compose build gateway ai-service user-service
log_info "构建前端应用镜像..."
docker-compose build web
log_info "镜像构建完成"
}
# 启动服务
start_services() {
log_step "启动服务..."
# 先启动基础服务
log_info "启动基础服务 (MySQL, Redis, Nacos)..."
docker-compose up -d mysql redis nacos
# 等待基础服务启动
log_info "等待基础服务启动完成..."
sleep 30
# 启动应用服务
log_info "启动应用服务..."
docker-compose up -d gateway ai-service user-service
# 等待应用服务启动
log_info "等待应用服务启动完成..."
sleep 20
# 启动前端和Nginx
log_info "启动前端和Nginx..."
docker-compose up -d web nginx
log_info "所有服务启动完成"
}
# 检查服务状态
check_services() {
log_step "检查服务状态..."
echo ""
docker-compose ps
echo ""
# 检查关键服务健康状态
log_info "检查服务健康状态..."
# 检查MySQL
if docker-compose exec -T mysql mysqladmin ping -h localhost -u root -p123456 &> /dev/null; then
log_info "✅ MySQL服务正常"
else
log_warn "❌ MySQL服务异常"
fi
# 检查Redis
if docker-compose exec -T redis redis-cli ping | grep -q PONG; then
log_info "✅ Redis服务正常"
else
log_warn "❌ Redis服务异常"
fi
# 检查Nacos
if curl -s http://localhost:8848/nacos/v1/ns/operator/metrics &> /dev/null; then
log_info "✅ Nacos服务正常"
else
log_warn "❌ Nacos服务异常"
fi
# 检查网关
if curl -s http://localhost:9000/actuator/health &> /dev/null; then
log_info "✅ 网关服务正常"
else
log_warn "❌ 网关服务异常"
fi
}
# 显示访问信息
show_access_info() {
log_step "部署完成!"
echo ""
echo "🎉 情绪博物馆部署成功!"
echo ""
echo "📱 访问地址:"
echo " 前端应用: http://localhost"
echo " API网关: http://localhost:9000"
echo " Nacos: http://localhost:8848/nacos (用户名/密码: nacos/nacos)"
echo ""
echo "🔧 管理命令:"
echo " 查看日志: docker-compose logs -f [服务名]"
echo " 停止服务: docker-compose down"
echo " 重启服务: docker-compose restart [服务名]"
echo ""
echo "📊 监控命令:"
echo " 查看状态: docker-compose ps"
echo " 查看资源: docker stats"
echo ""
}
# 主函数
main() {
echo "🚀 开始部署情绪博物馆..."
echo ""
check_requirements
create_directories
generate_configs
build_images
start_services
echo ""
log_info "等待服务完全启动..."
sleep 10
check_services
show_access_info
}
# 处理命令行参数
case "${1:-}" in
"build")
log_info "仅构建镜像..."
check_requirements
create_directories
generate_configs
build_images
;;
"start")
log_info "启动服务..."
start_services
check_services
show_access_info
;;
"stop")
log_info "停止服务..."
docker-compose down
;;
"restart")
log_info "重启服务..."
docker-compose restart
check_services
;;
"logs")
docker-compose logs -f
;;
"status")
check_services
;;
*)
main
;;
esac