API 服务端 Dockerfile
FROM maven:3.8.6-eclipse-temurin-8-alpine AS builder
WORKDIR /app
COPY pom.xml .
COPY model/pom.xml model/pom.xml
COPY blog/pom.xml blog/pom.xml
RUN mvn dependency:go-offline -B
COPY . .
RUN mvn clean package -DskipTests -P pro
FROM eclipse-temurin:8-jre-alpine
WORKDIR /app
COPY --from=builder /app/blog/target/*.jar app.jar
CMD ["java", "-Xms256m", "-Xmx512m", "-jar", "app.jar"]
管理端 Dockerfile
FROM registry.cn-hangzhou.aliyuncs.com/liuyi778/node-20-alpine AS builder
WORKDIR /thrive
COPY package*.json ./
RUN npm config set registry https://registry.npmmirror.com
RUN npm install
COPY . .
ARG VITE_PROJECT_API
ARG VITE_VERSION
ARG VITE_BAIDU_TONGJI_SITE_ID
ARG VITE_BAIDU_TONGJI_SITE_NAME
ARG VITE_AI_APIPASSWORD
ARG VITE_AI_MODEL
ARG VITE_GAODE_WEB_API
ENV VITE_PROJECT_API=$VITE_PROJECT_API \
VITE_VERSION=$VITE_VERSION \
VITE_BAIDU_TONGJI_SITE_ID=$VITE_BAIDU_TONGJI_SITE_ID \
VITE_BAIDU_TONGJI_SITE_NAME=$VITE_BAIDU_TONGJI_SITE_NAME \
VITE_AI_APIPASSWORD=$VITE_AI_APIPASSWORD \
VITE_AI_MODEL=$VITE_AI_MODEL \
VITE_GAODE_WEB_API=$VITE_GAODE_WEB_API
RUN npm run build
FROM nginx:alpine
COPY --from=builder /thrive/dist /usr/share/nginx/html
EXPOSE 80
CMD ["nginx", "-g", "daemon off;"]
Web 端 Dockerfile
FROM node:20-alpine
WORKDIR /thrive
RUN npm config set registry https://registry.npmmirror.com
COPY package*.json .
RUN npm install
COPY . .
ARG NEXT_PUBLIC_PROJECT_API
ARG NEXT_PUBLIC_CACHING_TIME
ARG NEXT_PUBLIC_GAODE_KEY_CODE
ARG NEXT_PUBLIC_GAODE_SECURITYJS_CODE
ENV NEXT_PUBLIC_PROJECT_API=$NEXT_PUBLIC_PROJECT_API \
NEXT_PUBLIC_CACHING_TIME=$NEXT_PUBLIC_CACHING_TIME \
NEXT_PUBLIC_GAODE_KEY_CODE=$NEXT_PUBLIC_GAODE_KEY_CODE \
NEXT_PUBLIC_GAODE_SECURITYJS_CODE=$NEXT_PUBLIC_GAODE_SECURITYJS_CODE
RUN npm run build
EXPOSE 9001
CMD ["npm", "start"]
Docker Compose 配置
version: '3.7'
services:
mysql:
image: mysql
container_name: db
environment:
MYSQL_ROOT_PASSWORD: 123456
TZ: Asia/Shanghai
MYSQL_DATABASE: thrivex_blog
volumes:
- ./mysql:/var/lib/mysql
- ./ThriveX-Server/ThriveX.sql:/docker-entrypoint-initdb.d/init.sql
command:
--max_connections=1000
--character-set-server=utf8mb4
--collation-server=utf8mb4_bin
ports:
- "3309:3306"
networks:
- thrivex_network
server:
build:
context: ./ThriveX-Server
dockerfile: Dockerfile-maven
environment:
DB_DATABASE: thrivex_blog
DB_HOST: db
DB_USERNAME: root
DB_PASSWORD: 123456
DB_PORT: 3306
volumes:
- ./upload:/upload
ports:
- "9999:9999"
healthcheck:
test: ["CMD", "curl", "-f", "https://localhost:9999"]
interval: 10s
timeout: 5s
retries: 3
depends_on:
- mysql
client:
build:
context: ./ThriveX-Blog
args:
NEXT_PUBLIC_PROJECT_API: https://d.luoyuanxiang.top:9999/api
NEXT_PUBLIC_CACHING_TIME: 0
ports:
- "9001:9001"
depends_on:
server:
condition: service_healthy
dashboard:
build:
context: ./ThriveX-Admin
args:
VITE_PROJECT_API: https://d.luoyuanxiang.top:9999/api
VITE_VERSION: 2.4.5
ports:
- "9000:80"
depends_on:
server:
condition: service_healthy
networks:
thrivex_network:
driver: bridge