生产环境部署
本指南介绍如何将 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:latestNginx 配置
配置 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