258 lines
5.6 KiB
Bash
Executable File
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
|