diff --git a/backend/deploy-all.sh b/backend/deploy-all.sh index d2942f6..3deac18 100755 --- a/backend/deploy-all.sh +++ b/backend/deploy-all.sh @@ -51,8 +51,11 @@ SERVICES=( "emotion-ai:19002" "emotion-record:19003" "emotion-growth:19004" + "emotion-explore:19005" + "emotion-reward:19006" "emotion-websocket:19007" "emotion-auth:19008" + "emotion-stats:19009" ) # 部署状态跟踪 @@ -182,7 +185,7 @@ deploy_service() { -e REDIS_DATABASE=0 \\ -e NACOS_SERVER_ADDR=47.111.10.27:8848 \\ -e NACOS_USERNAME=nacos \\ - -e NACOS_PASSWORD=Peanut2817*# \\ + -e NACOS_PASSWORD='Peanut2817*#' \\ --restart unless-stopped \\ ${PROJECT_NAME}/${service_name}:latest " @@ -196,7 +199,7 @@ deploy_service() { log_success "服务 $service_name 启动成功" # 显示容器日志 - log_info "显示服务日志 (最后10行): $service_name" + log_info "显示服务日志 最后10行: $service_name" ssh 'root@47.111.10.27' "docker logs --tail 10 ${service_name}" 2>/dev/null || true # 记录成功状态 diff --git a/backend/emotion-ai/deploy.sh b/backend/emotion-ai/deploy.sh index 1e7ab5a..47491b6 100755 --- a/backend/emotion-ai/deploy.sh +++ b/backend/emotion-ai/deploy.sh @@ -9,7 +9,7 @@ set -e # 配置变量 SERVICE_NAME="emotion-ai" SERVICE_PORT="19002" -REMOTE_HOST="root@47.111.10.27" +REMOTE_HOST="'root@47.111.10.27'" REMOTE_BUILD_DIR="/data/builds" REMOTE_DOCKER_COMPOSE_DIR="/data/docker" PROFILE="test" @@ -119,7 +119,7 @@ deploy_service() { # 上传新jar包 log_info "上传jar包" - if scp "$jar_file" 'root@47.111.10.27':$REMOTE_BUILD_DIR/${SERVICE_NAME}-1.0.0.jar"; then + if scp "$jar_file" 'root@47.111.10.27':$REMOTE_BUILD_DIR/${SERVICE_NAME}-1.0.0.jar; then log_success "jar包上传成功" else log_error "jar包上传失败" @@ -160,15 +160,14 @@ deploy_service() { -e MYSQL_PORT=3306 \\ -e MYSQL_DATABASE=emotion_museum \\ -e MYSQL_USERNAME=root \\ - -e MYSQL_PASSWORD='EmotionMuseum2025*#' \ + -e MYSQL_PASSWORD='EmotionMuseum2025*#' \\ -e REDIS_HOST=47.111.10.27 \\ -e REDIS_PORT=6379 \\ -e REDIS_PASSWORD= \\ -e REDIS_DATABASE=0 \\ -e NACOS_SERVER_ADDR=47.111.10.27:8848 \\ -e NACOS_USERNAME=nacos \\ - -e NACOS_PASSWORD=Peanut2817*# \\ - -e COZE_API_TOKEN=\${COZE_API_TOKEN} \\ + -e NACOS_PASSWORD='Peanut2817*#' \\ --restart unless-stopped \\ ${PROJECT_NAME}/${SERVICE_NAME}:latest " @@ -182,7 +181,7 @@ deploy_service() { log_success "服务启动成功" # 显示日志 - log_info "服务日志 (最后20行):" + log_info "服务日志 最后20行:" ssh 'root@47.111.10.27' "docker logs --tail 20 ${SERVICE_NAME}" # 健康检查 diff --git a/backend/emotion-auth/deploy.sh b/backend/emotion-auth/deploy.sh index e718042..17c003c 100755 --- a/backend/emotion-auth/deploy.sh +++ b/backend/emotion-auth/deploy.sh @@ -8,8 +8,8 @@ set -e # 配置变量 SERVICE_NAME="emotion-auth" -SERVICE_PORT="19008" -REMOTE_HOST="root@47.111.10.27" +SERVICE_PORT="" +REMOTE_HOST="'root@47.111.10.27'" REMOTE_BUILD_DIR="/data/builds" REMOTE_DOCKER_COMPOSE_DIR="/data/docker" PROFILE="test" @@ -119,7 +119,7 @@ deploy_service() { # 上传新jar包 log_info "上传jar包" - if scp "$jar_file" 'root@47.111.10.27':$REMOTE_BUILD_DIR/${SERVICE_NAME}-1.0.0.jar"; then + if scp "$jar_file" 'root@47.111.10.27':$REMOTE_BUILD_DIR/${SERVICE_NAME}-1.0.0.jar; then log_success "jar包上传成功" else log_error "jar包上传失败" @@ -160,15 +160,14 @@ deploy_service() { -e MYSQL_PORT=3306 \\ -e MYSQL_DATABASE=emotion_museum \\ -e MYSQL_USERNAME=root \\ - -e MYSQL_PASSWORD='EmotionMuseum2025*#' \ + -e MYSQL_PASSWORD='EmotionMuseum2025*#' \\ -e REDIS_HOST=47.111.10.27 \\ -e REDIS_PORT=6379 \\ -e REDIS_PASSWORD= \\ -e REDIS_DATABASE=0 \\ -e NACOS_SERVER_ADDR=47.111.10.27:8848 \\ -e NACOS_USERNAME=nacos \\ - -e NACOS_PASSWORD=Peanut2817*# \\ - -e JWT_SECRET=emotion-museum-secret-key-2025 \\ + -e NACOS_PASSWORD='Peanut2817*#' \\ --restart unless-stopped \\ ${PROJECT_NAME}/${SERVICE_NAME}:latest " @@ -182,7 +181,7 @@ deploy_service() { log_success "服务启动成功" # 显示日志 - log_info "服务日志 (最后20行):" + log_info "服务日志 最后20行:" ssh 'root@47.111.10.27' "docker logs --tail 20 ${SERVICE_NAME}" # 健康检查 diff --git a/backend/emotion-explore/deploy.sh b/backend/emotion-explore/deploy.sh new file mode 100755 index 0000000..37352a9 --- /dev/null +++ b/backend/emotion-explore/deploy.sh @@ -0,0 +1,218 @@ +#!/bin/bash + +# emotion-explore 单独部署脚本 +# 作者: emotion-museum +# 日期: 2025-07-18 + +set -e + +# 配置变量 +SERVICE_NAME="emotion-explore" +SERVICE_PORT="19005" +REMOTE_HOST="'root@47.111.10.27'" +REMOTE_BUILD_DIR="/data/builds" +REMOTE_DOCKER_COMPOSE_DIR="/data/docker" +PROFILE="test" +PROJECT_NAME="emotion-museum" + +# 颜色输出 +RED='\033[0;31m' +GREEN='\033[0;32m' +YELLOW='\033[1;33m' +BLUE='\033[0;34m' +NC='\033[0m' + +# 日志函数 +log_info() { + echo -e "${BLUE}[INFO]${NC} $(date '+%Y-%m-%d %H:%M:%S') - $1" +} + +log_success() { + echo -e "${GREEN}[SUCCESS]${NC} $(date '+%Y-%m-%d %H:%M:%S') - $1" +} + +log_warning() { + echo -e "${YELLOW}[WARNING]${NC} $(date '+%Y-%m-%d %H:%M:%S') - $1" +} + +log_error() { + echo -e "${RED}[ERROR]${NC} $(date '+%Y-%m-%d %H:%M:%S') - $1" +} + +# 检查远程服务器连接 +check_remote_connection() { + log_info "检查远程服务器连接..." + if ssh -o ConnectTimeout=10 'root@47.111.10.27' "echo 'Connection successful'" > /dev/null 2>&1; then + log_success "远程服务器连接正常" + else + log_error "无法连接到远程服务器 'root@47.111.10.27'" + exit 1 + fi +} + +# 构建服务 +build_service() { + log_info "构建服务: $SERVICE_NAME" + + # 构建父项目依赖 + cd .. + mvn clean install -DskipTests -q + cd $SERVICE_NAME + + # 构建当前服务 + if mvn clean package -DskipTests -Ptest -q; then + log_success "服务 $SERVICE_NAME 构建成功" + else + log_error "服务 $SERVICE_NAME 构建失败" + exit 1 + fi +} + +# 创建Dockerfile +create_dockerfile() { + log_info "创建Dockerfile: $SERVICE_NAME" + + ssh 'root@47.111.10.27' "cat > $REMOTE_DOCKER_COMPOSE_DIR/Dockerfile.${SERVICE_NAME} << 'EOF' +FROM openjdk:17-jre-slim + +WORKDIR /app + +RUN apt-get update && apt-get install -y curl && rm -rf /var/lib/apt/lists/* + +COPY $REMOTE_BUILD_DIR/${SERVICE_NAME}-1.0.0.jar app.jar + +RUN mkdir -p /app/logs + +ENV TZ=Asia/Shanghai +RUN ln -snf /usr/share/zoneinfo/\$TZ /etc/localtime && echo \$TZ > /etc/timezone + +EXPOSE ${SERVICE_PORT} + +HEALTHCHECK --interval=30s --timeout=10s --start-period=60s --retries=3 \\ + CMD curl -f http://localhost:${SERVICE_PORT}/actuator/health || exit 1 + +ENTRYPOINT [\"java\", \"-Djava.security.egd=file:/dev/./urandom\", \"-Xms512m\", \"-Xmx1024m\", \"-jar\", \"app.jar\"] +EOF" +} + +# 部署服务 +deploy_service() { + log_info "开始部署服务: $SERVICE_NAME" + + # 检查jar包 + local jar_file="target/${SERVICE_NAME}-1.0.0.jar" + if [ ! -f "$jar_file" ]; then + log_error "JAR包不存在: $jar_file" + exit 1 + fi + + # 创建远程目录 + ssh 'root@47.111.10.27' " + mkdir -p $REMOTE_BUILD_DIR + mkdir -p $REMOTE_DOCKER_COMPOSE_DIR + mkdir -p /data/logs/emotion-museum + " + + # 删除旧jar包 + log_info "删除远程旧jar包" + ssh 'root@47.111.10.27' "rm -f $REMOTE_BUILD_DIR/${SERVICE_NAME}-*.jar" + + # 上传新jar包 + log_info "上传jar包" + if scp "$jar_file" 'root@47.111.10.27':$REMOTE_BUILD_DIR/${SERVICE_NAME}-1.0.0.jar; then + log_success "jar包上传成功" + else + log_error "jar包上传失败" + exit 1 + fi + + # 创建Dockerfile + create_dockerfile + + # 停止旧容器 + log_info "停止旧容器" + ssh 'root@47.111.10.27' " + docker stop ${SERVICE_NAME} 2>/dev/null || true + docker rm ${SERVICE_NAME} 2>/dev/null || true + docker rmi ${PROJECT_NAME}/${SERVICE_NAME}:latest 2>/dev/null || true + " + + # 创建Docker网络 + ssh 'root@47.111.10.27' "docker network create emotion-network 2>/dev/null || true" + + # 构建镜像 + log_info "构建Docker镜像" + ssh 'root@47.111.10.27' " + cd $REMOTE_DOCKER_COMPOSE_DIR + docker build -t ${PROJECT_NAME}/${SERVICE_NAME}:latest -f Dockerfile.${SERVICE_NAME} . + " + + # 启动容器 + log_info "启动新容器" + ssh 'root@47.111.10.27' " + docker run -d \\ + --name ${SERVICE_NAME} \\ + --network emotion-network \\ + -p ${SERVICE_PORT}:${SERVICE_PORT} \\ + -v /data/logs/emotion-museum:/app/logs \\ + -e SPRING_PROFILES_ACTIVE=${PROFILE} \\ + -e MYSQL_HOST=47.111.10.27 \\ + -e MYSQL_PORT=3306 \\ + -e MYSQL_DATABASE=emotion_museum \\ + -e MYSQL_USERNAME=root \\ + -e MYSQL_PASSWORD='EmotionMuseum2025*#' \\ + -e REDIS_HOST=47.111.10.27 \\ + -e REDIS_PORT=6379 \\ + -e REDIS_PASSWORD= \\ + -e REDIS_DATABASE=0 \\ + -e NACOS_SERVER_ADDR=47.111.10.27:8848 \\ + -e NACOS_USERNAME=nacos \\ + -e NACOS_PASSWORD='Peanut2817*#' \\ + --restart unless-stopped \\ + ${PROJECT_NAME}/${SERVICE_NAME}:latest + " + + # 等待启动 + log_info "等待服务启动..." + sleep 15 + + # 检查状态 + if ssh 'root@47.111.10.27' "docker ps | grep ${SERVICE_NAME}" > /dev/null; then + log_success "服务启动成功" + + # 显示日志 + log_info "服务日志 最后20行:" + ssh 'root@47.111.10.27' "docker logs --tail 20 ${SERVICE_NAME}" + + # 健康检查 + log_info "执行健康检查..." + sleep 10 + if ssh 'root@47.111.10.27' "curl -f -s http://localhost:${SERVICE_PORT}/actuator/health" > /dev/null 2>&1; then + log_success "健康检查通过" + else + log_warning "健康检查失败,服务可能仍在启动中" + fi + else + log_error "服务启动失败" + ssh 'root@47.111.10.27' "docker logs ${SERVICE_NAME}" + exit 1 + fi +} + +# 主函数 +main() { + log_info "开始部署 $SERVICE_NAME 服务" + log_info "目标服务器: $REMOTE_HOST" + log_info "服务端口: $SERVICE_PORT" + log_info "部署环境: $PROFILE" + + check_remote_connection + build_service + deploy_service + + log_success "$SERVICE_NAME 服务部署完成!" + log_info "访问地址: http://47.111.10.27:$SERVICE_PORT" +} + +# 执行主函数 +main "$@" diff --git a/backend/emotion-gateway/deploy.sh b/backend/emotion-gateway/deploy.sh index a574502..b28d24b 100755 --- a/backend/emotion-gateway/deploy.sh +++ b/backend/emotion-gateway/deploy.sh @@ -9,7 +9,7 @@ set -e # 配置变量 SERVICE_NAME="emotion-gateway" SERVICE_PORT="19000" -REMOTE_HOST="root@47.111.10.27" +REMOTE_HOST="'root@47.111.10.27'" REMOTE_BUILD_DIR="/data/builds" REMOTE_DOCKER_COMPOSE_DIR="/data/docker" PROFILE="test" @@ -119,7 +119,7 @@ deploy_service() { # 上传新jar包 log_info "上传jar包" - if scp "$jar_file" 'root@47.111.10.27':$REMOTE_BUILD_DIR/${SERVICE_NAME}-1.0.0.jar"; then + if scp "$jar_file" 'root@47.111.10.27':$REMOTE_BUILD_DIR/${SERVICE_NAME}-1.0.0.jar; then log_success "jar包上传成功" else log_error "jar包上传失败" @@ -167,7 +167,7 @@ deploy_service() { -e REDIS_DATABASE=0 \\ -e NACOS_SERVER_ADDR=47.111.10.27:8848 \\ -e NACOS_USERNAME=nacos \\ - -e NACOS_PASSWORD=Peanut2817*# \\ + -e NACOS_PASSWORD='Peanut2817*#' \\ --restart unless-stopped \\ ${PROJECT_NAME}/${SERVICE_NAME}:latest " @@ -181,7 +181,7 @@ deploy_service() { log_success "服务启动成功" # 显示日志 - log_info "服务日志 (最后20行):" + log_info "服务日志 最后20行:" ssh 'root@47.111.10.27' "docker logs --tail 20 ${SERVICE_NAME}" # 健康检查 diff --git a/backend/emotion-growth/deploy.sh b/backend/emotion-growth/deploy.sh index f966eec..8fbadeb 100755 --- a/backend/emotion-growth/deploy.sh +++ b/backend/emotion-growth/deploy.sh @@ -9,7 +9,7 @@ set -e # 配置变量 SERVICE_NAME="emotion-growth" SERVICE_PORT="19004" -REMOTE_HOST="root@47.111.10.27" +REMOTE_HOST="'root@47.111.10.27'" REMOTE_BUILD_DIR="/data/builds" REMOTE_DOCKER_COMPOSE_DIR="/data/docker" PROFILE="test" @@ -119,7 +119,7 @@ deploy_service() { # 上传新jar包 log_info "上传jar包" - if scp "$jar_file" 'root@47.111.10.27':$REMOTE_BUILD_DIR/${SERVICE_NAME}-1.0.0.jar"; then + if scp "$jar_file" 'root@47.111.10.27':$REMOTE_BUILD_DIR/${SERVICE_NAME}-1.0.0.jar; then log_success "jar包上传成功" else log_error "jar包上传失败" @@ -160,14 +160,14 @@ deploy_service() { -e MYSQL_PORT=3306 \\ -e MYSQL_DATABASE=emotion_museum \\ -e MYSQL_USERNAME=root \\ - -e MYSQL_PASSWORD='EmotionMuseum2025*#' \ + -e MYSQL_PASSWORD='EmotionMuseum2025*#' \\ -e REDIS_HOST=47.111.10.27 \\ -e REDIS_PORT=6379 \\ -e REDIS_PASSWORD= \\ -e REDIS_DATABASE=0 \\ -e NACOS_SERVER_ADDR=47.111.10.27:8848 \\ -e NACOS_USERNAME=nacos \\ - -e NACOS_PASSWORD=Peanut2817*# \\ + -e NACOS_PASSWORD='Peanut2817*#' \\ --restart unless-stopped \\ ${PROJECT_NAME}/${SERVICE_NAME}:latest " @@ -181,7 +181,7 @@ deploy_service() { log_success "服务启动成功" # 显示日志 - log_info "服务日志 (最后20行):" + log_info "服务日志 最后20行:" ssh 'root@47.111.10.27' "docker logs --tail 20 ${SERVICE_NAME}" # 健康检查 diff --git a/backend/emotion-record/deploy.sh b/backend/emotion-record/deploy.sh index a897cb8..963e97a 100755 --- a/backend/emotion-record/deploy.sh +++ b/backend/emotion-record/deploy.sh @@ -9,7 +9,7 @@ set -e # 配置变量 SERVICE_NAME="emotion-record" SERVICE_PORT="19003" -REMOTE_HOST="root@47.111.10.27" +REMOTE_HOST="'root@47.111.10.27'" REMOTE_BUILD_DIR="/data/builds" REMOTE_DOCKER_COMPOSE_DIR="/data/docker" PROFILE="test" @@ -119,7 +119,7 @@ deploy_service() { # 上传新jar包 log_info "上传jar包" - if scp "$jar_file" 'root@47.111.10.27':$REMOTE_BUILD_DIR/${SERVICE_NAME}-1.0.0.jar"; then + if scp "$jar_file" 'root@47.111.10.27':$REMOTE_BUILD_DIR/${SERVICE_NAME}-1.0.0.jar; then log_success "jar包上传成功" else log_error "jar包上传失败" @@ -160,14 +160,14 @@ deploy_service() { -e MYSQL_PORT=3306 \\ -e MYSQL_DATABASE=emotion_museum \\ -e MYSQL_USERNAME=root \\ - -e MYSQL_PASSWORD='EmotionMuseum2025*#' \ + -e MYSQL_PASSWORD='EmotionMuseum2025*#' \\ -e REDIS_HOST=47.111.10.27 \\ -e REDIS_PORT=6379 \\ -e REDIS_PASSWORD= \\ -e REDIS_DATABASE=0 \\ -e NACOS_SERVER_ADDR=47.111.10.27:8848 \\ -e NACOS_USERNAME=nacos \\ - -e NACOS_PASSWORD=Peanut2817*# \\ + -e NACOS_PASSWORD='Peanut2817*#' \\ --restart unless-stopped \\ ${PROJECT_NAME}/${SERVICE_NAME}:latest " @@ -181,7 +181,7 @@ deploy_service() { log_success "服务启动成功" # 显示日志 - log_info "服务日志 (最后20行):" + log_info "服务日志 最后20行:" ssh 'root@47.111.10.27' "docker logs --tail 20 ${SERVICE_NAME}" # 健康检查 diff --git a/backend/emotion-reward/deploy.sh b/backend/emotion-reward/deploy.sh new file mode 100755 index 0000000..f1ab3ca --- /dev/null +++ b/backend/emotion-reward/deploy.sh @@ -0,0 +1,218 @@ +#!/bin/bash + +# emotion-reward 单独部署脚本 +# 作者: emotion-museum +# 日期: 2025-07-18 + +set -e + +# 配置变量 +SERVICE_NAME="emotion-reward" +SERVICE_PORT="19006" +REMOTE_HOST="'root@47.111.10.27'" +REMOTE_BUILD_DIR="/data/builds" +REMOTE_DOCKER_COMPOSE_DIR="/data/docker" +PROFILE="test" +PROJECT_NAME="emotion-museum" + +# 颜色输出 +RED='\033[0;31m' +GREEN='\033[0;32m' +YELLOW='\033[1;33m' +BLUE='\033[0;34m' +NC='\033[0m' + +# 日志函数 +log_info() { + echo -e "${BLUE}[INFO]${NC} $(date '+%Y-%m-%d %H:%M:%S') - $1" +} + +log_success() { + echo -e "${GREEN}[SUCCESS]${NC} $(date '+%Y-%m-%d %H:%M:%S') - $1" +} + +log_warning() { + echo -e "${YELLOW}[WARNING]${NC} $(date '+%Y-%m-%d %H:%M:%S') - $1" +} + +log_error() { + echo -e "${RED}[ERROR]${NC} $(date '+%Y-%m-%d %H:%M:%S') - $1" +} + +# 检查远程服务器连接 +check_remote_connection() { + log_info "检查远程服务器连接..." + if ssh -o ConnectTimeout=10 'root@47.111.10.27' "echo 'Connection successful'" > /dev/null 2>&1; then + log_success "远程服务器连接正常" + else + log_error "无法连接到远程服务器 'root@47.111.10.27'" + exit 1 + fi +} + +# 构建服务 +build_service() { + log_info "构建服务: $SERVICE_NAME" + + # 构建父项目依赖 + cd .. + mvn clean install -DskipTests -q + cd $SERVICE_NAME + + # 构建当前服务 + if mvn clean package -DskipTests -Ptest -q; then + log_success "服务 $SERVICE_NAME 构建成功" + else + log_error "服务 $SERVICE_NAME 构建失败" + exit 1 + fi +} + +# 创建Dockerfile +create_dockerfile() { + log_info "创建Dockerfile: $SERVICE_NAME" + + ssh 'root@47.111.10.27' "cat > $REMOTE_DOCKER_COMPOSE_DIR/Dockerfile.${SERVICE_NAME} << 'EOF' +FROM openjdk:17-jre-slim + +WORKDIR /app + +RUN apt-get update && apt-get install -y curl && rm -rf /var/lib/apt/lists/* + +COPY $REMOTE_BUILD_DIR/${SERVICE_NAME}-1.0.0.jar app.jar + +RUN mkdir -p /app/logs + +ENV TZ=Asia/Shanghai +RUN ln -snf /usr/share/zoneinfo/\$TZ /etc/localtime && echo \$TZ > /etc/timezone + +EXPOSE ${SERVICE_PORT} + +HEALTHCHECK --interval=30s --timeout=10s --start-period=60s --retries=3 \\ + CMD curl -f http://localhost:${SERVICE_PORT}/actuator/health || exit 1 + +ENTRYPOINT [\"java\", \"-Djava.security.egd=file:/dev/./urandom\", \"-Xms512m\", \"-Xmx1024m\", \"-jar\", \"app.jar\"] +EOF" +} + +# 部署服务 +deploy_service() { + log_info "开始部署服务: $SERVICE_NAME" + + # 检查jar包 + local jar_file="target/${SERVICE_NAME}-1.0.0.jar" + if [ ! -f "$jar_file" ]; then + log_error "JAR包不存在: $jar_file" + exit 1 + fi + + # 创建远程目录 + ssh 'root@47.111.10.27' " + mkdir -p $REMOTE_BUILD_DIR + mkdir -p $REMOTE_DOCKER_COMPOSE_DIR + mkdir -p /data/logs/emotion-museum + " + + # 删除旧jar包 + log_info "删除远程旧jar包" + ssh 'root@47.111.10.27' "rm -f $REMOTE_BUILD_DIR/${SERVICE_NAME}-*.jar" + + # 上传新jar包 + log_info "上传jar包" + if scp "$jar_file" 'root@47.111.10.27':$REMOTE_BUILD_DIR/${SERVICE_NAME}-1.0.0.jar; then + log_success "jar包上传成功" + else + log_error "jar包上传失败" + exit 1 + fi + + # 创建Dockerfile + create_dockerfile + + # 停止旧容器 + log_info "停止旧容器" + ssh 'root@47.111.10.27' " + docker stop ${SERVICE_NAME} 2>/dev/null || true + docker rm ${SERVICE_NAME} 2>/dev/null || true + docker rmi ${PROJECT_NAME}/${SERVICE_NAME}:latest 2>/dev/null || true + " + + # 创建Docker网络 + ssh 'root@47.111.10.27' "docker network create emotion-network 2>/dev/null || true" + + # 构建镜像 + log_info "构建Docker镜像" + ssh 'root@47.111.10.27' " + cd $REMOTE_DOCKER_COMPOSE_DIR + docker build -t ${PROJECT_NAME}/${SERVICE_NAME}:latest -f Dockerfile.${SERVICE_NAME} . + " + + # 启动容器 + log_info "启动新容器" + ssh 'root@47.111.10.27' " + docker run -d \\ + --name ${SERVICE_NAME} \\ + --network emotion-network \\ + -p ${SERVICE_PORT}:${SERVICE_PORT} \\ + -v /data/logs/emotion-museum:/app/logs \\ + -e SPRING_PROFILES_ACTIVE=${PROFILE} \\ + -e MYSQL_HOST=47.111.10.27 \\ + -e MYSQL_PORT=3306 \\ + -e MYSQL_DATABASE=emotion_museum \\ + -e MYSQL_USERNAME=root \\ + -e MYSQL_PASSWORD='EmotionMuseum2025*#' \\ + -e REDIS_HOST=47.111.10.27 \\ + -e REDIS_PORT=6379 \\ + -e REDIS_PASSWORD= \\ + -e REDIS_DATABASE=0 \\ + -e NACOS_SERVER_ADDR=47.111.10.27:8848 \\ + -e NACOS_USERNAME=nacos \\ + -e NACOS_PASSWORD='Peanut2817*#' \\ + --restart unless-stopped \\ + ${PROJECT_NAME}/${SERVICE_NAME}:latest + " + + # 等待启动 + log_info "等待服务启动..." + sleep 15 + + # 检查状态 + if ssh 'root@47.111.10.27' "docker ps | grep ${SERVICE_NAME}" > /dev/null; then + log_success "服务启动成功" + + # 显示日志 + log_info "服务日志 最后20行:" + ssh 'root@47.111.10.27' "docker logs --tail 20 ${SERVICE_NAME}" + + # 健康检查 + log_info "执行健康检查..." + sleep 10 + if ssh 'root@47.111.10.27' "curl -f -s http://localhost:${SERVICE_PORT}/actuator/health" > /dev/null 2>&1; then + log_success "健康检查通过" + else + log_warning "健康检查失败,服务可能仍在启动中" + fi + else + log_error "服务启动失败" + ssh 'root@47.111.10.27' "docker logs ${SERVICE_NAME}" + exit 1 + fi +} + +# 主函数 +main() { + log_info "开始部署 $SERVICE_NAME 服务" + log_info "目标服务器: $REMOTE_HOST" + log_info "服务端口: $SERVICE_PORT" + log_info "部署环境: $PROFILE" + + check_remote_connection + build_service + deploy_service + + log_success "$SERVICE_NAME 服务部署完成!" + log_info "访问地址: http://47.111.10.27:$SERVICE_PORT" +} + +# 执行主函数 +main "$@" diff --git a/backend/emotion-stats/deploy.sh b/backend/emotion-stats/deploy.sh new file mode 100755 index 0000000..9b64c0c --- /dev/null +++ b/backend/emotion-stats/deploy.sh @@ -0,0 +1,218 @@ +#!/bin/bash + +# emotion-stats 单独部署脚本 +# 作者: emotion-museum +# 日期: 2025-07-18 + +set -e + +# 配置变量 +SERVICE_NAME="emotion-stats" +SERVICE_PORT="19009" +REMOTE_HOST="'root@47.111.10.27'" +REMOTE_BUILD_DIR="/data/builds" +REMOTE_DOCKER_COMPOSE_DIR="/data/docker" +PROFILE="test" +PROJECT_NAME="emotion-museum" + +# 颜色输出 +RED='\033[0;31m' +GREEN='\033[0;32m' +YELLOW='\033[1;33m' +BLUE='\033[0;34m' +NC='\033[0m' + +# 日志函数 +log_info() { + echo -e "${BLUE}[INFO]${NC} $(date '+%Y-%m-%d %H:%M:%S') - $1" +} + +log_success() { + echo -e "${GREEN}[SUCCESS]${NC} $(date '+%Y-%m-%d %H:%M:%S') - $1" +} + +log_warning() { + echo -e "${YELLOW}[WARNING]${NC} $(date '+%Y-%m-%d %H:%M:%S') - $1" +} + +log_error() { + echo -e "${RED}[ERROR]${NC} $(date '+%Y-%m-%d %H:%M:%S') - $1" +} + +# 检查远程服务器连接 +check_remote_connection() { + log_info "检查远程服务器连接..." + if ssh -o ConnectTimeout=10 'root@47.111.10.27' "echo 'Connection successful'" > /dev/null 2>&1; then + log_success "远程服务器连接正常" + else + log_error "无法连接到远程服务器 'root@47.111.10.27'" + exit 1 + fi +} + +# 构建服务 +build_service() { + log_info "构建服务: $SERVICE_NAME" + + # 构建父项目依赖 + cd .. + mvn clean install -DskipTests -q + cd $SERVICE_NAME + + # 构建当前服务 + if mvn clean package -DskipTests -Ptest -q; then + log_success "服务 $SERVICE_NAME 构建成功" + else + log_error "服务 $SERVICE_NAME 构建失败" + exit 1 + fi +} + +# 创建Dockerfile +create_dockerfile() { + log_info "创建Dockerfile: $SERVICE_NAME" + + ssh 'root@47.111.10.27' "cat > $REMOTE_DOCKER_COMPOSE_DIR/Dockerfile.${SERVICE_NAME} << 'EOF' +FROM openjdk:17-jre-slim + +WORKDIR /app + +RUN apt-get update && apt-get install -y curl && rm -rf /var/lib/apt/lists/* + +COPY $REMOTE_BUILD_DIR/${SERVICE_NAME}-1.0.0.jar app.jar + +RUN mkdir -p /app/logs + +ENV TZ=Asia/Shanghai +RUN ln -snf /usr/share/zoneinfo/\$TZ /etc/localtime && echo \$TZ > /etc/timezone + +EXPOSE ${SERVICE_PORT} + +HEALTHCHECK --interval=30s --timeout=10s --start-period=60s --retries=3 \\ + CMD curl -f http://localhost:${SERVICE_PORT}/actuator/health || exit 1 + +ENTRYPOINT [\"java\", \"-Djava.security.egd=file:/dev/./urandom\", \"-Xms512m\", \"-Xmx1024m\", \"-jar\", \"app.jar\"] +EOF" +} + +# 部署服务 +deploy_service() { + log_info "开始部署服务: $SERVICE_NAME" + + # 检查jar包 + local jar_file="target/${SERVICE_NAME}-1.0.0.jar" + if [ ! -f "$jar_file" ]; then + log_error "JAR包不存在: $jar_file" + exit 1 + fi + + # 创建远程目录 + ssh 'root@47.111.10.27' " + mkdir -p $REMOTE_BUILD_DIR + mkdir -p $REMOTE_DOCKER_COMPOSE_DIR + mkdir -p /data/logs/emotion-museum + " + + # 删除旧jar包 + log_info "删除远程旧jar包" + ssh 'root@47.111.10.27' "rm -f $REMOTE_BUILD_DIR/${SERVICE_NAME}-*.jar" + + # 上传新jar包 + log_info "上传jar包" + if scp "$jar_file" 'root@47.111.10.27':$REMOTE_BUILD_DIR/${SERVICE_NAME}-1.0.0.jar; then + log_success "jar包上传成功" + else + log_error "jar包上传失败" + exit 1 + fi + + # 创建Dockerfile + create_dockerfile + + # 停止旧容器 + log_info "停止旧容器" + ssh 'root@47.111.10.27' " + docker stop ${SERVICE_NAME} 2>/dev/null || true + docker rm ${SERVICE_NAME} 2>/dev/null || true + docker rmi ${PROJECT_NAME}/${SERVICE_NAME}:latest 2>/dev/null || true + " + + # 创建Docker网络 + ssh 'root@47.111.10.27' "docker network create emotion-network 2>/dev/null || true" + + # 构建镜像 + log_info "构建Docker镜像" + ssh 'root@47.111.10.27' " + cd $REMOTE_DOCKER_COMPOSE_DIR + docker build -t ${PROJECT_NAME}/${SERVICE_NAME}:latest -f Dockerfile.${SERVICE_NAME} . + " + + # 启动容器 + log_info "启动新容器" + ssh 'root@47.111.10.27' " + docker run -d \\ + --name ${SERVICE_NAME} \\ + --network emotion-network \\ + -p ${SERVICE_PORT}:${SERVICE_PORT} \\ + -v /data/logs/emotion-museum:/app/logs \\ + -e SPRING_PROFILES_ACTIVE=${PROFILE} \\ + -e MYSQL_HOST=47.111.10.27 \\ + -e MYSQL_PORT=3306 \\ + -e MYSQL_DATABASE=emotion_museum \\ + -e MYSQL_USERNAME=root \\ + -e MYSQL_PASSWORD='EmotionMuseum2025*#' \\ + -e REDIS_HOST=47.111.10.27 \\ + -e REDIS_PORT=6379 \\ + -e REDIS_PASSWORD= \\ + -e REDIS_DATABASE=0 \\ + -e NACOS_SERVER_ADDR=47.111.10.27:8848 \\ + -e NACOS_USERNAME=nacos \\ + -e NACOS_PASSWORD='Peanut2817*#' \\ + --restart unless-stopped \\ + ${PROJECT_NAME}/${SERVICE_NAME}:latest + " + + # 等待启动 + log_info "等待服务启动..." + sleep 15 + + # 检查状态 + if ssh 'root@47.111.10.27' "docker ps | grep ${SERVICE_NAME}" > /dev/null; then + log_success "服务启动成功" + + # 显示日志 + log_info "服务日志 最后20行:" + ssh 'root@47.111.10.27' "docker logs --tail 20 ${SERVICE_NAME}" + + # 健康检查 + log_info "执行健康检查..." + sleep 10 + if ssh 'root@47.111.10.27' "curl -f -s http://localhost:${SERVICE_PORT}/actuator/health" > /dev/null 2>&1; then + log_success "健康检查通过" + else + log_warning "健康检查失败,服务可能仍在启动中" + fi + else + log_error "服务启动失败" + ssh 'root@47.111.10.27' "docker logs ${SERVICE_NAME}" + exit 1 + fi +} + +# 主函数 +main() { + log_info "开始部署 $SERVICE_NAME 服务" + log_info "目标服务器: $REMOTE_HOST" + log_info "服务端口: $SERVICE_PORT" + log_info "部署环境: $PROFILE" + + check_remote_connection + build_service + deploy_service + + log_success "$SERVICE_NAME 服务部署完成!" + log_info "访问地址: http://47.111.10.27:$SERVICE_PORT" +} + +# 执行主函数 +main "$@" diff --git a/backend/emotion-stats/src/main/resources/application.yml b/backend/emotion-stats/src/main/resources/application.yml index 34c1279..852348f 100644 --- a/backend/emotion-stats/src/main/resources/application.yml +++ b/backend/emotion-stats/src/main/resources/application.yml @@ -1,5 +1,5 @@ server: - port: 19008 + port: 19009 spring: application: diff --git a/backend/emotion-user/deploy.sh b/backend/emotion-user/deploy.sh index 5e919d1..1b30423 100755 --- a/backend/emotion-user/deploy.sh +++ b/backend/emotion-user/deploy.sh @@ -9,7 +9,7 @@ set -e # 配置变量 SERVICE_NAME="emotion-user" SERVICE_PORT="19001" -REMOTE_HOST="root@47.111.10.27" +REMOTE_HOST="'root@47.111.10.27'" REMOTE_BUILD_DIR="/data/builds" REMOTE_DOCKER_COMPOSE_DIR="/data/docker" PROFILE="test" @@ -119,7 +119,7 @@ deploy_service() { # 上传新jar包 log_info "上传jar包" - if scp "$jar_file" 'root@47.111.10.27':$REMOTE_BUILD_DIR/${SERVICE_NAME}-1.0.0.jar"; then + if scp "$jar_file" 'root@47.111.10.27':$REMOTE_BUILD_DIR/${SERVICE_NAME}-1.0.0.jar; then log_success "jar包上传成功" else log_error "jar包上传失败" @@ -160,14 +160,14 @@ deploy_service() { -e MYSQL_PORT=3306 \\ -e MYSQL_DATABASE=emotion_museum \\ -e MYSQL_USERNAME=root \\ - -e MYSQL_PASSWORD='EmotionMuseum2025*#' \ + -e MYSQL_PASSWORD='EmotionMuseum2025*#' \\ -e REDIS_HOST=47.111.10.27 \\ -e REDIS_PORT=6379 \\ -e REDIS_PASSWORD= \\ -e REDIS_DATABASE=0 \\ -e NACOS_SERVER_ADDR=47.111.10.27:8848 \\ -e NACOS_USERNAME=nacos \\ - -e NACOS_PASSWORD=Peanut2817*# \\ + -e NACOS_PASSWORD='Peanut2817*#' \\ --restart unless-stopped \\ ${PROJECT_NAME}/${SERVICE_NAME}:latest " @@ -181,7 +181,7 @@ deploy_service() { log_success "服务启动成功" # 显示日志 - log_info "服务日志 (最后20行):" + log_info "服务日志 最后20行:" ssh 'root@47.111.10.27' "docker logs --tail 20 ${SERVICE_NAME}" # 健康检查 diff --git a/backend/emotion-websocket/deploy.sh b/backend/emotion-websocket/deploy.sh index 3f5dc52..077e887 100755 --- a/backend/emotion-websocket/deploy.sh +++ b/backend/emotion-websocket/deploy.sh @@ -9,7 +9,7 @@ set -e # 配置变量 SERVICE_NAME="emotion-websocket" SERVICE_PORT="19007" -REMOTE_HOST="root@47.111.10.27" +REMOTE_HOST="'root@47.111.10.27'" REMOTE_BUILD_DIR="/data/builds" REMOTE_DOCKER_COMPOSE_DIR="/data/docker" PROFILE="test" @@ -119,7 +119,7 @@ deploy_service() { # 上传新jar包 log_info "上传jar包" - if scp "$jar_file" 'root@47.111.10.27':$REMOTE_BUILD_DIR/${SERVICE_NAME}-1.0.0.jar"; then + if scp "$jar_file" 'root@47.111.10.27':$REMOTE_BUILD_DIR/${SERVICE_NAME}-1.0.0.jar; then log_success "jar包上传成功" else log_error "jar包上传失败" @@ -160,14 +160,14 @@ deploy_service() { -e MYSQL_PORT=3306 \\ -e MYSQL_DATABASE=emotion_museum \\ -e MYSQL_USERNAME=root \\ - -e MYSQL_PASSWORD='EmotionMuseum2025*#' \ + -e MYSQL_PASSWORD='EmotionMuseum2025*#' \\ -e REDIS_HOST=47.111.10.27 \\ -e REDIS_PORT=6379 \\ -e REDIS_PASSWORD= \\ -e REDIS_DATABASE=0 \\ -e NACOS_SERVER_ADDR=47.111.10.27:8848 \\ -e NACOS_USERNAME=nacos \\ - -e NACOS_PASSWORD=Peanut2817*# \\ + -e NACOS_PASSWORD='Peanut2817*#' \\ --restart unless-stopped \\ ${PROJECT_NAME}/${SERVICE_NAME}:latest " @@ -181,7 +181,7 @@ deploy_service() { log_success "服务启动成功" # 显示日志 - log_info "服务日志 (最后20行):" + log_info "服务日志 最后20行:" ssh 'root@47.111.10.27' "docker logs --tail 20 ${SERVICE_NAME}" # 健康检查