This commit is contained in:
2025-11-11 18:18:35 +08:00
parent 981b2fefba
commit dda1a4935a
2 changed files with 15 additions and 84 deletions

View File

@@ -5,19 +5,17 @@ FROM docker.aipper.de/eclipse-temurin:8-jre-alpine AS base
# 设置维护者信息
LABEL maintainer="digital-archive-team"
# 使用阿里云镜像源并安装基础包
# 使用阿里云镜像源并安装最小基础包
RUN sed -i 's/dl-cdn.alpinelinux.org/mirrors.aliyun.com/g' /etc/apk/repositories && \
apk add --no-cache \
ca-certificates \
curl \
bash \
ttf-dejavu \
fontconfig \
tini \
&& rm -rf /var/cache/apk/*
# ===== Maven 构建阶段 =====
# 使用更小的Alpine Maven镜像进行构建
FROM docker.aipper.de/maven:3.9.9-eclipse-temurin-8-focal AS builder
FROM docker.aipper.de/maven:3.9.9-eclipse-temurin-8-alpine AS builder
# 设置工作目录
WORKDIR /build
@@ -111,7 +109,10 @@ RUN echo "=== 验证Maven环境 ===" && \
RUN echo "=== 开始构建应用 ===" && \
mvn clean package -DskipTests -B -s /root/.m2/settings.xml -e \
-Dmaven.test.skip=true \
-Dmaven.compiler.optimize=true
-Dmaven.compiler.optimize=true \
&& \
echo "=== 清理Maven缓存减少镜像大小 ===" && \
rm -rf /root/.m2/repository
# 检查构建结果并复制正确的JAR文件
RUN echo "=== 检查构建结果 ===" && \
@@ -121,14 +122,16 @@ RUN echo "=== 检查构建结果 ===" && \
echo "=== 复制正确的 JAR 文件 ===" && \
cp /build/target/*.jar /build/app.jar && \
ls -la /build/app.jar && \
echo "JAR 文件大小: $(du -h /build/app.jar | cut -f1)"
echo "JAR 文件大小: $(du -h /build/app.jar | cut -f1)" && \
echo "=== 清理构建临时文件 ===" && \
rm -rf /build/src /build/pom.xml /build/target /tmp/local-jars
# ===== 运行阶段 =====
# 复用基础镜像,避免重复安装依赖
FROM base
# 设置环境变量
ENV JAVA_OPTS="-Xmx1g -Xms512m -XX:+UseG1GC -XX:MaxGCPauseMillis=200 -Djava.awt.headless=true -XX:+UseContainerSupport -XX:MaxRAMPercentage=75.0"
# 设置环境变量(优化内存使用)
ENV JAVA_OPTS="-Xmx512m -Xms256m -XX:+UseG1GC -XX:MaxGCPauseMillis=200 -Djava.awt.headless=true -XX:+UseContainerSupport -XX:MaxRAMPercentage=75.0"
ENV SPRING_PROFILES_ACTIVE=prod
# 创建应用用户和目录
@@ -165,5 +168,6 @@ HEALTHCHECK --interval=30s --timeout=10s --start-period=60s --retries=3 \
# 暴露端口
EXPOSE 9081
# 启动应用
# 使用tini作为init进程正确处理信号
ENTRYPOINT ["/sbin/tini", "--"]
CMD ["sh", "-c", "java $JAVA_OPTS -jar app.jar"]

View File

@@ -1,11 +1,6 @@
version: '3.8'
services:
# 主应用服务
app:
build:
context: .
dockerfile: Dockerfile
image: archive
container_name: digital-archive-app
ports:
- "9081:9081"
@@ -20,29 +15,21 @@ services:
environment:
- SPRING_PROFILES_ACTIVE=prod
- SERVER_PORT=9081
# 数据库配置
- DB_HOST=database
- DB_PORT=54321
- DB_NAME=enterprise_digital_archives
- DB_USERNAME=system
- DB_PASSWORD=12345678ab
# Redis配置
- REDIS_HOST=redis
- REDIS_PORT=6379
- REDIS_PASSWORD=Abc123456
# Elasticsearch配置 - 使用已有的 "es" 容器
- ELASTICSEARCH_HOST=es
- ELASTICSEARCH_PORT=9200
- ELASTICSEARCH_SCHEME=http
# OCR配置
- TESS_PATH=/usr/bin/tesseract
# 其他配置
- SWAGGER_SHOW=false
- LOG_ROOT_LEVEL=info
- LOG_APP_LEVEL=info
depends_on:
- database
- redis
networks:
- proxy
restart: unless-stopped
@@ -52,66 +39,6 @@ services:
timeout: 10s
retries: 3
start_period: 60s
# 人大金仓数据库(示例)
database:
image: kingbase:v8.6.0
container_name: digital-archive-db
ports:
- "54321:54321"
environment:
- KINGBASE_USER=system
- KINGBASE_PASSWORD=12345678ab
- KINGBASE_DATABASE=enterprise_digital_archives
volumes:
- ./data/database:/var/lib/kingbase/data
- ./init-scripts:/docker-entrypoint-initdb.d
networks:
- proxy
restart: unless-stopped
# Redis缓存
redis:
image: redis:6-alpine
container_name: digital-archive-redis
ports:
- "6379:6379"
command: redis-server --requirepass Abc123456
volumes:
- ./data/redis:/data
networks:
- proxy
restart: unless-stopped
# Elasticsearch - 使用已有的 "es" 容器
# 注意:确保已有的 "es" 容器已连接到 proxy 网络
# Nginx反向代理可选
nginx:
image: nginx:alpine
container_name: digital-archive-nginx
ports:
- "80:80"
- "443:443"
volumes:
- ./nginx/nginx.conf:/etc/nginx/nginx.conf
- ./nginx/ssl:/etc/nginx/ssl
depends_on:
- app
networks:
- proxy
restart: unless-stopped
networks:
proxy:
external: true
volumes:
upload-data:
temp-data:
unzip-data:
images-data:
reports-data:
database-data:
redis-data:
elasticsearch-data: