#!/bin/bash # 灵越智报部署脚本 # 作者: lingyue # 版本: 2.0.0 set -e # 颜色定义 RED='\033[0;31m' GREEN='\033[0;32m' YELLOW='\033[1;33m' 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" } # 检查依赖 check_dependencies() { log_info "检查依赖..." if ! command -v docker &> /dev/null; then log_error "Docker 未安装,请先安装 Docker" exit 1 fi if ! command -v docker-compose &> /dev/null && ! docker compose version &> /dev/null; then log_error "Docker Compose 未安装,请先安装 Docker Compose" exit 1 fi log_info "依赖检查通过" } # 编译项目 build_project() { log_info "开始编译项目..." cd backend mvn clean package -DskipTests if [ $? -ne 0 ]; then log_error "项目编译失败" exit 1 fi cd .. log_info "项目编译成功" } # 停止现有服务 stop_services() { log_info "停止现有服务..." docker-compose down || docker compose down log_info "服务已停止" } # 启动服务 start_services() { local with_ocr=$1 log_info "启动服务..." if [ "$with_ocr" = "true" ]; then log_info "启动包含 PaddleOCR 服务..." docker-compose --profile with-ocr up -d || docker compose --profile with-ocr up -d else log_info "启动基础服务(不包含 OCR)..." docker-compose up -d || docker compose up -d fi if [ $? -ne 0 ]; then log_error "服务启动失败" exit 1 fi log_info "服务启动成功" } # 查看日志 show_logs() { log_info "查看应用日志..." docker-compose logs -f lingyue-app || docker compose logs -f lingyue-app } # 检查服务状态 check_status() { log_info "检查服务状态..." docker-compose ps || docker compose ps } # 显示帮助信息 show_help() { cat << EOF 灵越智报部署脚本 使用方法: ./deploy.sh [选项] 选项: start 编译并启动所有服务(不包含 OCR) start-with-ocr 编译并启动所有服务(包含 PaddleOCR) stop 停止所有服务 restart 重启所有服务 logs 查看应用日志 status 查看服务状态 build 仅编译项目 help 显示此帮助信息 示例: ./deploy.sh start # 启动基础服务 ./deploy.sh start-with-ocr # 启动包含 OCR 的完整服务 ./deploy.sh logs # 查看日志 EOF } # 主函数 main() { local action=${1:-help} case $action in start) check_dependencies build_project stop_services start_services false log_info "部署完成!" log_info "访问地址: http://localhost:8000" log_info "Swagger文档: http://localhost:8000/swagger-ui.html" log_info "Druid监控: http://localhost:8000/druid/ (用户名: admin, 密码: admin123)" log_info "RabbitMQ管理界面: http://localhost:15672 (用户名: admin, 密码: admin123)" log_info "" log_warn "提示: 使用 './deploy.sh logs' 查看日志" ;; start-with-ocr) check_dependencies build_project stop_services start_services true log_info "部署完成(包含 OCR 服务)!" log_info "访问地址: http://localhost:8000" log_info "PaddleOCR服务: http://localhost:8866" ;; stop) stop_services log_info "服务已全部停止" ;; restart) check_dependencies build_project stop_services start_services false log_info "服务重启完成" ;; logs) show_logs ;; status) check_status ;; build) build_project ;; help) show_help ;; *) log_error "未知选项: $action" show_help exit 1 ;; esac } # 执行主函数 main "$@"