#!/bin/bash # 数字档案系统一键部署脚本 set -e # 颜色定义 RED='\033[0;31m' GREEN='\033[0;32m' YELLOW='\033[1;33m' BLUE='\033[0;34m' NC='\033[0m' # No Color # 默认配置 DEFAULT_DEPLOY_DIR="/root/server/archive" PROJECT_NAME="digital-archive" VERSION="latest" # 处理参数 DEPLOY_DIR=$DEFAULT_DEPLOY_DIR SKIP_CHECKS=false # 显示帮助信息 show_help() { echo -e "${GREEN}数字档案系统一键部署脚本${NC}" echo "" echo -e "${YELLOW}用法: $0 [选项] [部署目录]${NC}" echo "" echo -e "${BLUE}选项:${NC}" echo " -h, --help 显示帮助信息" echo " -s, --skip 跳过环境检查" echo " -c, --check 只执行环境检查" echo " -b, --build 只构建镜像" echo "" echo -e "${BLUE}参数:${NC}" echo " 部署目录 目标部署目录 (默认: ${DEFAULT_DEPLOY_DIR})" echo "" echo -e "${YELLOW}示例:${NC}" echo " $0 # 使用默认目录部署" echo " $0 /opt/digital-archive # 部署到指定目录" echo " $0 -s /opt/archive # 跳过检查部署到指定目录" echo " $0 -c # 只执行环境检查" echo " $0 -b # 只构建镜像" } # 解析命令行参数 while [[ $# -gt 0 ]]; do case $1 in -h|--help) show_help exit 0 ;; -s|--skip) SKIP_CHECKS=true shift ;; -c|--check) CHECK_ONLY=true shift ;; -b|--build) BUILD_ONLY=true shift ;; -*) echo -e "${RED}未知选项: $1${NC}" show_help exit 1 ;; *) DEPLOY_DIR=$1 shift ;; esac done # 显示配置信息 echo -e "${GREEN}=== 数字档案系统一键部署 ===${NC}" echo -e "${YELLOW}部署目录: ${DEPLOY_DIR}${NC}" echo -e "${YELLOW}跳过检查: ${SKIP_CHECKS}${NC}" if [ "$CHECK_ONLY" = true ]; then echo -e "${YELLOW}模式: 仅检查环境${NC}" elif [ "$BUILD_ONLY" = true ]; then echo -e "${YELLOW}模式: 仅构建镜像${NC}" else echo -e "${YELLOW}模式: 完整部署${NC}" fi echo "" # 检查脚本文件是否存在 check_scripts() { local scripts=("build.sh" "check-network.sh" "pre-deploy-check.sh" "deploy.sh") for script in "${scripts[@]}"; do if [ ! -f "$script" ]; then echo -e "${RED}错误: 脚本文件 $script 不存在${NC}" exit 1 fi if [ ! -x "$script" ]; then echo -e "${YELLOW}设置脚本执行权限: $script${NC}" chmod +x "$script" fi done } # 执行环境检查 run_checks() { echo -e "${BLUE}=== 执行环境检查 ===${NC}" # 检查网络 echo -e "${YELLOW}1. 检查Docker网络...${NC}" if [ -f "./check-network.sh" ]; then ./check-network.sh else echo -e "${RED}check-network.sh 脚本不存在${NC}" return 1 fi # 部署前检查 echo -e "${YELLOW}2. 执行部署前检查...${NC}" if [ -f "./pre-deploy-check.sh" ]; then ./pre-deploy-check.sh "$DEPLOY_DIR" else echo -e "${RED}pre-deploy-check.sh 脚本不存在${NC}" return 1 fi echo -e "${GREEN}环境检查完成!${NC}" } # 构建镜像 build_image() { echo -e "${BLUE}=== 构建应用镜像 ===${NC}" if [ -f "./build.sh" ]; then ./build.sh else echo -e "${RED}build.sh 脚本不存在${NC}" return 1 fi echo -e "${GREEN}镜像构建完成!${NC}" } # 部署应用 deploy_app() { echo -e "${BLUE}=== 部署应用 ===${NC}" if [ -f "./deploy.sh" ]; then ./deploy.sh "$DEPLOY_DIR" else echo -e "${RED}deploy.sh 脚本不存在${NC}" return 1 fi echo -e "${GREEN}应用部署完成!${NC}" } # 启动服务 start_services() { echo -e "${BLUE}=== 启动服务 ===${NC}" cd "$DEPLOY_DIR" echo -e "${YELLOW}启动数字档案系统...${NC}" ./start.sh echo -e "${GREEN}服务启动完成!${NC}" echo -e "${YELLOW}访问地址: http://localhost:9081/point-strategy${NC}" } # 显示部署后信息 show_post_info() { echo -e "${GREEN}=== 部署完成 ===${NC}" echo -e "${YELLOW}部署目录: ${DEPLOY_DIR}${NC}" echo -e "${YELLOW}服务管理:${NC}" echo " 启动服务: cd ${DEPLOY_DIR} && ./start.sh" echo " 停止服务: cd ${DEPLOY_DIR} && ./stop.sh" echo " 更新服务: cd ${DEPLOY_DIR} && ./update.sh" echo " 查看状态: cd ${DEPLOY_DIR} && docker-compose ps" echo " 查看日志: cd ${DEPLOY_DIR} && docker-compose logs -f app" echo "" echo -e "${YELLOW}访问地址: http://localhost:9081/point-strategy${NC}" } # 主执行流程 main() { # 检查脚本文件 check_scripts # 根据模式执行不同操作 if [ "$CHECK_ONLY" = true ]; then run_checks exit 0 fi if [ "$BUILD_ONLY" = true ]; then build_image exit 0 fi # 完整部署流程 if [ "$SKIP_CHECKS" = false ]; then echo -e "${YELLOW}提示: 使用 -s 参数可跳过环境检查${NC}" run_checks else echo -e "${YELLOW}跳过环境检查${NC}" fi build_image deploy_app # 询问是否立即启动 echo "" read -p "是否立即启动服务? (Y/n): " -n 1 -r echo if [[ $REPLY =~ ^[Nn]$ ]]; then echo -e "${YELLOW}服务未启动,手动启动命令: cd ${DEPLOY_DIR} && ./start.sh${NC}" else start_services fi show_post_info } # 执行主函数 main