部署环境: Ubuntu 22.04 LTS
服务器: lanaipc (RTX 4070 Ti Super 16GB)
更新日期: 2026-01-17
项目路径:/mnt/win_home/lingyue-zhibao
GPU: NVIDIA GeForce RTX 4070 Ti Super (16GB)
CUDA: 12.5
Driver: 555.42.02
OS: Ubuntu 22.04.5 LTS
Kernel: 5.15.0-164-generic
已运行的服务(GPU 占用 ~15.7GB):
| 组件 | 版本要求 | 安装命令 |
|---|---|---|
| Java 17 | OpenJDK 17+ | apt install openjdk-17-jdk |
| Maven | 3.6+ | apt install maven |
| PostgreSQL | 14+ | apt install postgresql postgresql-contrib |
| Redis | 6+ | apt install redis-server |
| RabbitMQ | 3.9+ | apt install rabbitmq-server |
| pgvector | 0.5+ | 见下方步骤 |
# 更新系统
apt update && apt upgrade -y
# 安装 Java 17
apt install -y openjdk-17-jdk
# 安装 Maven
apt install -y maven
# 验证安装
java -version
mvn -version
# 安装 PostgreSQL
apt install -y postgresql postgresql-contrib
# 安装 pgvector 依赖
apt install -y postgresql-server-dev-all build-essential git
# 编译安装 pgvector
cd /tmp
git clone https://github.com/pgvector/pgvector.git
cd pgvector
make
make install
# 启动 PostgreSQL
systemctl enable postgresql
systemctl start postgresql
# 切换到 postgres 用户
sudo -u postgres psql
# 在 psql 中执行
CREATE USER lingyue WITH PASSWORD '123123';
CREATE DATABASE lingyue_zhibao OWNER lingyue;
GRANT ALL PRIVILEGES ON DATABASE lingyue_zhibao TO lingyue;
\c lingyue_zhibao
CREATE EXTENSION IF NOT EXISTS vector;
CREATE EXTENSION IF NOT EXISTS "uuid-ossp";
\q
apt install -y redis-server
systemctl enable redis-server
systemctl start redis-server
# 验证
redis-cli ping
apt install -y rabbitmq-server
systemctl enable rabbitmq-server
systemctl start rabbitmq-server
# 启用管理插件
rabbitmq-plugins enable rabbitmq_management
# 创建用户
rabbitmqctl add_user admin admin123
rabbitmqctl set_user_tags admin administrator
rabbitmqctl set_permissions -p / admin ".*" ".*" ".*"
# 创建项目目录
mkdir -p /mnt/win_home/lingyue-zhibao
cd /mnt/win_home/lingyue-zhibao
# 克隆项目(或从本地复制)
git clone <your-gitlab-repo-url> .
# 初始化数据库表
psql -U lingyue -d lingyue_zhibao -f database/init.sql
psql -U lingyue -d lingyue_zhibao -f backend/sql/rag_tables.sql
# 编译项目
cd backend
mvn clean package -DskipTests
编辑 backend/lingyue-starter/src/main/resources/application.properties:
# 数据库配置
spring.datasource.druid.url=jdbc:postgresql://localhost:5432/lingyue_zhibao
spring.datasource.druid.username=lingyue
spring.datasource.druid.password=123123
# Redis 配置
spring.data.redis.host=localhost
spring.data.redis.port=6379
# RabbitMQ 配置
spring.rabbitmq.host=localhost
spring.rabbitmq.port=5672
spring.rabbitmq.username=admin
spring.rabbitmq.password=admin123
# Ollama 配置(使用本地 vLLM 或远程服务)
ollama.url=http://localhost:11434
ollama.embedding.model=nomic-embed-text
# DeepSeek API(可选,使用本地 vLLM 替代)
# deepseek.api.url=http://localhost:8080/v1
# deepseek.api.key=token-abc123
cd /mnt/win_home/lingyue-zhibao/backend
# 前台启动
java -Xms1g -Xmx2g -jar lingyue-starter/target/lingyue-starter.jar
# 或后台启动
nohup java -Xms1g -Xmx2g -jar lingyue-starter/target/lingyue-starter.jar > /var/log/lingyue.log 2>&1 &
# 安装 Ollama
curl -fsSL https://ollama.ai/install.sh | sh
# 下载 Embedding 模型
ollama pull nomic-embed-text
# 启动服务
nohup ollama serve > /var/log/ollama.log 2>&1 &
如果你的 vLLM 已经在运行,可以配置兼容的 Embedding 服务:
# application.properties
ollama.url=http://localhost:8080
# 使用 Docker(如果可用)
docker run -d --gpus all -p 8081:80 \
ghcr.io/huggingface/text-embeddings-inference:latest \
--model-id BAAI/bge-base-zh-v1.5
创建 /etc/systemd/system/lingyue.service:
[Unit]
Description=Lingyue Zhibao Application
After=network.target postgresql.service redis.service rabbitmq-server.service
[Service]
Type=simple
User=root
WorkingDirectory=/mnt/win_home/lingyue-zhibao/backend
ExecStart=/usr/bin/java -Xms1g -Xmx2g -jar lingyue-starter/target/lingyue-starter.jar
Restart=always
RestartSec=10
Environment=JAVA_HOME=/usr/lib/jvm/java-17-openjdk-amd64
[Install]
WantedBy=multi-user.target
启用服务:
systemctl daemon-reload
systemctl enable lingyue
systemctl start lingyue
# 查看状态
systemctl status lingyue
# 查看日志
journalctl -u lingyue -f
| 方法 | 路径 | 功能 |
|---|---|---|
| POST | /auth/register |
用户注册 |
| POST | /auth/login |
用户登录 |
| POST | /auth/logout |
用户登出 |
| 方法 | 路径 | 功能 |
|---|---|---|
| POST | /api/v1/parse/upload |
上传文件 |
| GET | /api/v1/parse/file/exists |
检查文件是否存在 |
| 方法 | 路径 | 功能 |
|---|---|---|
| POST | /parse/start |
启动解析任务 |
| GET | /parse/status/{documentId} |
查询解析状态 |
| 方法 | 路径 | 功能 |
|---|---|---|
| POST | /api/rag/index |
索引文档 |
| POST | /api/rag/query |
RAG 问答 |
| GET | /api/rag/chunks/{documentId} |
获取文档分块 |
| DELETE | /api/rag/index/{documentId} |
删除索引 |
# 1. 检查服务状态
curl http://localhost:8000/actuator/health
# 2. 用户注册
curl -X POST http://localhost:8000/auth/register \
-H "Content-Type: application/json" \
-d '{"username":"admin","email":"admin@lingyue.com","password":"admin123"}'
# 3. 用户登录
curl -X POST http://localhost:8000/auth/login \
-H "Content-Type: application/json" \
-d '{"username":"admin","password":"admin123"}'
# 4. 上传测试文件
curl -X POST http://localhost:8000/api/v1/parse/upload \
-F "file=@test.pdf" \
-F "userId=admin"
# /etc/nginx/sites-available/lingyue
server {
listen 80;
server_name your-domain.com;
location / {
proxy_pass http://localhost:8000;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
# WebSocket 支持
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
}
# 文件上传大小限制
client_max_body_size 100M;
}
启用:
ln -s /etc/nginx/sites-available/lingyue /etc/nginx/sites-enabled/
nginx -t && systemctl reload nginx
| 服务 | 端口 | 说明 |
|---|---|---|
| 灵越智报 | 8000 | 主应用 |
| PostgreSQL | 5432 | 数据库 |
| Redis | 6379 | 缓存 |
| RabbitMQ | 5672 | 消息队列 |
| RabbitMQ 管理 | 15672 | Web 管理界面 |
| Ollama | 11434 | Embedding 服务 |
| vLLM(现有) | - | LLM 推理服务 |
在服务器上执行:
#!/bin/bash
# deploy.sh
set -e
PROJECT_DIR="/mnt/win_home/lingyue-zhibao"
echo "=== 检查服务状态 ==="
systemctl is-active postgresql || systemctl start postgresql
systemctl is-active redis-server || systemctl start redis-server
systemctl is-active rabbitmq-server || systemctl start rabbitmq-server
echo "=== 编译项目 ==="
cd $PROJECT_DIR/backend
mvn clean package -DskipTests -q
echo "=== 停止旧进程 ==="
pkill -f "lingyue-starter.jar" || true
sleep 2
echo "=== 启动应用 ==="
nohup java -Xms1g -Xmx2g -jar lingyue-starter/target/lingyue-starter.jar > /var/log/lingyue.log 2>&1 &
sleep 10
echo "=== 检查应用状态 ==="
curl -s http://localhost:8000/actuator/health || echo "启动中,请稍候..."
echo "=== 部署完成 ==="
echo "访问地址: http://$(hostname -I | awk '{print $1}'):8000"