Files
PolyHermes/backend/deploy.sh
T
WrBug 59722d7311 feat: 添加完整的部署支持
- 后端多环境配置(dev, prod)
- Docker 部署支持(Dockerfile, docker-compose.yml)
- Java 部署脚本(deploy.sh)
- 前端构建脚本(build.sh,支持自定义后端地址)
- 健康检查接口(/api/health)
- 完整的部署文档(docs/DEPLOYMENT.md)
- 前端环境变量支持(VITE_API_URL, VITE_WS_URL)
2025-12-03 02:48:02 +08:00

204 lines
4.6 KiB
Bash
Executable File

#!/bin/bash
# PolyHermes 后端部署脚本
# 支持 Java 直接部署和 Docker 部署
set -e
# 颜色输出
RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
NC='\033[0m' # No Color
# 配置
APP_NAME="polymarket-bot-backend"
JAR_NAME="polymarket-bot-backend-1.0.0.jar"
DEPLOY_DIR="./deploy"
PROFILE="${SPRING_PROFILES_ACTIVE:-prod}"
# 打印信息
info() {
echo -e "${GREEN}[INFO]${NC} $1"
}
warn() {
echo -e "${YELLOW}[WARN]${NC} $1"
}
error() {
echo -e "${RED}[ERROR]${NC} $1"
}
# 检查 Java 环境
check_java() {
if ! command -v java &> /dev/null; then
error "Java 未安装,请先安装 Java 17+"
exit 1
fi
JAVA_VERSION=$(java -version 2>&1 | awk -F '"' '/version/ {print $2}' | cut -d'.' -f1)
if [ "$JAVA_VERSION" -lt 17 ]; then
error "Java 版本过低,需要 Java 17+,当前版本: $JAVA_VERSION"
exit 1
fi
info "Java 环境检查通过: $(java -version 2>&1 | head -n 1)"
}
# 构建应用
build_app() {
info "开始构建应用..."
if ! command -v gradle &> /dev/null; then
error "Gradle 未安装,请先安装 Gradle 或使用 Gradle Wrapper"
exit 1
fi
./gradlew clean bootJar
if [ ! -f "build/libs/$JAR_NAME" ]; then
error "构建失败,JAR 文件不存在"
exit 1
fi
info "构建完成: build/libs/$JAR_NAME"
}
# Java 部署
deploy_java() {
info "使用 Java 方式部署..."
# 创建部署目录
mkdir -p "$DEPLOY_DIR"
# 复制 JAR 文件
cp "build/libs/$JAR_NAME" "$DEPLOY_DIR/"
# 创建启动脚本
cat > "$DEPLOY_DIR/start.sh" <<EOF
#!/bin/bash
cd \$(dirname \$0)
# 设置 JVM 参数
JVM_OPTS="-Xms512m -Xmx1024m -XX:+UseG1GC -XX:MaxGCPauseMillis=200"
# 启动应用
java \$JVM_OPTS -jar $JAR_NAME --spring.profiles.active=$PROFILE
EOF
chmod +x "$DEPLOY_DIR/start.sh"
# 创建 systemd 服务文件(可选)
cat > "$DEPLOY_DIR/${APP_NAME}.service" <<EOF
[Unit]
Description=PolyHermes Backend Service
After=network.target mysql.service
[Service]
Type=simple
User=\${USER}
WorkingDirectory=$DEPLOY_DIR
ExecStart=/usr/bin/java -Xms512m -Xmx1024m -XX:+UseG1GC -jar $JAR_NAME --spring.profiles.active=$PROFILE
Restart=always
RestartSec=10
[Install]
WantedBy=multi-user.target
EOF
info "Java 部署文件已创建在: $DEPLOY_DIR"
info "启动方式: cd $DEPLOY_DIR && ./start.sh"
info "或使用 systemd: sudo cp ${APP_NAME}.service /etc/systemd/system/ && sudo systemctl start ${APP_NAME}"
}
# Docker 部署
deploy_docker() {
info "使用 Docker 方式部署..."
if ! command -v docker &> /dev/null; then
error "Docker 未安装,请先安装 Docker"
exit 1
fi
if ! command -v docker-compose &> /dev/null; then
error "Docker Compose 未安装,请先安装 Docker Compose"
exit 1
fi
# 创建 .env 文件(如果不存在)
if [ ! -f ".env" ]; then
warn ".env 文件不存在,创建示例文件..."
cat > .env <<EOF
# 数据库配置
DB_URL=jdbc:mysql://mysql:3306/polymarket_bot?useSSL=false&serverTimezone=UTC&characterEncoding=utf8mb4
DB_USERNAME=root
DB_PASSWORD=your_password_here
# Spring Profile
SPRING_PROFILES_ACTIVE=prod
# 服务器端口
SERVER_PORT=8000
# Polygon RPC
POLYGON_RPC_URL=https://polygon-rpc.com
# JWT 密钥(生产环境必须修改)
JWT_SECRET=your-jwt-secret-key-change-in-production
# 管理员密码重置密钥(生产环境必须修改)
ADMIN_RESET_PASSWORD_KEY=your-admin-reset-key-change-in-production
EOF
warn "请编辑 .env 文件配置相关参数"
fi
# 构建并启动
info "构建 Docker 镜像..."
docker-compose build
info "启动服务..."
docker-compose up -d
info "Docker 部署完成"
info "查看日志: docker-compose logs -f"
info "停止服务: docker-compose down"
}
# 主函数
main() {
echo "=========================================="
echo " PolyHermes 后端部署脚本"
echo "=========================================="
echo ""
# 解析参数
DEPLOY_MODE="${1:-java}"
case "$DEPLOY_MODE" in
java)
check_java
build_app
deploy_java
;;
docker)
deploy_docker
;;
build)
check_java
build_app
;;
*)
echo "用法: $0 [java|docker|build]"
echo ""
echo " java - Java 直接部署(默认)"
echo " docker - Docker 部署"
echo " build - 仅构建应用"
exit 1
;;
esac
}
main "$@"