test
This commit is contained in:
@@ -29,8 +29,13 @@ FROM openjdk:8-jre-alpine AS runtime
|
|||||||
# 设置维护者信息
|
# 设置维护者信息
|
||||||
LABEL maintainer="digital-archive-team"
|
LABEL maintainer="digital-archive-team"
|
||||||
|
|
||||||
# 安装必要的系统依赖和Tesseract OCR
|
# 添加Alpine国内镜像源
|
||||||
RUN apk add --no-cache \
|
RUN sed -i 's/dl-cdn.alpinelinux.org/mirrors.aliyun.com/g' /etc/apk/repositories && \
|
||||||
|
sed -i 's/https\:\/\/dl-cdn.alpinelinux.org/https:\/\/mirrors.aliyun.com/g' /etc/apk/repositories
|
||||||
|
|
||||||
|
# 更新包索引并安装必要的系统依赖和Tesseract OCR
|
||||||
|
RUN apk update && \
|
||||||
|
apk add --no-cache \
|
||||||
tesseract \
|
tesseract \
|
||||||
tesseract-data-chi_sim \
|
tesseract-data-chi_sim \
|
||||||
tesseract-data-chi_tra \
|
tesseract-data-chi_tra \
|
||||||
|
|||||||
@@ -39,8 +39,13 @@ FROM openjdk:8-jre-alpine AS runtime
|
|||||||
# 设置维护者信息
|
# 设置维护者信息
|
||||||
LABEL maintainer="digital-archive-team"
|
LABEL maintainer="digital-archive-team"
|
||||||
|
|
||||||
# 安装必要的系统依赖和Tesseract OCR
|
# 添加Alpine国内镜像源
|
||||||
RUN apk add --no-cache \
|
RUN sed -i 's/dl-cdn.alpinelinux.org/mirrors.aliyun.com/g' /etc/apk/repositories && \
|
||||||
|
sed -i 's/https\:\/\/dl-cdn.alpinelinux.org/https:\/\/mirrors.aliyun.com/g' /etc/apk/repositories
|
||||||
|
|
||||||
|
# 更新包索引并安装必要的系统依赖和Tesseract OCR
|
||||||
|
RUN apk update && \
|
||||||
|
apk add --no-cache \
|
||||||
tesseract \
|
tesseract \
|
||||||
tesseract-data-chi_sim \
|
tesseract-data-chi_sim \
|
||||||
tesseract-data-chi_tra \
|
tesseract-data-chi_tra \
|
||||||
|
|||||||
90
Dockerfile.robust
Normal file
90
Dockerfile.robust
Normal file
@@ -0,0 +1,90 @@
|
|||||||
|
# ===== 构建阶段 =====
|
||||||
|
# 使用Maven镜像进行构建
|
||||||
|
FROM maven:3.8.4-openjdk-8-slim AS builder
|
||||||
|
|
||||||
|
# 设置工作目录
|
||||||
|
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
|
||||||
|
|
||||||
|
# 下载依赖(利用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"
|
||||||
|
|
||||||
|
# 配置多个Alpine镜像源以提高下载成功率
|
||||||
|
RUN echo "https://mirrors.aliyun.com/alpine/v3.18/main/" > /etc/apk/repositories && \
|
||||||
|
echo "https://mirrors.aliyun.com/alpine/v3.18/community/" >> /etc/apk/repositories && \
|
||||||
|
echo "https://mirrors.tuna.tsinghua.edu.cn/alpine/v3.18/main/" >> /etc/apk/repositories && \
|
||||||
|
echo "https://mirrors.tuna.tsinghua.edu.cn/alpine/v3.18/community/" >> /etc/apk/repositories
|
||||||
|
|
||||||
|
# 更新包索引并安装必要的系统依赖和Tesseract OCR
|
||||||
|
RUN apk update && \
|
||||||
|
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"]
|
||||||
202
README-SCRIPTS.md
Normal file
202
README-SCRIPTS.md
Normal file
@@ -0,0 +1,202 @@
|
|||||||
|
# 数字档案系统脚本使用说明
|
||||||
|
|
||||||
|
## 统一管理脚本
|
||||||
|
|
||||||
|
所有功能已合并到 `archive-manager.sh` 一个脚本中,提供完整的系统管理功能。
|
||||||
|
|
||||||
|
### 基本用法
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# 显示帮助
|
||||||
|
./archive-manager.sh -h
|
||||||
|
|
||||||
|
# 构建镜像
|
||||||
|
./archive-manager.sh build
|
||||||
|
|
||||||
|
# 部署应用(默认目录)
|
||||||
|
./archive-manager.sh deploy
|
||||||
|
|
||||||
|
# 部署到指定目录
|
||||||
|
./archive-manager.sh deploy /opt/digital-archive
|
||||||
|
|
||||||
|
# 检查环境
|
||||||
|
./archive-manager.sh check
|
||||||
|
|
||||||
|
# 启动服务
|
||||||
|
./archive-manager.sh start
|
||||||
|
|
||||||
|
# 停止服务
|
||||||
|
./archive-manager.sh stop
|
||||||
|
|
||||||
|
# 重启服务
|
||||||
|
./archive-manager.sh restart
|
||||||
|
|
||||||
|
# 查看日志
|
||||||
|
./archive-manager.sh logs
|
||||||
|
./archive-manager.sh logs -f # 实时日志
|
||||||
|
|
||||||
|
# 查看状态
|
||||||
|
./archive-manager.sh status
|
||||||
|
|
||||||
|
# 更新服务
|
||||||
|
./archive-manager.sh update
|
||||||
|
|
||||||
|
# 清理资源
|
||||||
|
./archive-manager.sh clean
|
||||||
|
```
|
||||||
|
|
||||||
|
### 高级选项
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# 详细输出
|
||||||
|
./archive-manager.sh -v build
|
||||||
|
|
||||||
|
# 强制执行(跳过确认)
|
||||||
|
./archive-manager.sh -f deploy
|
||||||
|
|
||||||
|
# 静默模式
|
||||||
|
./archive-manager.sh -q build
|
||||||
|
```
|
||||||
|
|
||||||
|
## 功能特性
|
||||||
|
|
||||||
|
### 1. 统一管理
|
||||||
|
- 一个脚本管理所有功能
|
||||||
|
- 自动检测Docker Compose版本
|
||||||
|
- 统一的日志和错误处理
|
||||||
|
- 彩色的输出显示
|
||||||
|
|
||||||
|
### 2. 环境检查
|
||||||
|
- 检查Docker环境
|
||||||
|
- 验证proxy网络
|
||||||
|
- 检查必需容器(MySQL、Redis、Elasticsearch)
|
||||||
|
- 测试网络连通性
|
||||||
|
|
||||||
|
### 3. 智能部署
|
||||||
|
- 自动创建部署目录结构
|
||||||
|
- 生成环境配置文件
|
||||||
|
- 创建管理脚本
|
||||||
|
- 设置正确的权限
|
||||||
|
|
||||||
|
### 4. 服务管理
|
||||||
|
- 启动/停止/重启服务
|
||||||
|
- 查看日志和状态
|
||||||
|
- 更新服务(拉取最新镜像)
|
||||||
|
- 清理Docker资源
|
||||||
|
|
||||||
|
### 5. 优化配置
|
||||||
|
- 使用容错Dockerfile(Dockerfile.robust)
|
||||||
|
- Maven国内镜像加速
|
||||||
|
- Alpine包管理器国内镜像
|
||||||
|
- 多镜像源容错机制
|
||||||
|
|
||||||
|
## 部署目录结构
|
||||||
|
|
||||||
|
```
|
||||||
|
/root/server/archive/
|
||||||
|
├── docker-compose.yml # 服务编排文件
|
||||||
|
├── .env # 环境变量配置
|
||||||
|
├── start.sh # 启动脚本
|
||||||
|
├── stop.sh # 停止脚本
|
||||||
|
├── update.sh # 更新脚本
|
||||||
|
├── data/ # 数据目录
|
||||||
|
│ ├── upload/
|
||||||
|
│ ├── temp/
|
||||||
|
│ ├── unzip/
|
||||||
|
│ ├── images/
|
||||||
|
│ ├── reports/
|
||||||
|
│ └── elasticsearch/
|
||||||
|
└── logs/ # 日志目录
|
||||||
|
```
|
||||||
|
|
||||||
|
## 环境要求
|
||||||
|
|
||||||
|
### 必需服务
|
||||||
|
- Docker和Docker Compose
|
||||||
|
- proxy网络:`docker network create proxy`
|
||||||
|
- MySQL容器(连接到proxy网络)
|
||||||
|
- Redis容器(连接到proxy网络)
|
||||||
|
|
||||||
|
### 可选服务
|
||||||
|
- Elasticsearch容器(连接到proxy网络)
|
||||||
|
|
||||||
|
## 故障排除
|
||||||
|
|
||||||
|
### 构建失败
|
||||||
|
```bash
|
||||||
|
# 检查Docker环境
|
||||||
|
./archive-manager.sh -v check
|
||||||
|
|
||||||
|
# 重新构建
|
||||||
|
./archive-manager.sh clean
|
||||||
|
./archive-manager.sh build
|
||||||
|
```
|
||||||
|
|
||||||
|
### 服务启动失败
|
||||||
|
```bash
|
||||||
|
# 查看详细日志
|
||||||
|
./archive-manager.sh logs -f
|
||||||
|
|
||||||
|
# 检查服务状态
|
||||||
|
./archive-manager.sh status
|
||||||
|
|
||||||
|
# 重启服务
|
||||||
|
./archive-manager.sh restart
|
||||||
|
```
|
||||||
|
|
||||||
|
### 网络问题
|
||||||
|
```bash
|
||||||
|
# 检查网络配置
|
||||||
|
docker network ls
|
||||||
|
docker network inspect proxy
|
||||||
|
|
||||||
|
# 测试连通性
|
||||||
|
docker run --rm --network proxy alpine ping mysql
|
||||||
|
```
|
||||||
|
|
||||||
|
## 配置文件说明
|
||||||
|
|
||||||
|
### settings.xml
|
||||||
|
Maven配置文件,包含:
|
||||||
|
- 多个国内镜像源
|
||||||
|
- 仓库和插件仓库配置
|
||||||
|
- 代理设置(可选)
|
||||||
|
|
||||||
|
### Dockerfile.robust
|
||||||
|
优化的Dockerfile,包含:
|
||||||
|
- 多段构建
|
||||||
|
- Alpine国内镜像源
|
||||||
|
- 容错机制
|
||||||
|
- 安全配置
|
||||||
|
|
||||||
|
### docker-compose.simple.yml
|
||||||
|
简化的服务编排文件,包含:
|
||||||
|
- 应用服务配置
|
||||||
|
- Elasticsearch服务
|
||||||
|
- 网络配置
|
||||||
|
|
||||||
|
## 最佳实践
|
||||||
|
|
||||||
|
1. **首次部署**
|
||||||
|
```bash
|
||||||
|
./archive-manager.sh check
|
||||||
|
./archive-manager.sh build
|
||||||
|
./archive-manager.sh deploy
|
||||||
|
./archive-manager.sh start
|
||||||
|
```
|
||||||
|
|
||||||
|
2. **日常维护**
|
||||||
|
```bash
|
||||||
|
./archive-manager.sh status # 检查状态
|
||||||
|
./archive-manager.sh logs -f # 查看日志
|
||||||
|
./archive-manager.sh update # 更新服务
|
||||||
|
```
|
||||||
|
|
||||||
|
3. **问题排查**
|
||||||
|
```bash
|
||||||
|
./archive-manager.sh -v status # 详细状态信息
|
||||||
|
./archive-manager.sh clean # 清理资源
|
||||||
|
./archive-manager.sh rebuild # 重新构建
|
||||||
|
```
|
||||||
|
|
||||||
|
现在你只需要一个 `archive-manager.sh` 脚本就能完成所有管理任务!
|
||||||
27
alpine-repositories.conf
Normal file
27
alpine-repositories.conf
Normal file
@@ -0,0 +1,27 @@
|
|||||||
|
# Alpine Linux 国内镜像源配置
|
||||||
|
# 主要使用阿里云镜像源,提供更快的下载速度
|
||||||
|
|
||||||
|
# 阿里云镜像源 (主要)
|
||||||
|
https://mirrors.aliyun.com/alpine/v3.18/main/
|
||||||
|
https://mirrors.aliyun.com/alpine/v3.18/community/
|
||||||
|
|
||||||
|
# 备用镜像源
|
||||||
|
# 华为云镜像源
|
||||||
|
# https://repo.huaweicloud.com/alpine/v3.18/main/
|
||||||
|
# https://repo.huaweicloud.com/alpine/v3.18/community/
|
||||||
|
|
||||||
|
# 腾讯云镜像源
|
||||||
|
# https://mirrors.cloud.tencent.com/alpine/v3.18/main/
|
||||||
|
# https://mirrors.cloud.tencent.com/alpine/v3.18/community/
|
||||||
|
|
||||||
|
# 网易云镜像源
|
||||||
|
# https://mirrors.163.com/alpine/v3.18/main/
|
||||||
|
# https://mirrors.163.com/alpine/v3.18/community/
|
||||||
|
|
||||||
|
# 清华大学镜像源
|
||||||
|
# https://mirrors.tuna.tsinghua.edu.cn/alpine/v3.18/main/
|
||||||
|
# https://mirrors.tuna.tsinghua.edu.cn/alpine/v3.18/community/
|
||||||
|
|
||||||
|
# 中科大镜像源
|
||||||
|
# https://mirrors.ustc.edu.cn/alpine/v3.18/main/
|
||||||
|
# https://mirrors.ustc.edu.cn/alpine/v3.18/community/
|
||||||
549
archive-manager.sh
Executable file
549
archive-manager.sh
Executable file
@@ -0,0 +1,549 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
# 数字档案系统统一管理脚本
|
||||||
|
set -e
|
||||||
|
|
||||||
|
# 颜色定义
|
||||||
|
RED='\033[0;31m'
|
||||||
|
GREEN='\033[0;32m'
|
||||||
|
YELLOW='\033[1;33m'
|
||||||
|
BLUE='\033[0;34m'
|
||||||
|
PURPLE='\033[0;35m'
|
||||||
|
CYAN='\033[0;36m'
|
||||||
|
NC='\033[0m' # No Color
|
||||||
|
|
||||||
|
# 项目配置
|
||||||
|
PROJECT_NAME="digital-archive"
|
||||||
|
VERSION="latest"
|
||||||
|
DEFAULT_DEPLOY_DIR="/root/server/archive"
|
||||||
|
DOCKERFILE="Dockerfile.robust"
|
||||||
|
|
||||||
|
# 显示横幅
|
||||||
|
show_banner() {
|
||||||
|
echo -e "${CYAN}"
|
||||||
|
echo "╔══════════════════════════════════════════════════════════════════╗"
|
||||||
|
echo "║ 数字档案系统管理脚本 ║"
|
||||||
|
echo "║ ║"
|
||||||
|
echo "║ 功能: 构建、部署、检查、管理数字档案系统 ║"
|
||||||
|
echo "║ 版本: v2.0 ║"
|
||||||
|
echo "╚════════════════════════════════════════════════════════════════╝"
|
||||||
|
echo -e "${NC}"
|
||||||
|
}
|
||||||
|
|
||||||
|
# 显示帮助信息
|
||||||
|
show_help() {
|
||||||
|
show_banner
|
||||||
|
echo -e "${GREEN}用法: $0 <命令> [选项] [参数]${NC}"
|
||||||
|
echo ""
|
||||||
|
echo -e "${BLUE}命令:${NC}"
|
||||||
|
echo " build 构建Docker镜像"
|
||||||
|
echo " deploy 部署应用到指定目录"
|
||||||
|
echo " check 检查环境配置"
|
||||||
|
echo " start 启动服务"
|
||||||
|
echo " stop 停止服务"
|
||||||
|
echo " restart 重启服务"
|
||||||
|
echo " logs 查看日志"
|
||||||
|
echo " status 查看服务状态"
|
||||||
|
echo " update 更新服务"
|
||||||
|
echo " clean 清理资源"
|
||||||
|
echo ""
|
||||||
|
echo -e "${BLUE}选项:${NC}"
|
||||||
|
echo " -h, --help 显示帮助信息"
|
||||||
|
echo " -v, --verbose 详细输出"
|
||||||
|
echo " -f, --force 强制执行(跳过确认)"
|
||||||
|
echo " -q, --quiet 静默模式"
|
||||||
|
echo ""
|
||||||
|
echo -e "${BLUE}参数:${NC}"
|
||||||
|
echo " 部署目录 目标部署目录 (默认: ${DEFAULT_DEPLOY_DIR})"
|
||||||
|
echo ""
|
||||||
|
echo -e "${YELLOW}示例:${NC}"
|
||||||
|
echo " $0 build # 构建镜像"
|
||||||
|
echo " $0 deploy # 部署到默认目录"
|
||||||
|
echo " $0 deploy /opt/archive # 部署到指定目录"
|
||||||
|
echo " $0 check # 检查环境"
|
||||||
|
echo " $0 start # 启动服务"
|
||||||
|
echo " $0 stop # 停止服务"
|
||||||
|
echo " $0 logs -f # 查看实时日志"
|
||||||
|
echo ""
|
||||||
|
}
|
||||||
|
|
||||||
|
# 日志函数
|
||||||
|
log_info() {
|
||||||
|
if [ "$VERBOSE" = true ]; then
|
||||||
|
echo -e "${GREEN}[INFO]${NC} $1"
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
log_warn() {
|
||||||
|
echo -e "${YELLOW}[WARN]${NC} $1"
|
||||||
|
}
|
||||||
|
|
||||||
|
log_error() {
|
||||||
|
echo -e "${RED}[ERROR]${NC} $1"
|
||||||
|
}
|
||||||
|
|
||||||
|
log_success() {
|
||||||
|
echo -e "${GREEN}[SUCCESS]${NC} $1"
|
||||||
|
}
|
||||||
|
|
||||||
|
# 检查Docker环境
|
||||||
|
check_docker() {
|
||||||
|
if ! command -v docker &> /dev/null; then
|
||||||
|
log_error "Docker未安装"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
# 检测Docker Compose命令类型
|
||||||
|
if docker compose version &> /dev/null; then
|
||||||
|
COMPOSE_CMD="docker compose"
|
||||||
|
elif command -v docker-compose &> /dev/null; then
|
||||||
|
COMPOSE_CMD="docker-compose"
|
||||||
|
else
|
||||||
|
log_error "Docker Compose未安装"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
log_info "使用命令: ${COMPOSE_CMD}"
|
||||||
|
}
|
||||||
|
|
||||||
|
# 检查脚本文件
|
||||||
|
check_scripts() {
|
||||||
|
local scripts=("settings.xml")
|
||||||
|
for script in "${scripts[@]}"; do
|
||||||
|
if [ ! -f "$script" ]; then
|
||||||
|
log_error "必需文件 $script 不存在"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
}
|
||||||
|
|
||||||
|
# 构建镜像
|
||||||
|
build_image() {
|
||||||
|
log_info "开始构建Docker镜像..."
|
||||||
|
|
||||||
|
# 检查必需文件
|
||||||
|
check_scripts
|
||||||
|
|
||||||
|
# 构建镜像
|
||||||
|
docker build -f ${DOCKERFILE} -t ${PROJECT_NAME}:${VERSION} .
|
||||||
|
|
||||||
|
if [ $? -eq 0 ]; then
|
||||||
|
log_success "镜像构建成功: ${PROJECT_NAME}:${VERSION}"
|
||||||
|
|
||||||
|
# 显示镜像信息
|
||||||
|
if [ "$VERBOSE" = true ]; then
|
||||||
|
echo -e "${YELLOW}镜像信息:${NC}"
|
||||||
|
docker images ${PROJECT_NAME}:${VERSION} --format "table {{.Repository}}\t{{.Tag}}\t{{.Size}}\t{{.CreatedAt}}"
|
||||||
|
fi
|
||||||
|
else
|
||||||
|
log_error "镜像构建失败"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
# 检查环境
|
||||||
|
check_environment() {
|
||||||
|
log_info "检查环境配置..."
|
||||||
|
|
||||||
|
# 检查Docker网络
|
||||||
|
if ! docker network ls | grep -q proxy; then
|
||||||
|
log_error "proxy网络不存在,请创建: docker network create proxy"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
# 检查容器
|
||||||
|
local mysql_container=$(docker network inspect proxy --format '{{range .Containers}}{{.Name}} {{end}}' 2>/dev/null | tr ' ' '\n' | grep -i mysql | head -1 || true)
|
||||||
|
local redis_container=$(docker network inspect proxy --format '{{range .Containers}}{{.Name}} {{end}}' 2>/dev/null | tr ' ' '\n' | grep -i redis | head -1 || true)
|
||||||
|
local es_container=$(docker network inspect proxy --format '{{range .Containers}}{{.Name}} {{end}}' 2>/dev/null | tr ' ' '\n' | grep -i elasticsearch | head -1 || true)
|
||||||
|
|
||||||
|
if [ -z "$mysql_container" ]; then
|
||||||
|
log_error "proxy网络中未找到MySQL容器"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [ -z "$redis_container" ]; then
|
||||||
|
log_error "proxy网络中未找到Redis容器"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [ -z "$es_container" ]; then
|
||||||
|
log_warn "proxy网络中未找到Elasticsearch容器(可选)"
|
||||||
|
fi
|
||||||
|
|
||||||
|
log_success "环境检查完成"
|
||||||
|
log_info "MySQL: $mysql_container"
|
||||||
|
log_info "Redis: $redis_container"
|
||||||
|
[ ! -z "$es_container" ] && log_info "Elasticsearch: $es_container"
|
||||||
|
}
|
||||||
|
|
||||||
|
# 部署应用
|
||||||
|
deploy_app() {
|
||||||
|
local deploy_dir=${1:-$DEFAULT_DEPLOY_DIR}
|
||||||
|
|
||||||
|
log_info "部署应用到: $deploy_dir"
|
||||||
|
|
||||||
|
# 检查镜像
|
||||||
|
if ! docker images | grep -q ${PROJECT_NAME}; then
|
||||||
|
log_error "镜像不存在,请先构建: $0 build"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
# 创建部署目录
|
||||||
|
mkdir -p "$deploy_dir"/{data/{upload,temp,unzip,images,reports,elasticsearch},logs,nginx}
|
||||||
|
|
||||||
|
# 复制配置文件
|
||||||
|
cp docker-compose.simple.yml "$deploy_dir/docker-compose.yml"
|
||||||
|
|
||||||
|
# 创建环境配置
|
||||||
|
cat > "$deploy_dir/.env" << EOF
|
||||||
|
COMPOSE_PROJECT_NAME=digital-archive
|
||||||
|
|
||||||
|
# 服务配置
|
||||||
|
SERVER_PORT=9081
|
||||||
|
SERVER_CONTEXT_PATH=/point-strategy
|
||||||
|
|
||||||
|
# MySQL数据库配置
|
||||||
|
DB_HOST=mysql
|
||||||
|
DB_PORT=3306
|
||||||
|
DB_NAME=enterprise_digital_archives
|
||||||
|
DB_USERNAME=root
|
||||||
|
DB_PASSWORD=Abc@123456
|
||||||
|
DB_DRIVER=com.mysql.jdbc.Driver
|
||||||
|
|
||||||
|
# Redis配置
|
||||||
|
REDIS_HOST=redis
|
||||||
|
REDIS_PORT=6379
|
||||||
|
REDIS_PASSWORD=Abc123456
|
||||||
|
|
||||||
|
# Elasticsearch配置
|
||||||
|
ELASTICSEARCH_URIS=http://elasticsearch:9200
|
||||||
|
|
||||||
|
# OCR配置
|
||||||
|
TESS_PATH=/usr/bin/tesseract
|
||||||
|
|
||||||
|
# 其他配置
|
||||||
|
SWAGGER_SHOW=false
|
||||||
|
LOG_ROOT_LEVEL=info
|
||||||
|
LOG_APP_LEVEL=info
|
||||||
|
JAVA_OPTS=-Xmx2g -Xms1g -XX:+UseG1GC -XX:MaxGCPauseMillis=200
|
||||||
|
EOF
|
||||||
|
|
||||||
|
# 创建管理脚本
|
||||||
|
cat > "$deploy_dir/start.sh" << 'EOF'
|
||||||
|
#!/bin/bash
|
||||||
|
echo "启动数字档案系统..."
|
||||||
|
|
||||||
|
# 检测Docker Compose命令类型
|
||||||
|
if docker compose version &> /dev/null; then
|
||||||
|
COMPOSE_CMD="docker compose"
|
||||||
|
else
|
||||||
|
COMPOSE_CMD="docker-compose"
|
||||||
|
fi
|
||||||
|
|
||||||
|
${COMPOSE_CMD} up -d
|
||||||
|
|
||||||
|
echo "等待服务启动..."
|
||||||
|
sleep 30
|
||||||
|
|
||||||
|
echo "检查服务状态..."
|
||||||
|
${COMPOSE_CMD} ps
|
||||||
|
|
||||||
|
echo "服务启动完成!"
|
||||||
|
EOF
|
||||||
|
|
||||||
|
cat > "$deploy_dir/stop.sh" << 'EOF'
|
||||||
|
#!/bin/bash
|
||||||
|
echo "停止数字档案系统..."
|
||||||
|
|
||||||
|
# 检测Docker Compose命令类型
|
||||||
|
if docker compose version &> /dev/null; then
|
||||||
|
COMPOSE_CMD="docker compose"
|
||||||
|
else
|
||||||
|
COMPOSE_CMD="docker-compose"
|
||||||
|
fi
|
||||||
|
|
||||||
|
${COMPOSE_CMD} down
|
||||||
|
|
||||||
|
echo "清理未使用的镜像和容器..."
|
||||||
|
docker system prune -f
|
||||||
|
EOF
|
||||||
|
|
||||||
|
cat > "$deploy_dir/update.sh" << 'EOF'
|
||||||
|
#!/bin/bash
|
||||||
|
echo "更新数字档案系统..."
|
||||||
|
|
||||||
|
# 检测Docker Compose命令类型
|
||||||
|
if docker compose version &> /dev/null; then
|
||||||
|
COMPOSE_CMD="docker compose"
|
||||||
|
else
|
||||||
|
COMPOSE_CMD="docker-compose"
|
||||||
|
fi
|
||||||
|
|
||||||
|
echo "停止服务..."
|
||||||
|
${COMPOSE_CMD} down
|
||||||
|
|
||||||
|
echo "拉取最新镜像..."
|
||||||
|
${COMPOSE_CMD} pull
|
||||||
|
|
||||||
|
echo "启动服务..."
|
||||||
|
${COMPOSE_CMD} up -d
|
||||||
|
|
||||||
|
echo "清理旧镜像..."
|
||||||
|
docker image prune -f
|
||||||
|
EOF
|
||||||
|
|
||||||
|
# 设置执行权限
|
||||||
|
chmod +x "$deploy_dir"/{start.sh,stop.sh,update.sh}
|
||||||
|
|
||||||
|
log_success "应用部署完成: $deploy_dir"
|
||||||
|
log_info "管理命令:"
|
||||||
|
echo " 启动: cd $deploy_dir && ./start.sh"
|
||||||
|
echo " 停止: cd $deploy_dir && ./stop.sh"
|
||||||
|
echo " 更新: cd $deploy_dir && ./update.sh"
|
||||||
|
}
|
||||||
|
|
||||||
|
# 启动服务
|
||||||
|
start_services() {
|
||||||
|
local deploy_dir=${1:-$DEFAULT_DEPLOY_DIR}
|
||||||
|
|
||||||
|
if [ ! -d "$deploy_dir" ]; then
|
||||||
|
log_error "部署目录不存在: $deploy_dir"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
cd "$deploy_dir"
|
||||||
|
|
||||||
|
if [ ! -f "start.sh" ]; then
|
||||||
|
log_error "启动脚本不存在,请先部署: $0 deploy $deploy_dir"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
./start.sh
|
||||||
|
log_success "服务启动完成"
|
||||||
|
|
||||||
|
if [ "$VERBOSE" = true ]; then
|
||||||
|
echo -e "${YELLOW}访问地址: http://localhost:9081/point-strategy${NC}"
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
# 停止服务
|
||||||
|
stop_services() {
|
||||||
|
local deploy_dir=${1:-$DEFAULT_DEPLOY_DIR}
|
||||||
|
|
||||||
|
if [ ! -d "$deploy_dir" ]; then
|
||||||
|
log_error "部署目录不存在: $deploy_dir"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
cd "$deploy_dir"
|
||||||
|
|
||||||
|
if [ -f "stop.sh" ]; then
|
||||||
|
./stop.sh
|
||||||
|
log_success "服务停止完成"
|
||||||
|
else
|
||||||
|
log_warn "停止脚本不存在,尝试使用Docker Compose"
|
||||||
|
if docker compose version &> /dev/null; then
|
||||||
|
docker compose down
|
||||||
|
else
|
||||||
|
docker-compose down
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
# 重启服务
|
||||||
|
restart_services() {
|
||||||
|
local deploy_dir=${1:-$DEFAULT_DEPLOY_DIR}
|
||||||
|
|
||||||
|
log_info "重启服务..."
|
||||||
|
stop_services "$deploy_dir"
|
||||||
|
sleep 2
|
||||||
|
start_services "$deploy_dir"
|
||||||
|
log_success "服务重启完成"
|
||||||
|
}
|
||||||
|
|
||||||
|
# 查看日志
|
||||||
|
show_logs() {
|
||||||
|
local deploy_dir=${1:-$DEFAULT_DEPLOY_DIR}
|
||||||
|
local follow=$2
|
||||||
|
|
||||||
|
if [ ! -d "$deploy_dir" ]; then
|
||||||
|
log_error "部署目录不存在: $deploy_dir"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
cd "$deploy_dir"
|
||||||
|
|
||||||
|
if [ "$follow" = "-f" ]; then
|
||||||
|
if docker compose version &> /dev/null; then
|
||||||
|
docker compose logs -f app
|
||||||
|
else
|
||||||
|
docker-compose logs -f app
|
||||||
|
fi
|
||||||
|
else
|
||||||
|
if docker compose version &> /dev/null; then
|
||||||
|
docker compose logs --tail=100 app
|
||||||
|
else
|
||||||
|
docker-compose logs --tail=100 app
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
# 查看状态
|
||||||
|
show_status() {
|
||||||
|
local deploy_dir=${1:-$DEFAULT_DEPLOY_DIR}
|
||||||
|
|
||||||
|
if [ ! -d "$deploy_dir" ]; then
|
||||||
|
log_error "部署目录不存在: $deploy_dir"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
cd "$deploy_dir"
|
||||||
|
|
||||||
|
echo -e "${CYAN}=== 数字档案系统服务状态 ===${NC}"
|
||||||
|
|
||||||
|
if docker compose version &> /dev/null; then
|
||||||
|
docker compose ps
|
||||||
|
else
|
||||||
|
docker-compose ps
|
||||||
|
fi
|
||||||
|
|
||||||
|
echo ""
|
||||||
|
echo -e "${CYAN}=== 容器资源使用情况 ===${NC}"
|
||||||
|
docker stats --no-stream
|
||||||
|
}
|
||||||
|
|
||||||
|
# 更新服务
|
||||||
|
update_services() {
|
||||||
|
local deploy_dir=${1:-$DEFAULT_DEPLOY_DIR}
|
||||||
|
|
||||||
|
if [ ! -d "$deploy_dir" ]; then
|
||||||
|
log_error "部署目录不存在: $deploy_dir"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
cd "$deploy_dir"
|
||||||
|
|
||||||
|
if [ -f "update.sh" ]; then
|
||||||
|
./update.sh
|
||||||
|
log_success "服务更新完成"
|
||||||
|
else
|
||||||
|
log_warn "更新脚本不存在,请先部署: $0 deploy $deploy_dir"
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
# 清理资源
|
||||||
|
clean_resources() {
|
||||||
|
log_info "清理Docker资源..."
|
||||||
|
|
||||||
|
# 清理停止的容器
|
||||||
|
docker container prune -f
|
||||||
|
|
||||||
|
# 清理未使用的镜像
|
||||||
|
docker image prune -f
|
||||||
|
|
||||||
|
# 清理未使用的网络
|
||||||
|
docker network prune -f
|
||||||
|
|
||||||
|
# 清理未使用的卷
|
||||||
|
docker volume prune -f
|
||||||
|
|
||||||
|
log_success "资源清理完成"
|
||||||
|
}
|
||||||
|
|
||||||
|
# 主函数
|
||||||
|
main() {
|
||||||
|
# 解析命令行参数
|
||||||
|
COMMAND=""
|
||||||
|
VERBOSE=false
|
||||||
|
FORCE=false
|
||||||
|
|
||||||
|
while [[ $# -gt 0 ]]; do
|
||||||
|
case $1 in
|
||||||
|
build|deploy|check|start|stop|restart|logs|status|update|clean)
|
||||||
|
COMMAND=$1
|
||||||
|
shift
|
||||||
|
;;
|
||||||
|
-h|--help)
|
||||||
|
show_help
|
||||||
|
exit 0
|
||||||
|
;;
|
||||||
|
-v|--verbose)
|
||||||
|
VERBOSE=true
|
||||||
|
shift
|
||||||
|
;;
|
||||||
|
-f|--force)
|
||||||
|
FORCE=true
|
||||||
|
shift
|
||||||
|
;;
|
||||||
|
-q|--quiet)
|
||||||
|
# 重定向输出到/dev/null
|
||||||
|
exec 1>/dev/null 2>&1
|
||||||
|
;;
|
||||||
|
-*)
|
||||||
|
log_error "未知选项: $1"
|
||||||
|
show_help
|
||||||
|
exit 1
|
||||||
|
;;
|
||||||
|
*)
|
||||||
|
# 参数传递给具体命令
|
||||||
|
break
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
done
|
||||||
|
|
||||||
|
# 如果没有命令,显示帮助
|
||||||
|
if [ -z "$COMMAND" ]; then
|
||||||
|
show_help
|
||||||
|
exit 0
|
||||||
|
fi
|
||||||
|
|
||||||
|
# 显示横幅
|
||||||
|
if [ "$VERBOSE" = true ]; then
|
||||||
|
show_banner
|
||||||
|
fi
|
||||||
|
|
||||||
|
# 检查Docker环境
|
||||||
|
check_docker
|
||||||
|
|
||||||
|
# 执行对应命令
|
||||||
|
case $COMMAND in
|
||||||
|
build)
|
||||||
|
build_image
|
||||||
|
;;
|
||||||
|
deploy)
|
||||||
|
deploy_app "$@"
|
||||||
|
;;
|
||||||
|
check)
|
||||||
|
check_environment
|
||||||
|
;;
|
||||||
|
start)
|
||||||
|
start_services "$@"
|
||||||
|
;;
|
||||||
|
stop)
|
||||||
|
stop_services "$@"
|
||||||
|
;;
|
||||||
|
restart)
|
||||||
|
restart_services "$@"
|
||||||
|
;;
|
||||||
|
logs)
|
||||||
|
show_logs "$@"
|
||||||
|
;;
|
||||||
|
status)
|
||||||
|
show_status "$@"
|
||||||
|
;;
|
||||||
|
update)
|
||||||
|
update_services "$@"
|
||||||
|
;;
|
||||||
|
clean)
|
||||||
|
clean_resources
|
||||||
|
;;
|
||||||
|
*)
|
||||||
|
log_error "未知命令: $COMMAND"
|
||||||
|
show_help
|
||||||
|
exit 1
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
}
|
||||||
|
|
||||||
|
# 执行主函数
|
||||||
|
main "$@"
|
||||||
@@ -16,6 +16,7 @@ DOCKERFILE="Dockerfile"
|
|||||||
|
|
||||||
# 处理参数
|
# 处理参数
|
||||||
USE_OPTIMIZED=false
|
USE_OPTIMIZED=false
|
||||||
|
USE_ROBUST=false
|
||||||
while [[ $# -gt 0 ]]; do
|
while [[ $# -gt 0 ]]; do
|
||||||
case $1 in
|
case $1 in
|
||||||
-o|--optimized)
|
-o|--optimized)
|
||||||
@@ -23,10 +24,16 @@ while [[ $# -gt 0 ]]; do
|
|||||||
DOCKERFILE="Dockerfile.optimized"
|
DOCKERFILE="Dockerfile.optimized"
|
||||||
shift
|
shift
|
||||||
;;
|
;;
|
||||||
|
-r|--robust)
|
||||||
|
USE_ROBUST=true
|
||||||
|
DOCKERFILE="Dockerfile.robust"
|
||||||
|
shift
|
||||||
|
;;
|
||||||
-h|--help)
|
-h|--help)
|
||||||
echo "用法: $0 [选项]"
|
echo "用法: $0 [选项]"
|
||||||
echo "选项:"
|
echo "选项:"
|
||||||
echo " -o, --optimized 使用优化的Dockerfile"
|
echo " -o, --optimized 使用优化的Dockerfile"
|
||||||
|
echo " -r, --robust 使用容错的Dockerfile"
|
||||||
echo " -h, --help 显示帮助信息"
|
echo " -h, --help 显示帮助信息"
|
||||||
exit 0
|
exit 0
|
||||||
;;
|
;;
|
||||||
@@ -39,6 +46,7 @@ done
|
|||||||
echo -e "${GREEN}=== 使用Maven代理构建数字档案系统 ===${NC}"
|
echo -e "${GREEN}=== 使用Maven代理构建数字档案系统 ===${NC}"
|
||||||
echo -e "${YELLOW}Dockerfile: ${DOCKERFILE}${NC}"
|
echo -e "${YELLOW}Dockerfile: ${DOCKERFILE}${NC}"
|
||||||
echo -e "${YELLOW}优化版本: ${USE_OPTIMIZED}${NC}"
|
echo -e "${YELLOW}优化版本: ${USE_OPTIMIZED}${NC}"
|
||||||
|
echo -e "${YELLOW}容错版本: ${USE_ROBUST}${NC}"
|
||||||
|
|
||||||
# 检查Docker是否安装
|
# 检查Docker是否安装
|
||||||
if ! command -v docker &> /dev/null; then
|
if ! command -v docker &> /dev/null; then
|
||||||
@@ -59,6 +67,13 @@ echo " - 华为云Maven镜像"
|
|||||||
echo " - 腾讯云Maven镜像"
|
echo " - 腾讯云Maven镜像"
|
||||||
echo " - 网易云Maven镜像"
|
echo " - 网易云Maven镜像"
|
||||||
|
|
||||||
|
echo -e "${YELLOW}Alpine包管理器配置:${NC}"
|
||||||
|
echo " - 使用阿里云Alpine镜像源"
|
||||||
|
if [ "$USE_ROBUST" = true ]; then
|
||||||
|
echo " - 使用清华大学镜像源作为备份"
|
||||||
|
echo " - 多镜像源容错机制"
|
||||||
|
fi
|
||||||
|
|
||||||
# 构建Docker镜像
|
# 构建Docker镜像
|
||||||
echo -e "${YELLOW}开始构建Docker镜像...${NC}"
|
echo -e "${YELLOW}开始构建Docker镜像...${NC}"
|
||||||
docker build -f ${DOCKERFILE} -t ${PROJECT_NAME}:${VERSION} .
|
docker build -f ${DOCKERFILE} -t ${PROJECT_NAME}:${VERSION} .
|
||||||
|
|||||||
Reference in New Issue
Block a user