| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278 |
- #!/bin/bash
- # ============================================
- # 灵越智报 2.0 - 本地启动脚本
- # ============================================
- set -e
- # 颜色定义
- RED='\033[0;31m'
- GREEN='\033[0;32m'
- YELLOW='\033[1;33m'
- BLUE='\033[0;34m'
- NC='\033[0m'
- # 项目路径
- PROJECT_DIR="/home/hws/workspace/GitLab/ay/lingyue-zhibao"
- BACKEND_DIR="${PROJECT_DIR}/backend"
- JAR_FILE="${BACKEND_DIR}/lingyue-starter/target/lingyue-starter.jar"
- log_info() { echo -e "${GREEN}[INFO]${NC} $1"; }
- log_warn() { echo -e "${YELLOW}[WARN]${NC} $1"; }
- log_error() { echo -e "${RED}[ERROR]${NC} $1"; }
- log_title() { echo -e "${BLUE}=== $1 ===${NC}"; }
- # 检查服务状态
- check_service() {
- local service=$1
- if systemctl is-active --quiet "$service" 2>/dev/null; then
- echo "running"
- else
- echo "stopped"
- fi
- }
- # 启动服务
- start_service() {
- local service=$1
- local status=$(check_service "$service")
- if [ "$status" = "stopped" ]; then
- log_warn "$service 未运行,正在启动..."
- sudo systemctl start "$service"
- sleep 2
- fi
- log_info "$service ✓"
- }
- # 检查依赖服务
- check_dependencies() {
- log_title "检查依赖服务"
-
- start_service postgresql
- start_service redis
- start_service rabbitmq
- }
- # 检查 Ollama
- check_ollama() {
- log_title "检查 Ollama"
-
- if command -v ollama &> /dev/null; then
- if curl -s http://localhost:11434/api/tags > /dev/null 2>&1; then
- log_info "Ollama 已运行 ✓"
- else
- log_warn "启动 Ollama..."
- nohup ollama serve > /tmp/ollama.log 2>&1 &
- sleep 3
- if curl -s http://localhost:11434/api/tags > /dev/null 2>&1; then
- log_info "Ollama 启动成功 ✓"
- else
- log_warn "Ollama 启动失败(RAG 功能将不可用)"
- fi
- fi
- else
- log_warn "Ollama 未安装(RAG 功能将不可用)"
- fi
- }
- # 编译项目
- build_project() {
- log_title "编译项目"
-
- cd "$BACKEND_DIR"
-
- if [ ! -f "$JAR_FILE" ] || [ "$1" = "--rebuild" ]; then
- log_info "正在编译..."
- mvn clean package -DskipTests -q
- log_info "编译完成 ✓"
- else
- log_info "使用已编译的 JAR 文件"
- fi
- }
- # 启动应用
- start_app() {
- log_title "启动灵越智报"
-
- cd "$BACKEND_DIR"
-
- # 检查是否已运行
- if pgrep -f "lingyue-starter.jar" > /dev/null; then
- log_warn "应用已在运行中"
- log_info "使用 './start.sh stop' 停止应用"
- return
- fi
-
- log_info "启动应用..."
- echo ""
- echo -e "${GREEN}================================================${NC}"
- echo -e "${GREEN} 灵越智报 2.0${NC}"
- echo -e "${GREEN} 访问地址: http://localhost:8000${NC}"
- echo -e "${GREEN} 按 Ctrl+C 停止应用${NC}"
- echo -e "${GREEN}================================================${NC}"
- echo ""
-
- java -Xms512m -Xmx1024m \
- -XX:+UseG1GC \
- -jar "$JAR_FILE"
- }
- # 后台启动
- start_background() {
- log_title "后台启动灵越智报"
-
- cd "$BACKEND_DIR"
-
- if pgrep -f "lingyue-starter.jar" > /dev/null; then
- log_warn "应用已在运行中"
- return
- fi
-
- nohup java -Xms512m -Xmx1024m -XX:+UseG1GC \
- -jar "$JAR_FILE" > /tmp/lingyue.log 2>&1 &
-
- sleep 5
-
- if pgrep -f "lingyue-starter.jar" > /dev/null; then
- log_info "应用启动成功 ✓"
- log_info "日志文件: /tmp/lingyue.log"
- log_info "访问地址: http://localhost:8000"
- else
- log_error "应用启动失败,请查看日志: /tmp/lingyue.log"
- fi
- }
- # 停止应用
- stop_app() {
- log_title "停止灵越智报"
-
- if pgrep -f "lingyue-starter.jar" > /dev/null; then
- pkill -f "lingyue-starter.jar"
- log_info "应用已停止 ✓"
- else
- log_warn "应用未在运行"
- fi
- }
- # 查看状态
- show_status() {
- log_title "服务状态"
-
- echo -e "PostgreSQL: $(check_service postgresql)"
- echo -e "Redis: $(check_service redis)"
- echo -e "RabbitMQ: $(check_service rabbitmq)"
-
- if command -v ollama &> /dev/null && curl -s http://localhost:11434/api/tags > /dev/null 2>&1; then
- echo -e "Ollama: running"
- else
- echo -e "Ollama: stopped"
- fi
-
- if pgrep -f "lingyue-starter.jar" > /dev/null; then
- echo -e "灵越智报: running (http://localhost:8000)"
- else
- echo -e "灵越智报: stopped"
- fi
- }
- # 查看日志
- show_logs() {
- if [ -f /tmp/lingyue.log ]; then
- tail -f /tmp/lingyue.log
- else
- log_error "日志文件不存在"
- fi
- }
- # 初始化数据库
- init_db() {
- log_title "初始化数据库"
-
- cd "$PROJECT_DIR"
-
- log_info "执行数据库初始化 (database/init.sql)..."
- psql -U lingyue -d lingyue_zhibao -f database/init.sql
- log_info "数据库初始化完成 ✓"
- }
- # 初始化 RAG 表(已合并到 database/init.sql,执行完整 init 即可)
- init_rag() {
- log_title "初始化 RAG 表"
- log_info "RAG 表已包含在 database/init.sql 中,请执行: ./start.sh init-db"
- init_db
- }
- # 显示帮助
- show_help() {
- cat << EOF
- 灵越智报 2.0 - 本地启动脚本
- 用法: ./start.sh [命令]
- 命令:
- (无参数) 编译并前台启动应用
- -d, daemon 编译并后台启动应用
- stop 停止应用
- status 查看服务状态
- logs 查看应用日志
- build 仅编译项目
- init-db 初始化基础数据库表
- init-rag 初始化 RAG 向量表(需要 pgvector)
- help 显示此帮助信息
- 示例:
- ./start.sh # 前台启动
- ./start.sh -d # 后台启动
- ./start.sh stop # 停止应用
- ./start.sh status # 查看状态
- ./start.sh init-db # 初始化数据库
- EOF
- }
- # 主函数
- main() {
- case "${1:-}" in
- -d|daemon)
- check_dependencies
- check_ollama
- build_project
- start_background
- ;;
- stop)
- stop_app
- ;;
- status)
- show_status
- ;;
- logs)
- show_logs
- ;;
- build|--rebuild)
- build_project --rebuild
- ;;
- init-db)
- init_db
- ;;
- init-rag)
- init_rag
- ;;
- help|--help|-h)
- show_help
- ;;
- "")
- check_dependencies
- check_ollama
- build_project
- start_app
- ;;
- *)
- log_error "未知命令: $1"
- show_help
- exit 1
- ;;
- esac
- }
- main "$@"
|