Skip to content

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

下一步

最近更新

基于 Apache 2.0 许可证发布