report-detect/deploy-production.sh

180 lines
4.5 KiB
Bash
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#!/bin/bash
#
# 生产环境自动化部署脚本
# 适用于无互联网的Linux环境离线依赖包需提前准备
#
set -e
echo "========================================"
echo "报告检测后端 - 自动化部署"
echo "========================================"
# 颜色定义
RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
NC='\033[0m' # No Color
# 检查是否为root用户
if [ "$EUID" -ne 0 ]; then
echo -e "${RED}请使用sudo运行此脚本${NC}"
exit 1
fi
# 1. 检查Java
echo ""
echo "[1/6] 检查Java环境..."
if ! command -v java &> /dev/null; then
echo -e "${YELLOW}Java未安装正在安装...${NC}"
if command -v apt-get &> /dev/null; then
apt-get update
apt-get install -y openjdk-11-jre
elif command -v yum &> /dev/null; then
yum install -y java-11-openjdk
else
echo -e "${RED}不支持的包管理器${NC}"
exit 1
fi
fi
JAVA_VERSION=$(java -version 2>&1 | head -1 | cut -d'"' -f2)
echo -e "${GREEN}✓ Java版本: $JAVA_VERSION${NC}"
# 2. 检查Python
echo ""
echo "[2/6] 检查Python环境..."
if ! command -v python3 &> /dev/null; then
echo -e "${YELLOW}Python3未安装正在安装...${NC}"
if command -v apt-get &> /dev/null; then
apt-get update
apt-get install -y python3 python3-venv python3-pip
elif command -v yum &> /dev/null; then
yum install -y python3 python3-venv
fi
fi
PYTHON_VERSION=$(python3 --version)
echo -e "${GREEN}$PYTHON_VERSION${NC}"
# 3. 安装Python依赖使用离线wheel包或在线安装
echo ""
echo "[3/6] 安装Python依赖..."
DEPLOY_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
VENV_DIR="$DEPLOY_DIR/venv-offline"
if [ ! -d "$VENV_DIR" ]; then
echo "创建Python虚拟环境..."
python3 -m venv "$VENV_DIR"
source "$VENV_DIR/bin/activate"
pip install --upgrade pip -q
# 检查是否有离线wheel包
if [ -d "$DEPLOY_DIR/offline-packages" ]; then
echo "使用离线wheel包安装依赖..."
pip install --no-index --find-links="$DEPLOY_DIR/offline-packages" -r requirements.txt
else
echo "在线安装Python依赖这可能需要15-20分钟..."
pip install -r "$DEPLOY_DIR/requirements.txt" -q
fi
echo -e "${GREEN}✓ Python依赖安装完成${NC}"
else
echo -e "${GREEN}✓ 虚拟环境已存在${NC}"
fi
# 4. 创建必要目录
echo ""
echo "[4/6] 创建应用目录..."
UPLOAD_DIR="$DEPLOY_DIR/data/uploads"
PREVIEW_DIR="$DEPLOY_DIR/data/previews"
ATTACHMENT_DIR="$DEPLOY_DIR/data/attachments"
mkdir -p "$UPLOAD_DIR"
mkdir -p "$PREVIEW_DIR"
mkdir -p "$ATTACHMENT_DIR"
echo -e "${GREEN}✓ 目录创建完成${NC}"
# 5. 创建systemd服务
echo ""
echo "[5/6] 配置系统服务..."
SERVICE_FILE="/etc/systemd/system/report-detect.service"
cat > "$SERVICE_FILE" << EOF
[Unit]
Description=Report Detect Backend Service
After=network.target
[Service]
Type=simple
User=$SUDO_USER
Group=$SUDO_USER
WorkingDirectory=$DEPLOY_DIR
Environment="PATH=$VENV_DIR/bin:/usr/bin:/bin"
Environment="PYTHONUNBUFFERED=1"
ExecStart=/usr/bin/java -Xmx2g -jar $DEPLOY_DIR/report-detect-backend.jar
Restart=always
RestartSec=10
StandardOutput=journal
StandardError=journal
[Install]
WantedBy=multi-user.target
EOF
systemctl daemon-reload
systemctl enable report-detect
echo -e "${GREEN}✓ 系统服务配置完成${NC}"
# 6. 启动应用
echo ""
echo "[6/6] 启动应用..."
if systemctl is-active --quiet report-detect; then
echo "服务已在运行,正在重启..."
systemctl restart report-detect
else
echo "启动服务..."
systemctl start report-detect
fi
# 等待服务启动
sleep 5
# 检查服务状态
if systemctl is-active --quiet report-detect; then
echo -e "${GREEN}✓ 服务启动成功${NC}"
echo ""
echo "========================================"
echo -e "${GREEN}部署完成!${NC}"
echo "========================================"
echo ""
echo "服务状态:"
systemctl status report-detect --no-pager | head -10
echo ""
echo "常用命令:"
echo " 查看日志: sudo journalctl -u report-detect -f"
echo " 重启服务: sudo systemctl restart report-detect"
echo " 停止服务: sudo systemctl stop report-detect"
echo ""
echo "API端点:"
echo " 健康检查: http://localhost:8080/report-detect-api/actuator/health"
echo " Flask API: http://localhost:8081/health"
echo ""
else
echo -e "${RED}✗ 服务启动失败${NC}"
echo ""
echo "查看日志:"
journalctl -u report-detect -n 50 --no-pager
exit 1
fi