220 lines
5.0 KiB
Bash
220 lines
5.0 KiB
Bash
#!/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 "$@" |