Skip to content

生产环境部署

本指南介绍如何将 SuperSQL 应用部署到生产环境。

环境准备

系统要求

  • 操作系统: Linux (推荐 Ubuntu 20.04+)
  • Java: JDK 21 或更高版本
  • 内存: 至少 4GB RAM
  • 磁盘: 至少 10GB 可用空间
  • 数据库: MySQL 8.0+ 或其他支持的数据库
  • 向量数据库: Chroma、Milvus 或其他向量数据库

软件要求

  • Java 应用服务器: Tomcat 9+、Jetty 或其他
  • 反向代理: Nginx 1.18+ 或 Apache 2.4+
  • 进程管理: systemd、supervisor 或其他

应用配置

生产配置文件

创建 application-prod.yml

yaml
server:
  port: 8080
  compression:
    enabled: true
    mime-types: application/json,application/xml,text/html,text/xml,text/plain

spring:
  application:
    name: supersql-prod
  
  datasource:
    url: ${DB_URL}
    username: ${DB_USERNAME}
    password: ${DB_PASSWORD}
    driver-class-name: com.mysql.cj.jdbc.Driver
    hikari:
      maximum-pool-size: 20
      minimum-idle: 5
      connection-timeout: 30000
      idle-timeout: 600000
      max-lifetime: 1800000

  ai:
    azure:
      openai:
        api-key: ${AZURE_API_KEY}
        chat:
          options:
            deployment-name: gpt-4o-latest
            temperature: 0.7
            max-tokens: 2000
        endpoint: ${AZURE_ENDPOINT}
        embedding:
          options:
            deployment-name: embedding-ada-002

    vectorstore:
      chroma:
        client:
          host: ${CHROMA_HOST}
          port: ${CHROMA_PORT}
        collection-name: supersql
        initialize-schema: true

    reranker:
      enabled: true
      model: Qwen3-Reranker-8B
      base-url: ${RERANK_BASE_URL}
      api-key: ${RERANK_API_KEY}

super-sql:
  init-train: false
  scope: ALONE
  temperature: 0.0

logging:
  level:
    com.aispace.supersql: INFO
    org.springframework.ai: INFO
  file:
    name: /var/log/supersql/application.log
  pattern: "%d{yyyy-MM-dd}.%i.log"
  logback:
    rollingpolicy:
      max-file-size: 100MB
      total-size-cap: 10GB

环境变量

使用环境变量管理敏感信息:

bash
export DB_URL="jdbc:mysql://localhost:3306/supersql_db"
export DB_USERNAME="supersql_user"
export DB_PASSWORD="your_password"
export AZURE_API_KEY="your_azure_api_key"
export AZURE_ENDPOINT="https://your-resource.openai.azure.com/"
export CHROMA_HOST="localhost"
export CHROMA_PORT="8000"
export RERANK_BASE_URL="https://ai.gitee.com/v1/rerank"
export RERANK_API_KEY="your_rerank_api_key"

打包应用

Maven 打包

bash
mvn clean package -DskipTests -Pprod

构建可执行 JAR

bash
mvn clean package -DskipTests -Pprod
java -jar target/super-sql-console-1.0.0-M1.jar

部署到服务器

使用 systemd

创建服务文件 /etc/systemd/system/supersql.service

ini
[Unit]
Description=SuperSQL Application
After=network.target

[Service]
Type=simple
User=supersql
WorkingDirectory=/opt/supersql
ExecStart=/usr/bin/java -jar /opt/supersql/super-sql-console-1.0.0-M1.jar
Restart=always
RestartSec=10
StandardOutput=journal
StandardError=journal

[Install]
WantedBy=multi-user.target

启动服务:

bash
sudo systemctl daemon-reload
sudo systemctl enable supersql
sudo systemctl start supersql
sudo systemctl status supersql

使用 Docker

创建 Dockerfile

dockerfile
FROM openjdk:21-jre-slim

WORKDIR /app

COPY target/super-sql-console-1.0.0-M1.jar app.jar

EXPOSE 8080

ENTRYPOINT ["java", "-jar", "app.jar"]

构建和运行:

bash
docker build -t supersql:latest .
docker run -d \
  --name supersql \
  -p 8080:8080 \
  -e DB_URL="jdbc:mysql://mysql:3306/supersql_db" \
  -e DB_USERNAME="supersql_user" \
  -e DB_PASSWORD="your_password" \
  -e AZURE_API_KEY="your_azure_api_key" \
  supersql:latest

Nginx 配置

配置 Nginx 作为反向代理:

nginx
upstream supersql {
    server 127.0.0.1:8080;
}

server {
    listen 80;
    server_name your-domain.com;

    location / {
        proxy_pass http://supersql;
        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;
        
        proxy_connect_timeout 300s;
        proxy_send_timeout 300s;
        proxy_read_timeout 300s;
    }

    location /health {
        access_log off;
        return 200 "healthy";
    }
}

监控和日志

应用监控

配置健康检查端点:

java
@RestController
public class HealthController {
    
    @GetMapping("/health")
    public ResponseEntity<Map<String, String>> health() {
        Map<String, String> health = new HashMap<>();
        health.put("status", "UP");
        health.put("timestamp", Instant.now().toString());
        return ResponseEntity.ok(health);
    }
}

日志管理

配置日志轮转和归档:

bash
/var/log/supersql/*.log {
    daily
    rotate 30
    compress
    delaycompress
    missingok
    notifempty
    create 644 root root
}

安全配置

SSL/TLS 配置

配置 HTTPS:

nginx
server {
    listen 443 ssl;
    server_name your-domain.com;

    ssl_certificate /etc/nginx/ssl/cert.pem;
    ssl_certificate_key /etc/nginx/ssl/key.pem;
    ssl_protocols TLSv1.2 TLSv1.3;
    ssl_ciphers HIGH:!aNULL:!MD5;

    location / {
        proxy_pass http://supersql;
        proxy_set_header X-Forwarded-Proto https;
    }
}

防火墙配置

配置防火墙规则:

bash
sudo ufw allow 80/tcp
sudo ufw allow 443/tcp
sudo ufw allow 22/tcp
sudo ufw enable

性能优化

JVM 参数

优化 JVM 参数:

bash
java -Xms2g -Xmx2g \
     -XX:+UseG1GC \
     -XX:MaxGCPauseMillis=200 \
     -XX:+HeapDumpOnOutOfMemoryError \
     -XX:HeapDumpPath=/var/log/supersql/ \
     -jar supersql-console.jar

数据库连接池

优化连接池配置:

yaml
spring:
  datasource:
    hikari:
      maximum-pool-size: 50
      minimum-idle: 10
      connection-timeout: 30000
      idle-timeout: 600000
      max-lifetime: 1800000
      leak-detection-threshold: 60000

下一步

最近更新

基于 Apache 2.0 许可证发布