From 5a716da5a6b6bd835613afe8765b34bdc4545cb5 Mon Sep 17 00:00:00 2001 From: LM20230311 Date: Wed, 4 Mar 2026 16:31:54 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E6=B7=BB=E5=8A=A0docker=E9=83=A8?= =?UTF-8?q?=E7=BD=B2=E6=96=87=E4=BB=B6=EF=BC=9B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Dockerfile.backend | 36 ++++++++++++ docker-compose.yaml | 132 ++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 168 insertions(+) create mode 100644 Dockerfile.backend create mode 100644 docker-compose.yaml diff --git a/Dockerfile.backend b/Dockerfile.backend new file mode 100644 index 00000000..cde79cea --- /dev/null +++ b/Dockerfile.backend @@ -0,0 +1,36 @@ +# RuoYi-AI 后端 Dockerfile +# 基于 Maven + OpenJDK 17 + +FROM maven:3.9-eclipse-temurin-17 AS builder + +# 设置工作目录 +WORKDIR /build + +# 复制 pom.xml 和源码 +COPY pom.xml . +COPY ruoyi-admin ./ruoyi-admin +COPY ruoyi-common ./ruoyi-common +COPY ruoyi-modules ./ruoyi-modules +COPY ruoyi-extend ./ruoyi-extend +COPY ruoyi-modules-api ./ruoyi-modules-api + +# 构建项目 (使用 prod profile) +RUN mvn clean package -Pprod -DskipTests + +# 最终运行镜像 +FROM eclipse-temurin:17-jre-alpine + +# 设置工作目录 +WORKDIR /app + +# 从构建阶段复制 jar 包 +COPY --from=builder /build/ruoyi-admin/target/ruoyi-admin.jar ./ruoyi-admin.jar + +# 创建日志目录 +RUN mkdir -p /ruoyi/server/logs + +# 暴露端口 +EXPOSE 6039 + +# 启动命令 +ENTRYPOINT ["java", "-jar", "ruoyi-admin.jar", "--spring.profiles.active=prod"] diff --git a/docker-compose.yaml b/docker-compose.yaml new file mode 100644 index 00000000..a6245fae --- /dev/null +++ b/docker-compose.yaml @@ -0,0 +1,132 @@ +version: '3.8' + +# RuoYi-AI 一键启动后端服务 +# 使用方式: docker-compose up -d --build +# +# 包含服务: +# - MySQL 8.0 (数据库) +# - Redis 6.2 (缓存) +# - Weaviate (向量数据库) +# - MinIO (对象存储) +# - RuoYi-Backend (后端服务,源码编译) + +services: + # MySQL 数据库 + mysql: + image: mysql:8.0.33 + container_name: ruoyi-ai-mysql + restart: always + ports: + - "3306:3306" + environment: + MYSQL_ROOT_PASSWORD: root + MYSQL_DATABASE: ruoyi-ai + TZ: Asia/Shanghai + volumes: + - ./docs/script/sql:/docker-entrypoint-initdb.d:ro + - ./data/mysql:/var/lib/mysql + command: + --default-authentication-plugin=mysql_native_password + --character-set-server=utf8mb4 + --collation-server=utf8mb4_general_ci + --explicit_defaults_for_timestamp=true + --lower_case_table_names=1 + healthcheck: + test: ["CMD", "mysqladmin", "ping", "-h", "localhost"] + interval: 10s + timeout: 5s + retries: 5 + networks: + - ruoyi-net + + # Redis 缓存 + redis: + image: redis:6.2 + container_name: ruoyi-ai-redis + restart: always + ports: + - "6379:6379" + volumes: + - ./data/redis:/data + command: redis-server --appendonly yes + healthcheck: + test: ["CMD", "redis-cli", "ping"] + interval: 10s + timeout: 5s + retries: 5 + networks: + - ruoyi-net + + # Weaviate 向量数据库 + weaviate: + image: semitechnologies/weaviate:1.30.0 + container_name: ruoyi-ai-weaviate + restart: always + ports: + - "8080:8080" + environment: + QUERY_DEFAULTS_LIMIT: 25 + AUTHENTICATION_ANONYMOUS_ACCESS_ENABLED: true + PERSISTENCE_DATA_PATH: /var/lib/weaviate + DEFAULT_VECTORIZER_MODULE: none + ENABLE_MODULES: text2vec-cohere,text2vec-huggingface,text2vec-palm,text2vec-openai,generative-openai,generative-cohere,generative-palm,ref2vec-centroid,reranker-cohere,qna-openai + CLUSTER_HOSTNAME: node1 + volumes: + - ./data/weaviate:/var/lib/weaviate + networks: + - ruoyi-net + + # MinIO 对象存储 + minio: + image: minio/minio + container_name: ruoyi-ai-minio + restart: always + ports: + - "9000:9000" + - "9090:9090" + environment: + MINIO_ROOT_USER: ruoyi + MINIO_ROOT_PASSWORD: ruoyi123 + volumes: + - ./data/minio:/data + command: server /data --console-address ":9090" + networks: + - ruoyi-net + + # RuoYi-AI 后端服务 (源码编译) + backend: + build: + context: . + dockerfile: Dockerfile.backend + container_name: ruoyi-ai-backend + restart: always + ports: + - "6039:6039" + environment: + TZ: Asia/Shanghai + # MySQL 配置 + SPRING_DATASOURCE_DYNAMIC_PRIMARY: master + SPRING_DATASOURCE_DYNAMIC_DATASOURCE_MASTER_DRIVERCLASSNAME: com.mysql.cj.jdbc.Driver + SPRING_DATASOURCE_DYNAMIC_DATASOURCE_MASTER_URL: jdbc:mysql://mysql:3306/ruoyi-ai?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8&autoReconnect=true&rewriteBatchedStatements=true + SPRING_DATASOURCE_DYNAMIC_DATASOURCE_MASTER_USERNAME: root + SPRING_DATASOURCE_DYNAMIC_DATASOURCE_MASTER_PASSWORD: root + # Redis 配置 + SPRING_DATA_REDIS_HOST: redis + SPRING_DATA_REDIS_PORT: 6379 + SPRING_DATA_REDIS_DATABASE: 0 + # 日志配置 + LOGGING_LEVEL_ORG_RUOYI: info + LOGGING_LEVEL_ORG_SPRINGFRAMEWORK: warn + volumes: + - ./data/logs:/ruoyi/server/logs + depends_on: + mysql: + condition: service_healthy + redis: + condition: service_started + networks: + - ruoyi-net + +networks: + ruoyi-net: + driver: bridge