anxin-ruoyi/docker/scripts/check-env-variables.sh
2026-01-08 20:47:24 +08:00

231 lines
7.0 KiB
Bash
Raw Permalink 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
# 环境变量检查脚本
# 用于验证容器中的环境变量是否正确加载
set -e
# 颜色定义
RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
BLUE='\033[0;34m'
NC='\033[0m'
log_info() {
echo -e "${BLUE}[INFO]${NC} $1"
}
log_success() {
echo -e "${GREEN}[SUCCESS]${NC} $1"
}
log_warn() {
echo -e "${YELLOW}[WARN]${NC} $1"
}
log_error() {
echo -e "${RED}[ERROR]${NC} $1"
}
# 检查环境文件
check_env_file() {
log_info "检查环境配置文件..."
if [[ -f "environments/.env.production" ]]; then
log_success "✓ 找到生产环境配置文件"
echo "环境文件内容:"
echo "----------------------------------------"
cat environments/.env.production | grep -E "^(DB_|REDIS_|BACKEND_|SPRING_)" | while read line; do
if [[ $line == *"PASSWORD"* ]]; then
echo " ${line%%=*}=[HIDDEN]"
else
echo " $line"
fi
done
echo "----------------------------------------"
else
log_error "✗ 未找到生产环境配置文件"
return 1
fi
}
# 检查docker-compose配置
check_compose_config() {
log_info "检查docker-compose环境变量配置..."
if [[ -f "docker-compose.production.yml" ]]; then
log_success "✓ 找到docker-compose配置文件"
# 显示后端服务的环境变量配置
echo "后端服务环境变量配置:"
echo "----------------------------------------"
sed -n '/anxin-backend:/,/ports:/p' docker-compose.production.yml | grep -E "^\s+[A-Z_]+:" | head -20
echo "----------------------------------------"
else
log_error "✗ 未找到docker-compose配置文件"
return 1
fi
}
# 检查容器环境变量
check_container_env() {
log_info "检查容器内环境变量..."
if docker ps --filter "name=anxin-backend-prod" --format "{{.Names}}" | grep -q "anxin-backend-prod"; then
log_success "✓ 后端容器正在运行"
echo "容器内环境变量:"
echo "----------------------------------------"
echo "数据库配置:"
docker exec anxin-backend-prod env | grep -E "^DB_" | while read line; do
if [[ $line == *"PASSWORD"* ]]; then
echo " ${line%%=*}=[HIDDEN]"
else
echo " $line"
fi
done
echo ""
echo "Redis配置:"
docker exec anxin-backend-prod env | grep -E "^REDIS_" | while read line; do
if [[ $line == *"PASSWORD"* ]]; then
echo " ${line%%=*}=[HIDDEN]"
else
echo " $line"
fi
done
echo ""
echo "Spring配置:"
docker exec anxin-backend-prod env | grep -E "^SPRING_" | head -5
echo ""
echo "其他配置:"
docker exec anxin-backend-prod env | grep -E "^(LOG_LEVEL|SERVER_PORT|JAVA_OPTS)" | head -5
echo "----------------------------------------"
else
log_error "✗ 后端容器未运行"
return 1
fi
}
# 对比配置差异
compare_configs() {
log_info "对比配置差异..."
if [[ -f "environments/.env.production" ]]; then
source environments/.env.production
echo "配置对比:"
echo "----------------------------------------"
# 检查数据库配置
echo "数据库配置对比:"
echo " 环境文件 DB_HOST: $DB_HOST"
if docker ps --filter "name=anxin-backend-prod" --format "{{.Names}}" | grep -q "anxin-backend-prod"; then
container_db_host=$(docker exec anxin-backend-prod env | grep "^DB_HOST=" | cut -d'=' -f2)
echo " 容器内 DB_HOST: $container_db_host"
if [[ "$DB_HOST" == "$container_db_host" ]]; then
log_success " ✓ DB_HOST 配置一致"
else
log_error " ✗ DB_HOST 配置不一致"
fi
fi
echo ""
echo "Redis配置对比:"
echo " 环境文件 REDIS_HOST: $REDIS_HOST"
if docker ps --filter "name=anxin-backend-prod" --format "{{.Names}}" | grep -q "anxin-backend-prod"; then
container_redis_host=$(docker exec anxin-backend-prod env | grep "^REDIS_HOST=" | cut -d'=' -f2 || echo "未设置")
echo " 容器内 REDIS_HOST: $container_redis_host"
if [[ "$REDIS_HOST" == "$container_redis_host" ]]; then
log_success " ✓ REDIS_HOST 配置一致"
else
log_error " ✗ REDIS_HOST 配置不一致"
fi
fi
echo "----------------------------------------"
fi
}
# 测试配置生效
test_config_effectiveness() {
log_info "测试配置是否生效..."
if docker ps --filter "name=anxin-backend-prod" --format "{{.Names}}" | grep -q "anxin-backend-prod"; then
# 检查应用启动日志中的配置信息
echo "应用启动日志中的配置信息:"
echo "----------------------------------------"
# 查找数据库连接信息
if ./deploy.sh logs backend -e production --tail 100 | grep -i "jdbc:mysql" | tail -1; then
log_success "✓ 找到数据库连接配置"
else
log_warn "未找到数据库连接配置"
fi
# 查找Redis连接信息
if ./deploy.sh logs backend -e production --tail 100 | grep -i "redis" | tail -3; then
log_success "✓ 找到Redis连接配置"
else
log_warn "未找到Redis连接配置"
fi
echo "----------------------------------------"
fi
}
# 显示修复建议
show_fix_suggestions() {
log_info "修复建议:"
echo "========================================"
echo "如果环境变量未正确加载,请按以下步骤操作:"
echo ""
echo "1. 完全重新创建容器:"
echo " ./deploy.sh down -e production"
echo " ./deploy.sh up -e production"
echo ""
echo "2. 检查环境文件是否被正确读取:"
echo " docker-compose -f docker-compose.production.yml --env-file environments/.env.production config | grep -A 5 -B 5 REDIS"
echo ""
echo "3. 手动验证环境变量:"
echo " docker exec anxin-backend-prod env | grep -E '^(DB_|REDIS_)'"
echo ""
echo "4. 如果仍有问题检查docker-compose.yml中是否缺少环境变量定义"
echo "========================================"
}
# 主函数
main() {
log_info "环境变量检查工具"
echo "========================================"
check_env_file
echo ""
check_compose_config
echo ""
check_container_env
echo ""
compare_configs
echo ""
test_config_effectiveness
echo ""
show_fix_suggestions
echo "========================================"
log_success "检查完成!"
}
# 如果脚本被直接执行
if [[ "${BASH_SOURCE[0]}" == "${0}" ]]; then
main "$@"
fi