From 20e8d3b3427372782214b015e428c60e23beaad6 Mon Sep 17 00:00:00 2001 From: aipper Date: Sat, 1 Nov 2025 15:36:47 +0800 Subject: [PATCH] test --- Dockerfile | 9 +- Dockerfile.optimized | 9 +- Dockerfile.robust | 90 +++++++ README-SCRIPTS.md | 202 ++++++++++++++ alpine-repositories.conf | 27 ++ archive-manager.sh | 549 ++++++++++++++++++++++++++++++++++++++ build-with-maven-proxy.sh | 15 ++ 7 files changed, 897 insertions(+), 4 deletions(-) create mode 100644 Dockerfile.robust create mode 100644 README-SCRIPTS.md create mode 100644 alpine-repositories.conf create mode 100755 archive-manager.sh diff --git a/Dockerfile b/Dockerfile index e21859b..830eba1 100644 --- a/Dockerfile +++ b/Dockerfile @@ -29,8 +29,13 @@ FROM openjdk:8-jre-alpine AS runtime # 设置维护者信息 LABEL maintainer="digital-archive-team" -# 安装必要的系统依赖和Tesseract OCR -RUN apk add --no-cache \ +# 添加Alpine国内镜像源 +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-data-chi_sim \ tesseract-data-chi_tra \ diff --git a/Dockerfile.optimized b/Dockerfile.optimized index 47e991a..cf6ea31 100644 --- a/Dockerfile.optimized +++ b/Dockerfile.optimized @@ -39,8 +39,13 @@ FROM openjdk:8-jre-alpine AS runtime # 设置维护者信息 LABEL maintainer="digital-archive-team" -# 安装必要的系统依赖和Tesseract OCR -RUN apk add --no-cache \ +# 添加Alpine国内镜像源 +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-data-chi_sim \ tesseract-data-chi_tra \ diff --git a/Dockerfile.robust b/Dockerfile.robust new file mode 100644 index 0000000..7eaa474 --- /dev/null +++ b/Dockerfile.robust @@ -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"] \ No newline at end of file diff --git a/README-SCRIPTS.md b/README-SCRIPTS.md new file mode 100644 index 0000000..bdd0550 --- /dev/null +++ b/README-SCRIPTS.md @@ -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` 脚本就能完成所有管理任务! \ No newline at end of file diff --git a/alpine-repositories.conf b/alpine-repositories.conf new file mode 100644 index 0000000..d37918c --- /dev/null +++ b/alpine-repositories.conf @@ -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/ \ No newline at end of file diff --git a/archive-manager.sh b/archive-manager.sh new file mode 100755 index 0000000..d0ba8a4 --- /dev/null +++ b/archive-manager.sh @@ -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 "$@" diff --git a/build-with-maven-proxy.sh b/build-with-maven-proxy.sh index 348e463..a554f53 100755 --- a/build-with-maven-proxy.sh +++ b/build-with-maven-proxy.sh @@ -16,6 +16,7 @@ DOCKERFILE="Dockerfile" # 处理参数 USE_OPTIMIZED=false +USE_ROBUST=false while [[ $# -gt 0 ]]; do case $1 in -o|--optimized) @@ -23,10 +24,16 @@ while [[ $# -gt 0 ]]; do DOCKERFILE="Dockerfile.optimized" shift ;; + -r|--robust) + USE_ROBUST=true + DOCKERFILE="Dockerfile.robust" + shift + ;; -h|--help) echo "用法: $0 [选项]" echo "选项:" echo " -o, --optimized 使用优化的Dockerfile" + echo " -r, --robust 使用容错的Dockerfile" echo " -h, --help 显示帮助信息" exit 0 ;; @@ -39,6 +46,7 @@ done echo -e "${GREEN}=== 使用Maven代理构建数字档案系统 ===${NC}" echo -e "${YELLOW}Dockerfile: ${DOCKERFILE}${NC}" echo -e "${YELLOW}优化版本: ${USE_OPTIMIZED}${NC}" +echo -e "${YELLOW}容错版本: ${USE_ROBUST}${NC}" # 检查Docker是否安装 if ! command -v docker &> /dev/null; then @@ -59,6 +67,13 @@ echo " - 华为云Maven镜像" echo " - 腾讯云Maven镜像" echo " - 网易云Maven镜像" +echo -e "${YELLOW}Alpine包管理器配置:${NC}" +echo " - 使用阿里云Alpine镜像源" +if [ "$USE_ROBUST" = true ]; then + echo " - 使用清华大学镜像源作为备份" + echo " - 多镜像源容错机制" +fi + # 构建Docker镜像 echo -e "${YELLOW}开始构建Docker镜像...${NC}" docker build -f ${DOCKERFILE} -t ${PROJECT_NAME}:${VERSION} .