test
This commit is contained in:
@@ -4,6 +4,9 @@ target/test-classes/
|
||||
target/maven-archiver/
|
||||
target/maven-status/
|
||||
|
||||
# settings.xml需要复制到构建容器中,所以不忽略
|
||||
# settings.xml
|
||||
|
||||
# IDE文件
|
||||
.idea/
|
||||
.vscode/
|
||||
|
||||
15
Dockerfile
15
Dockerfile
@@ -5,17 +5,22 @@ FROM maven:3.8.4-openjdk-8-slim AS builder
|
||||
# 设置工作目录
|
||||
WORKDIR /build
|
||||
|
||||
# 复制pom.xml文件
|
||||
# 复制settings.xml和pom.xml文件
|
||||
COPY settings.xml /root/.m2/
|
||||
COPY pom.xml .
|
||||
|
||||
# 下载依赖(利用Docker缓存层)
|
||||
RUN mvn dependency:go-offline -B
|
||||
# 设置Maven仓库权限
|
||||
RUN mkdir -p /root/.m2/repository && \
|
||||
chown -R root:root /root/.m2
|
||||
|
||||
# 下载依赖(利用Docker缓存层和国内镜像)
|
||||
RUN mvn dependency:go-offline -B -s /root/.m2/settings.xml
|
||||
|
||||
# 复制源代码
|
||||
COPY src ./src
|
||||
|
||||
# 构建应用
|
||||
RUN mvn clean package -DskipTests -B
|
||||
# 构建应用(使用国内镜像加速)
|
||||
RUN mvn clean package -DskipTests -B -s /root/.m2/settings.xml
|
||||
|
||||
# ===== 运行阶段 =====
|
||||
# 使用OpenJDK 8作为基础镜像
|
||||
|
||||
93
Dockerfile.optimized
Normal file
93
Dockerfile.optimized
Normal file
@@ -0,0 +1,93 @@
|
||||
# ===== 构建阶段 =====
|
||||
# 使用更轻量的Maven镜像
|
||||
FROM maven:3.8.4-openjdk-8-alpine AS builder
|
||||
|
||||
# 安装必要的工具
|
||||
RUN apk add --no-cache curl bash
|
||||
|
||||
# 设置工作目录
|
||||
WORKDIR /build
|
||||
|
||||
# 复制settings.xml和pom.xml文件
|
||||
COPY settings.xml /root/.m2/
|
||||
COPY pom.xml .
|
||||
|
||||
# 设置Maven仓库权限
|
||||
RUN mkdir -p /root/.m2/repository && \
|
||||
chown -R root:root /root/.m2
|
||||
|
||||
# 创建Maven配置目录
|
||||
RUN mkdir -p /root/.m2
|
||||
|
||||
# 配置Maven wrapper(如果项目有使用)
|
||||
# COPY .mvn/wrapper/maven-wrapper.jar /root/.m2/wrapper/
|
||||
# COPY .mvn/wrapper/maven-wrapper.properties /root/.m2/wrapper/
|
||||
|
||||
# 下载依赖(利用Docker缓存层和国内镜像)
|
||||
RUN mvn dependency:go-offline -B -s /root/.m2/settings.xml
|
||||
|
||||
# 复制源代码
|
||||
COPY src ./src
|
||||
|
||||
# 构建应用(使用国内镜像加速)
|
||||
RUN mvn clean package -DskipTests -B -s /root/.m2/settings.xml
|
||||
|
||||
# ===== 运行阶段 =====
|
||||
# 使用OpenJDK 8作为基础镜像
|
||||
FROM openjdk:8-jre-alpine AS runtime
|
||||
|
||||
# 设置维护者信息
|
||||
LABEL maintainer="digital-archive-team"
|
||||
|
||||
# 安装必要的系统依赖和Tesseract OCR
|
||||
RUN apk add --no-cache \
|
||||
tesseract \
|
||||
tesseract-data-chi_sim \
|
||||
tesseract-data-chi_tra \
|
||||
tesseract-data-eng \
|
||||
tesseract-ocr \
|
||||
tini \
|
||||
curl \
|
||||
bash \
|
||||
&& rm -rf /var/cache/apk/*
|
||||
|
||||
# 设置环境变量
|
||||
ENV JAVA_OPTS="-Xmx2g -Xms1g -XX:+UseG1GC -XX:MaxGCPauseMillis=200"
|
||||
ENV SPRING_PROFILES_ACTIVE=prod
|
||||
|
||||
# 创建应用用户和目录
|
||||
RUN addgroup -g 1001 app \
|
||||
&& adduser -D -s /bin/sh -u 1001 -G app app \
|
||||
&& mkdir -p /app/data/upload \
|
||||
&& mkdir -p /app/data/temp \
|
||||
&& mkdir -p /app/data/unzip \
|
||||
&& mkdir -p /app/data/images \
|
||||
&& mkdir -p /app/data/reports \
|
||||
&& mkdir -p /app/data/elasticsearch \
|
||||
&& mkdir -p /app/logs \
|
||||
&& chown -R app:app /app
|
||||
|
||||
# 设置工作目录
|
||||
WORKDIR /app
|
||||
|
||||
# 从构建阶段复制jar文件
|
||||
COPY --from=builder /build/target/point-strategy-*.jar app.jar
|
||||
|
||||
# 复制配置文件(如果需要覆盖默认配置)
|
||||
# COPY application-prod.yml application-prod.yml
|
||||
|
||||
# 切换到非root用户
|
||||
USER app
|
||||
|
||||
# 健康检查
|
||||
HEALTHCHECK --interval=30s --timeout=10s --start-period=60s --retries=3 \
|
||||
CMD curl -f http://localhost:9081/point-strategy/actuator/health || exit 1
|
||||
|
||||
# 暴露端口
|
||||
EXPOSE 9081
|
||||
|
||||
# 使用tini作为init进程
|
||||
ENTRYPOINT ["/sbin/tini", "--"]
|
||||
|
||||
# 启动应用
|
||||
CMD ["sh", "-c", "java $JAVA_OPTS -jar app.jar"]
|
||||
@@ -73,6 +73,22 @@ else
|
||||
echo -e "${YELLOW}请确保Redis容器已连接到 ${NETWORK_NAME} 网络${NC}"
|
||||
fi
|
||||
|
||||
# 检查Elasticsearch容器是否在proxy网络中
|
||||
echo -e "${YELLOW}检查Elasticsearch容器...${NC}"
|
||||
ES_CONTAINERS=$(docker network inspect ${NETWORK_NAME} --format '{{range .Containers}}{{.Name}} {{end}}' | tr ' ' '\n' | grep -i elasticsearch || true)
|
||||
|
||||
if [ ! -z "$ES_CONTAINERS" ]; then
|
||||
echo -e "${GREEN}找到Elasticsearch容器:${NC}"
|
||||
echo "$ES_CONTAINERS" | while read container; do
|
||||
if [ ! -z "$container" ]; then
|
||||
echo -e "${GREEN} - ${container}${NC}"
|
||||
fi
|
||||
done
|
||||
else
|
||||
echo -e "${RED}未找到Elasticsearch容器${NC}"
|
||||
echo -e "${YELLOW}请确保Elasticsearch容器已连接到 ${NETWORK_NAME} 网络${NC}"
|
||||
fi
|
||||
|
||||
# 测试网络连通性
|
||||
echo -e "${YELLOW}测试网络连通性...${NC}"
|
||||
if docker run --rm --network ${NETWORK_NAME} alpine ping -c 1 mysql &> /dev/null; then
|
||||
@@ -87,4 +103,10 @@ else
|
||||
echo -e "${RED}无法ping通redis容器${NC}"
|
||||
fi
|
||||
|
||||
if docker run --rm --network ${NETWORK_NAME} alpine ping -c 1 elasticsearch &> /dev/null; then
|
||||
echo -e "${GREEN}可以ping通elasticsearch容器${NC}"
|
||||
else
|
||||
echo -e "${RED}无法ping通elasticsearch容器${NC}"
|
||||
fi
|
||||
|
||||
echo -e "${GREEN}网络检查完成!${NC}"
|
||||
29
deploy.sh
29
deploy.sh
@@ -53,7 +53,7 @@ fi
|
||||
|
||||
# 创建必要的目录
|
||||
echo -e "${YELLOW}创建部署目录...${NC}"
|
||||
mkdir -p ${DEPLOY_DIR}/{data/{upload,temp,unzip,images,reports},logs,nginx}
|
||||
mkdir -p ${DEPLOY_DIR}/{data/{upload,temp,unzip,images,reports,elasticsearch},logs,nginx}
|
||||
|
||||
# 复制配置文件
|
||||
echo -e "${YELLOW}复制配置文件...${NC}"
|
||||
@@ -81,6 +81,9 @@ REDIS_HOST=redis
|
||||
REDIS_PORT=6379
|
||||
REDIS_PASSWORD=Abc123456
|
||||
|
||||
# Elasticsearch配置
|
||||
ELASTICSEARCH_URIS=http://elasticsearch:9200
|
||||
|
||||
# OCR配置
|
||||
TESS_PATH=/usr/bin/tesseract
|
||||
|
||||
@@ -219,6 +222,8 @@ services:
|
||||
- ./logs:/app/logs
|
||||
env_file:
|
||||
- .env
|
||||
depends_on:
|
||||
- elasticsearch
|
||||
networks:
|
||||
- proxy
|
||||
restart: unless-stopped
|
||||
@@ -229,6 +234,28 @@ services:
|
||||
retries: 3
|
||||
start_period: 60s
|
||||
|
||||
elasticsearch:
|
||||
image: elasticsearch:7.17.0
|
||||
container_name: digital-archive-elasticsearch
|
||||
ports:
|
||||
- "9200:9200"
|
||||
- "9300:9300"
|
||||
environment:
|
||||
- discovery.type=single-node
|
||||
- "ES_JAVA_OPTS=-Xms512m -Xmx512m"
|
||||
- xpack.security.enabled=false
|
||||
volumes:
|
||||
- ./data/elasticsearch:/usr/share/elasticsearch/data
|
||||
networks:
|
||||
- proxy
|
||||
restart: unless-stopped
|
||||
healthcheck:
|
||||
test: ["CMD-SHELL", "curl -f http://localhost:9200/_cluster/health || exit 1"]
|
||||
interval: 30s
|
||||
timeout: 10s
|
||||
retries: 3
|
||||
start_period: 60s
|
||||
|
||||
networks:
|
||||
proxy:
|
||||
external: true
|
||||
|
||||
@@ -44,6 +44,23 @@ services:
|
||||
retries: 3
|
||||
start_period: 60s
|
||||
|
||||
# Elasticsearch服务
|
||||
elasticsearch:
|
||||
image: elasticsearch:7.17.0
|
||||
container_name: digital-archive-elasticsearch
|
||||
ports:
|
||||
- "9200:9200"
|
||||
- "9300:9300"
|
||||
environment:
|
||||
- discovery.type=single-node
|
||||
- "ES_JAVA_OPTS=-Xms512m -Xmx512m"
|
||||
- xpack.security.enabled=false
|
||||
volumes:
|
||||
- ./data/elasticsearch:/usr/share/elasticsearch/data
|
||||
networks:
|
||||
- proxy
|
||||
restart: unless-stopped
|
||||
|
||||
networks:
|
||||
proxy:
|
||||
external: true
|
||||
@@ -68,8 +68,18 @@ if [ -z "$REDIS_CONTAINER" ]; then
|
||||
fi
|
||||
echo -e "${GREEN}找到Redis容器: ${REDIS_CONTAINER}${NC}"
|
||||
|
||||
# 6. 检查镜像
|
||||
echo -e "${YELLOW}6. 检查应用镜像...${NC}"
|
||||
# 6. 检查Elasticsearch容器
|
||||
echo -e "${YELLOW}6. 检查Elasticsearch容器...${NC}"
|
||||
ES_CONTAINER=$(docker network inspect proxy --format '{{range .Containers}}{{.Name}} {{end}}' | tr ' ' '\n' | grep -i elasticsearch | head -1 || true)
|
||||
if [ -z "$ES_CONTAINER" ]; then
|
||||
echo -e "${RED}错误: proxy网络中未找到Elasticsearch容器${NC}"
|
||||
echo -e "${YELLOW}请确保Elasticsearch容器已启动并连接到proxy网络${NC}"
|
||||
exit 1
|
||||
fi
|
||||
echo -e "${GREEN}找到Elasticsearch容器: ${ES_CONTAINER}${NC}"
|
||||
|
||||
# 7. 检查镜像
|
||||
echo -e "${YELLOW}7. 检查应用镜像...${NC}"
|
||||
if ! docker images | grep -q digital-archive; then
|
||||
echo -e "${RED}错误: digital-archive镜像不存在${NC}"
|
||||
echo -e "${YELLOW}请先运行: ./build.sh${NC}"
|
||||
@@ -77,8 +87,8 @@ if ! docker images | grep -q digital-archive; then
|
||||
fi
|
||||
echo -e "${GREEN}digital-archive镜像存在${NC}"
|
||||
|
||||
# 7. 检查部署目录
|
||||
echo -e "${YELLOW}7. 检查部署目录...${NC}"
|
||||
# 8. 检查部署目录
|
||||
echo -e "${YELLOW}8. 检查部署目录...${NC}"
|
||||
if [ -d "$DEPLOY_DIR" ]; then
|
||||
echo -e "${YELLOW}部署目录已存在: ${DEPLOY_DIR}${NC}"
|
||||
read -p "是否继续部署到现有目录? (y/N): " -n 1 -r
|
||||
@@ -91,8 +101,8 @@ else
|
||||
echo -e "${GREEN}创建新部署目录: ${DEPLOY_DIR}${NC}"
|
||||
fi
|
||||
|
||||
# 8. 测试网络连通性
|
||||
echo -e "${YELLOW}8. 测试网络连通性...${NC}"
|
||||
# 9. 测试网络连通性
|
||||
echo -e "${YELLOW}9. 测试网络连通性...${NC}"
|
||||
if docker run --rm --network proxy alpine ping -c 1 mysql &> /dev/null; then
|
||||
echo -e "${GREEN}可以连接MySQL容器${NC}"
|
||||
else
|
||||
@@ -107,11 +117,19 @@ else
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# 9. 显示部署信息
|
||||
if docker run --rm --network proxy alpine ping -c 1 elasticsearch &> /dev/null; then
|
||||
echo -e "${GREEN}可以连接Elasticsearch容器${NC}"
|
||||
else
|
||||
echo -e "${RED}无法连接Elasticsearch容器${NC}"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# 10. 显示部署信息
|
||||
echo -e "${GREEN}=== 部署信息 ===${NC}"
|
||||
echo -e "${YELLOW}部署目录: ${DEPLOY_DIR}${NC}"
|
||||
echo -e "${YELLOW}MySQL容器: ${MYSQL_CONTAINER}${NC}"
|
||||
echo -e "${YELLOW}Redis容器: ${REDIS_CONTAINER}${NC}"
|
||||
echo -e "${YELLOW}Elasticsearch容器: ${ES_CONTAINER}${NC}"
|
||||
echo -e "${YELLOW}网络: proxy${NC}"
|
||||
echo -e "${YELLOW}Docker Compose: ${COMPOSE_CMD}${NC}"
|
||||
|
||||
|
||||
157
settings.xml
Normal file
157
settings.xml
Normal file
@@ -0,0 +1,157 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<settings xmlns="http://maven.apache.org/SETTINGS/1.0.0"
|
||||
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
||||
xsi:schemaLocation="http://maven.apache.org/SETTINGS/1.0.0
|
||||
http://maven.apache.org/xsd/settings-1.0.0.xsd">
|
||||
|
||||
<!-- 本地仓库位置 -->
|
||||
<localRepository>/root/.m2/repository</localRepository>
|
||||
|
||||
<!-- 代理配置 -->
|
||||
<proxies>
|
||||
<!-- 如果需要HTTP代理,取消注释并配置 -->
|
||||
<!--
|
||||
<proxy>
|
||||
<id>optional-proxy</id>
|
||||
<active>true</active>
|
||||
<protocol>http</protocol>
|
||||
<host>proxy.host.com</host>
|
||||
<port>8080</port>
|
||||
<nonProxyHosts>local.net|some.host.com</nonProxyHosts>
|
||||
</proxy>
|
||||
-->
|
||||
</proxies>
|
||||
|
||||
<!-- 镜像配置 -->
|
||||
<mirrors>
|
||||
<!-- 阿里云Maven镜像 -->
|
||||
<mirror>
|
||||
<id>aliyun-maven</id>
|
||||
<mirrorOf>central</mirrorOf>
|
||||
<name>Aliyun Maven Mirror</name>
|
||||
<url>https://maven.aliyun.com/repository/central</url>
|
||||
</mirror>
|
||||
|
||||
<!-- 华为云Maven镜像 -->
|
||||
<mirror>
|
||||
<id>huaweicloud-maven</id>
|
||||
<mirrorOf>central</mirrorOf>
|
||||
<name>HuaweiCloud Maven Mirror</name>
|
||||
<url>https://repo.huaweicloud.com/repository/maven/</url>
|
||||
</mirror>
|
||||
|
||||
<!-- 腾讯云Maven镜像 -->
|
||||
<mirror>
|
||||
<id>tencentyun-maven</id>
|
||||
<mirrorOf>central</mirrorOf>
|
||||
<name>TencentCloud Maven Mirror</name>
|
||||
<url>https://mirrors.cloud.tencent.com/nexus/repository/maven-public/</url>
|
||||
</mirror>
|
||||
|
||||
<!-- 网易云Maven镜像 -->
|
||||
<mirror>
|
||||
<id>netease-maven</id>
|
||||
<mirrorOf>central</mirrorOf>
|
||||
<name>Netease Maven Mirror</name>
|
||||
<url>https://mirrors.163.com/maven/repository/maven-public/</url>
|
||||
</mirror>
|
||||
|
||||
<!-- JBoss镜像 -->
|
||||
<mirror>
|
||||
<id>jboss-public-repository-group</id>
|
||||
<mirrorOf>central</mirrorOf>
|
||||
<name>JBoss Public Repository Group</name>
|
||||
<url>https://repository.jboss.org/nexus/content/groups/public/</url>
|
||||
</mirror>
|
||||
</mirrors>
|
||||
|
||||
<!-- 服务器认证配置 -->
|
||||
<servers>
|
||||
<!-- 如果需要私有仓库认证,在这里配置 -->
|
||||
<!--
|
||||
<server>
|
||||
<id>private-repo</id>
|
||||
<username>your-username</username>
|
||||
<password>your-password</password>
|
||||
</server>
|
||||
-->
|
||||
</servers>
|
||||
|
||||
<!-- 配置文件 -->
|
||||
<profiles>
|
||||
<!-- 默认配置 -->
|
||||
<profile>
|
||||
<id>default</id>
|
||||
<activation>
|
||||
<activeByDefault>true</activeByDefault>
|
||||
</activation>
|
||||
<repositories>
|
||||
<!-- 阿里云仓库 -->
|
||||
<repository>
|
||||
<id>aliyun-central</id>
|
||||
<url>https://maven.aliyun.com/repository/central</url>
|
||||
<releases>
|
||||
<enabled>true</enabled>
|
||||
</releases>
|
||||
<snapshots>
|
||||
<enabled>false</enabled>
|
||||
</snapshots>
|
||||
</repository>
|
||||
|
||||
<!-- 阿里云公共仓库 -->
|
||||
<repository>
|
||||
<id>aliyun-public</id>
|
||||
<url>https://maven.aliyun.com/repository/public</url>
|
||||
<releases>
|
||||
<enabled>true</enabled>
|
||||
</releases>
|
||||
<snapshots>
|
||||
<enabled>true</enabled>
|
||||
</snapshots>
|
||||
</repository>
|
||||
|
||||
<!-- Spring仓库 -->
|
||||
<repository>
|
||||
<id>spring-milestones</id>
|
||||
<name>Spring Milestones</name>
|
||||
<url>https://repo.spring.io/milestone</url>
|
||||
<snapshots>
|
||||
<enabled>false</enabled>
|
||||
</snapshots>
|
||||
</repository>
|
||||
</repositories>
|
||||
|
||||
<pluginRepositories>
|
||||
<!-- 阿里云插件仓库 -->
|
||||
<pluginRepository>
|
||||
<id>aliyun-plugin</id>
|
||||
<url>https://maven.aliyun.com/repository/public</url>
|
||||
<releases>
|
||||
<enabled>true</enabled>
|
||||
</releases>
|
||||
<snapshots>
|
||||
<enabled>false</enabled>
|
||||
</snapshots>
|
||||
</pluginRepository>
|
||||
|
||||
<!-- Spring插件仓库 -->
|
||||
<pluginRepository>
|
||||
<id>spring-plugins</id>
|
||||
<name>Spring Plugins</name>
|
||||
<url>https://repo.spring.io/plugins-release</url>
|
||||
<releases>
|
||||
<enabled>true</enabled>
|
||||
</releases>
|
||||
<snapshots>
|
||||
<enabled>false</enabled>
|
||||
</snapshots>
|
||||
</pluginRepository>
|
||||
</pluginRepositories>
|
||||
</profile>
|
||||
</profiles>
|
||||
|
||||
<!-- 激活的配置 -->
|
||||
<activeProfiles>
|
||||
<activeProfile>default</activeProfile>
|
||||
</activeProfiles>
|
||||
</settings>
|
||||
@@ -36,6 +36,11 @@ spring:
|
||||
max-file-size: -1
|
||||
max-request-size: -1
|
||||
|
||||
# Elasticsearch配置
|
||||
elasticsearch:
|
||||
rest:
|
||||
uris: http://127.0.0.1:9200
|
||||
|
||||
# MyBatis配置
|
||||
mybatis:
|
||||
mapper-locations: classpath:mapper/*.xml
|
||||
|
||||
@@ -36,6 +36,11 @@ spring:
|
||||
max-file-size: ${MAX_FILE_SIZE:-1}
|
||||
max-request-size: ${MAX_REQUEST_SIZE:-1}
|
||||
|
||||
# Elasticsearch配置
|
||||
elasticsearch:
|
||||
rest:
|
||||
uris: ${ELASTICSEARCH_URIS:http://127.0.0.1:9200}
|
||||
|
||||
# MyBatis配置
|
||||
mybatis:
|
||||
mapper-locations: classpath:mapper/*.xml
|
||||
|
||||
Reference in New Issue
Block a user