#!/bin/bash # ============================================ # 灵越智报 2.0 - 服务器一键部署脚本 # 适用于: Ubuntu 22.04 LTS # 服务器: lanaipc # ============================================ set -e # 颜色定义 RED='\033[0;31m' GREEN='\033[0;32m' YELLOW='\033[1;33m' BLUE='\033[0;34m' NC='\033[0m' # 配置 PROJECT_DIR="/mnt/win_home/lingyue-zhibao" LOG_DIR="/var/log/lingyue" DATA_DIR="/mnt/win_home/lingyue-data" # 数据库配置 DB_NAME="lingyue_zhibao" DB_USER="lingyue" DB_PASS="123123" # RabbitMQ 配置 MQ_USER="admin" MQ_PASS="admin123" 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 "\n${BLUE}========== $1 ==========${NC}\n"; } # 检查 root 权限 check_root() { if [ "$EUID" -ne 0 ]; then log_error "请使用 root 用户运行此脚本" exit 1 fi } # 安装基础依赖 install_dependencies() { log_title "安装基础依赖" apt update apt install -y openjdk-17-jdk maven git curl wget log_info "Java 版本: $(java -version 2>&1 | head -1)" log_info "Maven 版本: $(mvn -version 2>&1 | head -1)" } # 安装 PostgreSQL + pgvector install_postgresql() { log_title "安装 PostgreSQL + pgvector" # 安装 PostgreSQL apt install -y postgresql postgresql-contrib postgresql-server-dev-all build-essential # 编译安装 pgvector if [ ! -d "/tmp/pgvector" ]; then cd /tmp git clone https://github.com/pgvector/pgvector.git fi cd /tmp/pgvector make clean || true make make install # 启动服务 systemctl enable postgresql systemctl restart postgresql log_info "PostgreSQL 已安装并启动" } # 配置数据库 setup_database() { log_title "配置数据库" # 创建用户和数据库 sudo -u postgres psql </dev/null || true rabbitmqctl set_user_tags ${MQ_USER} administrator rabbitmqctl set_permissions -p / ${MQ_USER} ".*" ".*" ".*" log_info "RabbitMQ 已安装,管理界面: http://localhost:15672" } # 安装 Ollama install_ollama() { log_title "安装 Ollama" if ! command -v ollama &> /dev/null; then curl -fsSL https://ollama.ai/install.sh | sh fi # 启动 Ollama nohup ollama serve > /var/log/ollama.log 2>&1 & sleep 5 # 下载 Embedding 模型 if ! ollama list | grep -q "nomic-embed-text"; then log_info "下载 nomic-embed-text 模型..." ollama pull nomic-embed-text fi log_info "Ollama 已安装" } # 部署项目 deploy_project() { log_title "部署项目" # 创建目录 mkdir -p ${LOG_DIR} mkdir -p ${DATA_DIR} # 进入项目目录 if [ ! -d "${PROJECT_DIR}" ]; then log_error "项目目录不存在: ${PROJECT_DIR}" log_info "请先克隆项目到 ${PROJECT_DIR}" exit 1 fi cd ${PROJECT_DIR} # 初始化数据库表 log_info "初始化数据库表..." PGPASSWORD=${DB_PASS} psql -U ${DB_USER} -d ${DB_NAME} -h localhost -f backend/sql/init.sql PGPASSWORD=${DB_PASS} psql -U ${DB_USER} -d ${DB_NAME} -h localhost -f backend/sql/rag_tables.sql 2>/dev/null || true # 编译项目 log_info "编译项目..." cd backend mvn clean package -DskipTests -q log_info "项目编译完成" } # 创建 Systemd 服务 create_systemd_service() { log_title "创建 Systemd 服务" cat > /etc/systemd/system/lingyue.service < /dev/null && curl -s http://localhost:11434/api/tags > /dev/null 2>&1; then echo "Ollama: running" else echo "Ollama: stopped" fi echo "" if systemctl is-active --quiet lingyue; then log_info "应用访问地址: http://$(hostname -I | awk '{print $1}'):8000" fi } # 查看日志 show_logs() { journalctl -u lingyue -f } # 健康检查 health_check() { log_title "健康检查" local health=$(curl -s http://localhost:8000/actuator/health 2>/dev/null) if [ -n "$health" ]; then echo "$health" | python3 -m json.tool 2>/dev/null || echo "$health" else log_error "应用未响应" fi } # 完整安装 full_install() { check_root install_dependencies install_postgresql setup_database install_redis install_rabbitmq install_ollama deploy_project create_systemd_service start_app log_title "部署完成" show_status } # 仅更新代码 update_only() { log_title "更新代码" cd ${PROJECT_DIR} git pull origin main || git pull origin master || true cd backend mvn clean package -DskipTests -q systemctl restart lingyue sleep 10 health_check } # 显示帮助 show_help() { cat <