anxin-ruoyi/docker/scripts/setup-env.sh
2026-01-05 01:46:20 +08:00

220 lines
5.0 KiB
Bash
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#!/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 "$@"