Docker 部署
本指南介绍如何使用 Docker 部署 SuperSQL 应用。
Dockerfile
后端 Dockerfile
创建 super-sql-console/Dockerfile:
dockerfile
FROM maven:3.9.9-eclipse-temurin AS builder
WORKDIR /app
COPY pom.xml .
COPY super-sql-core/pom.xml ./super-sql-core/
COPY super-sql-console/pom.xml ./super-sql-console/
RUN mvn dependency:go-offline -B
COPY . .
RUN mvn clean package -DskipTests -Pprod
FROM openjdk:21-jre-slim
WORKDIR /app
COPY --from=builder /app/target/super-sql-console-*.jar app.jar
EXPOSE 8080
ENTRYPOINT ["java", "-jar", "app.jar"]前端 Dockerfile
创建 super-sql-ui/Dockerfile:
dockerfile
FROM node:18-alpine AS builder
WORKDIR /app
COPY package*.json ./
RUN npm install
COPY . .
RUN npm run build
FROM nginx:alpine
COPY --from=builder /app/dist /usr/share/nginx/html
COPY nginx.conf /etc/nginx/conf.d/default.conf
EXPOSE 80
CMD ["nginx", "-g", "daemon off;"]docker-compose.yml
创建 docker-compose.yml:
yaml
version: '3.8'
services:
mysql:
image: mysql:8.0
container_name: supersql-mysql
environment:
MYSQL_ROOT_PASSWORD: root
MYSQL_DATABASE: supersql_db
MYSQL_USER: supersql_user
MYSQL_PASSWORD: supersql_password
ports:
- "3306:3306"
volumes:
- mysql-data:/var/lib/mysql
networks:
- supersql-network
chroma:
image: ghcr.io/chroma-core/chroma:1.0.0
container_name: supersql-chroma
ports:
- "8000:8000"
volumes:
- chroma-data:/chroma/chroma
networks:
- supersql-network
supersql-backend:
build:
context: ./super-sql-console
dockerfile: Dockerfile
container_name: supersql-backend
environment:
SPRING_DATASOURCE_URL: jdbc:mysql://mysql:3306/supersql_db
SPRING_DATASOURCE_USERNAME: supersql_user
SPRING_DATASOURCE_PASSWORD: supersql_password
SPRING_AI_AZURE_OPENAI_API_KEY: ${AZURE_API_KEY}
SPRING_AI_AZURE_OPENAI_ENDPOINT: ${AZURE_ENDPOINT}
SPRING_AI_VECTORSTORE_CHROMA_CLIENT_HOST: chroma
SPRING_AI_VECTORSTORE_CHROMA_CLIENT_PORT: 8000
ports:
- "8080:8080"
depends_on:
- mysql
- chroma
networks:
- supersql-network
supersql-frontend:
build:
context: ./super-sql-ui
dockerfile: Dockerfile
container_name: supersql-frontend
ports:
- "80:80"
depends_on:
- supersql-backend
networks:
- supersql-network
volumes:
mysql-data:
chroma-data:
networks:
supersql-network:
driver: bridge构建和运行
构建镜像
bash
docker-compose build启动服务
bash
docker-compose up -d查看日志
bash
docker-compose logs -f停止服务
bash
docker-compose down环境变量
创建 .env 文件:
env
AZURE_API_KEY=your_azure_api_key
AZURE_ENDPOINT=https://your-resource.openai.azure.com/生产部署
使用 Docker Swarm
bash
docker swarm init
docker stack deploy -c docker-compose.yml supersql使用 Kubernetes
创建 k8s-deployment.yaml:
yaml
apiVersion: apps/v1
kind: Deployment
metadata:
name: supersql-backend
spec:
replicas: 3
selector:
matchLabels:
app: supersql-backend
template:
metadata:
labels:
app: supersql-backend
spec:
containers:
- name: supersql-backend
image: supersql-backend:latest
ports:
- containerPort: 8080
env:
- name: SPRING_DATASOURCE_URL
valueFrom:
secretKeyRef:
name: supersql-secrets
key: db-url
---
apiVersion: v1
kind: Service
metadata:
name: supersql-backend
spec:
selector:
app: supersql-backend
ports:
- protocol: TCP
port: 80
targetPort: 8080
type: LoadBalancer