#!/bin/bash
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_ok() { echo -e "${GREEN}[ OK ]${NC} $1"; }
log_warn() { echo -e "${YELLOW}[WARN]${NC} $1"; }
log_error() { echo -e "${RED}[ERROR]${NC} $1"; }
mask_token() {
local token="$1"
if [ -z "$token" ] || [ ${#token} -le 6 ]; then
echo "******"
else
echo "${token:0:3}***${token: -3}"
fi
}
generate_random_password() {
openssl rand -base64 24 | tr -dc 'a-zA-Z0-9' | head -c 16
}
get_docker_gateway() {
local docker_version
docker_version=$(docker version --format '{{.Server.Version}}' 2>/dev/null || echo "0.0.0")
local major minor
major=$(echo "$docker_version" | cut -d. -f1)
minor=$(echo "$docker_version" | cut -d. -f2)
if [ "$major" -gt 20 ] || { [ "$major" -eq 20 ] && [ "$minor" -ge 1 ]; }; then
echo "host-gateway"
else
docker network inspect bridge --format '{{range .IPAM.Config}}{{.Gateway}}{{end}}' 2>/dev/null || echo "172.17.0.1"
fi
}
detect_docker_compose() {
if command -v docker &> /dev/null && docker compose version &> /dev/null; then
DOCKER_COMPOSE_CMD="docker compose"
elif [ -x "/opt/homebrew/bin/docker-compose" ]; then
DOCKER_COMPOSE_CMD="/opt/homebrew/bin/docker-compose"
elif command -v docker-compose &> /dev/null; then
DOCKER_COMPOSE_CMD="docker-compose"
else
log_error "未找到 docker-compose 或 docker"
exit 1
fi
}
ensure_envsubst() {
if ! command -v envsubst &> /dev/null; then
log_error "envsubst 未找到,请安装 gettext 包"
log_info " Ubuntu/Debian: apt-get install gettext-base"
log_info " CentOS/RHEL: yum install gettext"
log_info " macOS: brew install gettext"
exit 1
fi
}