#!/bin/bash # 环境设置脚本 # 用于初始化Docker部署环境和配置文件 set -e # 颜色定义 RED='\033[0;31m' GREEN='\033[0;32m' YELLOW='\033[1;33m' BLUE='\033[0;34m' NC='\033[0m' # No Color # 日志函数 log_info() { echo -e "${BLUE}[INFO]${NC} $1" } log_success() { echo -e "${GREEN}[SUCCESS]${NC} $1" } log_warning() { echo -e "${YELLOW}[WARNING]${NC} $1" } log_error() { echo -e "${RED}[ERROR]${NC} $1" } # 检查必要的命令 check_requirements() { log_info "检查系统要求..." if ! command -v docker &> /dev/null; then log_error "Docker 未安装,请先安装 Docker" exit 1 fi if ! command -v docker-compose &> /dev/null; then log_error "Docker Compose 未安装,请先安装 Docker Compose" exit 1 fi log_success "系统要求检查通过" } # 创建必要的目录 create_directories() { log_info "创建必要的目录结构..." # 数据目录 mkdir -p data/{mysql,logs,configs} mkdir -p data/{dev,staging,prod}/{mysql,logs,configs} # 日志目录 mkdir -p logs/{dev,staging,prod} log_success "目录结构创建完成" } # 设置环境配置 setup_environment() { local env=${1:-development} log_info "设置 ${env} 环境配置..." # 检查环境配置文件是否存在 if [[ ! -f "environments/.env.${env}" ]]; then log_error "环境配置文件 .env.${env} 不存在" exit 1 fi # 复制环境配置文件 cp "environments/.env.${env}" .env # 复制Docker Compose配置 cp docker-compose.yml.template docker-compose.yml # 复制配置文件模板 cp configs/nginx.conf.template configs/nginx.conf cp configs/application-docker.yml.template configs/application-docker.yml cp configs/my.cnf.template configs/my.cnf log_success "${env} 环境配置设置完成" } # 设置文件权限 set_permissions() { log_info "设置文件权限..." # 设置脚本执行权限 chmod +x scripts/*.sh # 设置数据目录权限 chmod -R 755 data/ chmod -R 755 logs/ log_success "文件权限设置完成" } # 验证配置 validate_config() { log_info "验证配置文件..." # 检查 .env 文件 if [[ ! -f ".env" ]]; then log_error ".env 文件不存在,请先运行环境设置" exit 1 fi # 检查 docker-compose.yml 文件 if [[ ! -f "docker-compose.yml" ]]; then log_error "docker-compose.yml 文件不存在" exit 1 fi # 验证 Docker Compose 配置语法 if ! docker-compose config > /dev/null 2>&1; then log_error "Docker Compose 配置文件语法错误" exit 1 fi log_success "配置文件验证通过" } # 显示帮助信息 show_help() { echo "用法: $0 [选项] [环境]" echo "" echo "选项:" echo " -h, --help 显示此帮助信息" echo " -c, --check 仅检查系统要求" echo " -v, --validate 仅验证配置" echo "" echo "环境:" echo " development 开发环境 (默认)" echo " staging 测试环境" echo " production 生产环境" echo "" echo "示例:" echo " $0 # 设置开发环境" echo " $0 production # 设置生产环境" echo " $0 --check # 仅检查系统要求" } # 主函数 main() { local environment="development" local check_only=false local validate_only=false # 解析命令行参数 while [[ $# -gt 0 ]]; do case $1 in -h|--help) show_help exit 0 ;; -c|--check) check_only=true shift ;; -v|--validate) validate_only=true shift ;; development|staging|production) environment=$1 shift ;; *) log_error "未知参数: $1" show_help exit 1 ;; esac done # 切换到docker目录 cd "$(dirname "$0")/.." log_info "开始设置Docker部署环境..." # 检查系统要求 check_requirements if [[ "$check_only" == true ]]; then log_success "系统要求检查完成" exit 0 fi if [[ "$validate_only" == true ]]; then validate_config log_success "配置验证完成" exit 0 fi # 创建目录结构 create_directories # 设置环境配置 setup_environment "$environment" # 设置文件权限 set_permissions # 验证配置 validate_config log_success "Docker部署环境设置完成!" log_info "下一步:" log_info "1. 检查并修改 .env 文件中的配置" log_info "2. 运行 'scripts/build.sh' 构建镜像" log_info "3. 运行 'scripts/deploy.sh start' 启动服务" } # 执行主函数 main "$@"