142 lines
3.9 KiB
Bash
142 lines
3.9 KiB
Bash
#!/bin/bash
|
||
# Linux 云端部署脚本
|
||
# 使用方法: ./deploy-linux.sh
|
||
|
||
set -e
|
||
|
||
echo "🚀 开始部署 AIGC 平台到 Linux 服务器..."
|
||
|
||
# 颜色定义
|
||
RED='\033[0;31m'
|
||
GREEN='\033[0;32m'
|
||
YELLOW='\033[1;33m'
|
||
NC='\033[0m' # No Color
|
||
|
||
# 检查Java
|
||
echo -e "${YELLOW}检查Java环境...${NC}"
|
||
if ! command -v java &> /dev/null; then
|
||
echo -e "${RED}❌ Java未安装,请先安装Java 21${NC}"
|
||
echo "安装命令: sudo apt install -y openjdk-21-jdk"
|
||
exit 1
|
||
fi
|
||
|
||
JAVA_VERSION=$(java -version 2>&1 | head -n 1)
|
||
echo -e "${GREEN}✅ Java已安装: $JAVA_VERSION${NC}"
|
||
|
||
# 检查MySQL
|
||
echo -e "${YELLOW}检查MySQL服务...${NC}"
|
||
if ! systemctl is-active --quiet mysql && ! systemctl is-active --quiet mysqld; then
|
||
echo -e "${RED}❌ MySQL服务未运行${NC}"
|
||
echo "启动命令: sudo systemctl start mysql"
|
||
exit 1
|
||
fi
|
||
echo -e "${GREEN}✅ MySQL服务运行中${NC}"
|
||
|
||
# 检查FFmpeg
|
||
echo -e "${YELLOW}检查FFmpeg...${NC}"
|
||
if ! command -v ffmpeg &> /dev/null; then
|
||
echo -e "${YELLOW}⚠️ FFmpeg未安装,视频功能可能不可用${NC}"
|
||
echo "安装命令: sudo apt install -y ffmpeg"
|
||
else
|
||
echo -e "${GREEN}✅ FFmpeg已安装${NC}"
|
||
fi
|
||
|
||
# 检查应用目录
|
||
APP_DIR="/app/aigc-platform"
|
||
echo -e "${YELLOW}检查应用目录...${NC}"
|
||
if [ ! -d "$APP_DIR" ]; then
|
||
echo -e "${YELLOW}创建应用目录...${NC}"
|
||
sudo mkdir -p $APP_DIR/{logs,uploads,temp,config,backend,frontend}
|
||
sudo chown -R $USER:$USER $APP_DIR
|
||
chmod -R 755 $APP_DIR
|
||
fi
|
||
echo -e "${GREEN}✅ 应用目录存在${NC}"
|
||
|
||
# 检查JAR文件
|
||
JAR_FILE="$APP_DIR/backend/demo-0.0.1-SNAPSHOT.jar"
|
||
if [ ! -f "$JAR_FILE" ]; then
|
||
echo -e "${RED}❌ JAR文件不存在: $JAR_FILE${NC}"
|
||
echo "请先上传JAR文件到服务器"
|
||
exit 1
|
||
fi
|
||
echo -e "${GREEN}✅ JAR文件存在${NC}"
|
||
|
||
# 检查配置文件
|
||
CONFIG_FILE="$APP_DIR/config/application-prod.properties"
|
||
if [ ! -f "$CONFIG_FILE" ]; then
|
||
echo -e "${YELLOW}⚠️ 配置文件不存在,请先创建配置文件${NC}"
|
||
echo "配置文件路径: $CONFIG_FILE"
|
||
fi
|
||
|
||
# 停止服务
|
||
echo -e "${YELLOW}停止现有服务...${NC}"
|
||
if systemctl is-active --quiet aigc-platform; then
|
||
sudo systemctl stop aigc-platform
|
||
echo -e "${GREEN}✅ 服务已停止${NC}"
|
||
else
|
||
echo -e "${YELLOW}服务未运行${NC}"
|
||
fi
|
||
|
||
# 备份旧版本
|
||
echo -e "${YELLOW}备份旧版本...${NC}"
|
||
BACKUP_DIR="$APP_DIR/backup/$(date +%Y%m%d_%H%M%S)"
|
||
mkdir -p $BACKUP_DIR
|
||
if [ -f "$JAR_FILE" ]; then
|
||
cp "$JAR_FILE" "$BACKUP_DIR/" 2>/dev/null || true
|
||
echo -e "${GREEN}✅ 备份完成: $BACKUP_DIR${NC}"
|
||
fi
|
||
|
||
# 检查systemd服务文件
|
||
SERVICE_FILE="/etc/systemd/system/aigc-platform.service"
|
||
if [ ! -f "$SERVICE_FILE" ]; then
|
||
echo -e "${YELLOW}⚠️ Systemd服务文件不存在${NC}"
|
||
echo "请先创建服务文件: $SERVICE_FILE"
|
||
echo "参考文档: LINUX_DEPLOYMENT_GUIDE.md"
|
||
exit 1
|
||
fi
|
||
|
||
# 重新加载systemd
|
||
echo -e "${YELLOW}重新加载systemd配置...${NC}"
|
||
sudo systemctl daemon-reload
|
||
|
||
# 启动服务
|
||
echo -e "${YELLOW}启动服务...${NC}"
|
||
sudo systemctl start aigc-platform
|
||
|
||
# 等待启动
|
||
echo -e "${YELLOW}等待服务启动...${NC}"
|
||
sleep 5
|
||
|
||
# 检查状态
|
||
if systemctl is-active --quiet aigc-platform; then
|
||
echo -e "${GREEN}✅ 部署成功!${NC}"
|
||
echo ""
|
||
echo "服务状态:"
|
||
sudo systemctl status aigc-platform --no-pager -l
|
||
echo ""
|
||
echo "查看日志: sudo journalctl -u aigc-platform -f"
|
||
echo "停止服务: sudo systemctl stop aigc-platform"
|
||
echo "重启服务: sudo systemctl restart aigc-platform"
|
||
else
|
||
echo -e "${RED}❌ 部署失败!${NC}"
|
||
echo ""
|
||
echo "查看错误日志:"
|
||
sudo journalctl -u aigc-platform -n 50 --no-pager
|
||
exit 1
|
||
fi
|
||
|
||
# 测试健康检查
|
||
echo -e "${YELLOW}测试健康检查...${NC}"
|
||
sleep 2
|
||
if curl -f http://localhost:8080/actuator/health > /dev/null 2>&1; then
|
||
echo -e "${GREEN}✅ 健康检查通过${NC}"
|
||
else
|
||
echo -e "${YELLOW}⚠️ 健康检查失败,请检查日志${NC}"
|
||
fi
|
||
|
||
echo ""
|
||
echo -e "${GREEN}🎉 部署完成!${NC}"
|
||
|
||
|
||
|