start.sh 6.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278
  1. #!/bin/bash
  2. # ============================================
  3. # 灵越智报 2.0 - 本地启动脚本
  4. # ============================================
  5. set -e
  6. # 颜色定义
  7. RED='\033[0;31m'
  8. GREEN='\033[0;32m'
  9. YELLOW='\033[1;33m'
  10. BLUE='\033[0;34m'
  11. NC='\033[0m'
  12. # 项目路径
  13. PROJECT_DIR="/home/hws/workspace/GitLab/ay/lingyue-zhibao"
  14. BACKEND_DIR="${PROJECT_DIR}/backend"
  15. JAR_FILE="${BACKEND_DIR}/lingyue-starter/target/lingyue-starter.jar"
  16. log_info() { echo -e "${GREEN}[INFO]${NC} $1"; }
  17. log_warn() { echo -e "${YELLOW}[WARN]${NC} $1"; }
  18. log_error() { echo -e "${RED}[ERROR]${NC} $1"; }
  19. log_title() { echo -e "${BLUE}=== $1 ===${NC}"; }
  20. # 检查服务状态
  21. check_service() {
  22. local service=$1
  23. if systemctl is-active --quiet "$service" 2>/dev/null; then
  24. echo "running"
  25. else
  26. echo "stopped"
  27. fi
  28. }
  29. # 启动服务
  30. start_service() {
  31. local service=$1
  32. local status=$(check_service "$service")
  33. if [ "$status" = "stopped" ]; then
  34. log_warn "$service 未运行,正在启动..."
  35. sudo systemctl start "$service"
  36. sleep 2
  37. fi
  38. log_info "$service ✓"
  39. }
  40. # 检查依赖服务
  41. check_dependencies() {
  42. log_title "检查依赖服务"
  43. start_service postgresql
  44. start_service redis
  45. start_service rabbitmq
  46. }
  47. # 检查 Ollama
  48. check_ollama() {
  49. log_title "检查 Ollama"
  50. if command -v ollama &> /dev/null; then
  51. if curl -s http://localhost:11434/api/tags > /dev/null 2>&1; then
  52. log_info "Ollama 已运行 ✓"
  53. else
  54. log_warn "启动 Ollama..."
  55. nohup ollama serve > /tmp/ollama.log 2>&1 &
  56. sleep 3
  57. if curl -s http://localhost:11434/api/tags > /dev/null 2>&1; then
  58. log_info "Ollama 启动成功 ✓"
  59. else
  60. log_warn "Ollama 启动失败(RAG 功能将不可用)"
  61. fi
  62. fi
  63. else
  64. log_warn "Ollama 未安装(RAG 功能将不可用)"
  65. fi
  66. }
  67. # 编译项目
  68. build_project() {
  69. log_title "编译项目"
  70. cd "$BACKEND_DIR"
  71. if [ ! -f "$JAR_FILE" ] || [ "$1" = "--rebuild" ]; then
  72. log_info "正在编译..."
  73. mvn clean package -DskipTests -q
  74. log_info "编译完成 ✓"
  75. else
  76. log_info "使用已编译的 JAR 文件"
  77. fi
  78. }
  79. # 启动应用
  80. start_app() {
  81. log_title "启动灵越智报"
  82. cd "$BACKEND_DIR"
  83. # 检查是否已运行
  84. if pgrep -f "lingyue-starter.jar" > /dev/null; then
  85. log_warn "应用已在运行中"
  86. log_info "使用 './start.sh stop' 停止应用"
  87. return
  88. fi
  89. log_info "启动应用..."
  90. echo ""
  91. echo -e "${GREEN}================================================${NC}"
  92. echo -e "${GREEN} 灵越智报 2.0${NC}"
  93. echo -e "${GREEN} 访问地址: http://localhost:8000${NC}"
  94. echo -e "${GREEN} 按 Ctrl+C 停止应用${NC}"
  95. echo -e "${GREEN}================================================${NC}"
  96. echo ""
  97. java -Xms512m -Xmx1024m \
  98. -XX:+UseG1GC \
  99. -jar "$JAR_FILE"
  100. }
  101. # 后台启动
  102. start_background() {
  103. log_title "后台启动灵越智报"
  104. cd "$BACKEND_DIR"
  105. if pgrep -f "lingyue-starter.jar" > /dev/null; then
  106. log_warn "应用已在运行中"
  107. return
  108. fi
  109. nohup java -Xms512m -Xmx1024m -XX:+UseG1GC \
  110. -jar "$JAR_FILE" > /tmp/lingyue.log 2>&1 &
  111. sleep 5
  112. if pgrep -f "lingyue-starter.jar" > /dev/null; then
  113. log_info "应用启动成功 ✓"
  114. log_info "日志文件: /tmp/lingyue.log"
  115. log_info "访问地址: http://localhost:8000"
  116. else
  117. log_error "应用启动失败,请查看日志: /tmp/lingyue.log"
  118. fi
  119. }
  120. # 停止应用
  121. stop_app() {
  122. log_title "停止灵越智报"
  123. if pgrep -f "lingyue-starter.jar" > /dev/null; then
  124. pkill -f "lingyue-starter.jar"
  125. log_info "应用已停止 ✓"
  126. else
  127. log_warn "应用未在运行"
  128. fi
  129. }
  130. # 查看状态
  131. show_status() {
  132. log_title "服务状态"
  133. echo -e "PostgreSQL: $(check_service postgresql)"
  134. echo -e "Redis: $(check_service redis)"
  135. echo -e "RabbitMQ: $(check_service rabbitmq)"
  136. if command -v ollama &> /dev/null && curl -s http://localhost:11434/api/tags > /dev/null 2>&1; then
  137. echo -e "Ollama: running"
  138. else
  139. echo -e "Ollama: stopped"
  140. fi
  141. if pgrep -f "lingyue-starter.jar" > /dev/null; then
  142. echo -e "灵越智报: running (http://localhost:8000)"
  143. else
  144. echo -e "灵越智报: stopped"
  145. fi
  146. }
  147. # 查看日志
  148. show_logs() {
  149. if [ -f /tmp/lingyue.log ]; then
  150. tail -f /tmp/lingyue.log
  151. else
  152. log_error "日志文件不存在"
  153. fi
  154. }
  155. # 初始化数据库
  156. init_db() {
  157. log_title "初始化数据库"
  158. cd "$PROJECT_DIR"
  159. log_info "执行数据库初始化 (database/init.sql)..."
  160. psql -U lingyue -d lingyue_zhibao -f database/init.sql
  161. log_info "数据库初始化完成 ✓"
  162. }
  163. # 初始化 RAG 表(已合并到 database/init.sql,执行完整 init 即可)
  164. init_rag() {
  165. log_title "初始化 RAG 表"
  166. log_info "RAG 表已包含在 database/init.sql 中,请执行: ./start.sh init-db"
  167. init_db
  168. }
  169. # 显示帮助
  170. show_help() {
  171. cat << EOF
  172. 灵越智报 2.0 - 本地启动脚本
  173. 用法: ./start.sh [命令]
  174. 命令:
  175. (无参数) 编译并前台启动应用
  176. -d, daemon 编译并后台启动应用
  177. stop 停止应用
  178. status 查看服务状态
  179. logs 查看应用日志
  180. build 仅编译项目
  181. init-db 初始化基础数据库表
  182. init-rag 初始化 RAG 向量表(需要 pgvector)
  183. help 显示此帮助信息
  184. 示例:
  185. ./start.sh # 前台启动
  186. ./start.sh -d # 后台启动
  187. ./start.sh stop # 停止应用
  188. ./start.sh status # 查看状态
  189. ./start.sh init-db # 初始化数据库
  190. EOF
  191. }
  192. # 主函数
  193. main() {
  194. case "${1:-}" in
  195. -d|daemon)
  196. check_dependencies
  197. check_ollama
  198. build_project
  199. start_background
  200. ;;
  201. stop)
  202. stop_app
  203. ;;
  204. status)
  205. show_status
  206. ;;
  207. logs)
  208. show_logs
  209. ;;
  210. build|--rebuild)
  211. build_project --rebuild
  212. ;;
  213. init-db)
  214. init_db
  215. ;;
  216. init-rag)
  217. init_rag
  218. ;;
  219. help|--help|-h)
  220. show_help
  221. ;;
  222. "")
  223. check_dependencies
  224. check_ollama
  225. build_project
  226. start_app
  227. ;;
  228. *)
  229. log_error "未知命令: $1"
  230. show_help
  231. exit 1
  232. ;;
  233. esac
  234. }
  235. main "$@"