commit 8
This commit is contained in:
60
install.sh
60
install.sh
@@ -18,6 +18,31 @@ step() { echo -e "\n${CYAN}━━━ $1 ━━━${NC}"; }
|
||||
mark_done() { echo "$1" >> "$PROGRESS_FILE"; }
|
||||
is_done() { grep -qx "$1" "$PROGRESS_FILE" 2>/dev/null; }
|
||||
|
||||
# ─── Find free port (check + increment until free) ──────────────
|
||||
find_free_port() {
|
||||
local port=$1 max=$2
|
||||
max="${max:-65535}"
|
||||
while [ "$port" -le "$max" ]; do
|
||||
if ! ss -tlnp "sport = :$port" 2>/dev/null | grep -q .; then
|
||||
echo "$port"
|
||||
return 0
|
||||
fi
|
||||
port=$((port + 1))
|
||||
done
|
||||
echo "$1"
|
||||
return 1
|
||||
}
|
||||
|
||||
# ─── Update or add a variable in .env ────────────────────────────
|
||||
set_env() {
|
||||
local key=$1 val=$2 file="${INSTALL_DIR}/.env"
|
||||
if grep -q "^${key}=" "$file" 2>/dev/null; then
|
||||
sed -i "s|^${key}=.*|${key}=${val}|" "$file"
|
||||
else
|
||||
echo "${key}=${val}" >> "$file"
|
||||
fi
|
||||
}
|
||||
|
||||
echo -e "${CYAN}"
|
||||
echo " ╔══════════════════════════════════════════════╗"
|
||||
echo " ║ SSO Service — Auto Installer ║"
|
||||
@@ -180,13 +205,40 @@ set -a; source .env; set +a
|
||||
# ─── 5. Docker infrastructure ────────────────────────────────────
|
||||
step "5/8 Starting infrastructure (PostgreSQL, Redis, RabbitMQ)"
|
||||
|
||||
# Проверка занятости портов
|
||||
for port in 5432 6379 5672 15672; do
|
||||
if ss -tlnp "sport = :$port" 2>/dev/null | grep -q .; then
|
||||
warn "Port $port is already in use — service may conflict with existing postgres/redis/rabbitmq"
|
||||
# Проверка и переназначение занятых портов
|
||||
PORT_MAP=""
|
||||
for pair in "POSTGRES_PORT:5432" "REDIS_PORT:6379" "RABBITMQ_PORT:5672" "RABBITMQ_UI_PORT:15672"; do
|
||||
var="${pair%%:*}"
|
||||
default="${pair#*:}"
|
||||
current=$(grep "^${var}=" "$INSTALL_DIR/.env" 2>/dev/null | cut -d= -f2) || true
|
||||
current="${current:-$default}"
|
||||
|
||||
if ss -tlnp "sport = :$current" 2>/dev/null | grep -q .; then
|
||||
warn "Port $current ($var) is busy — finding free port..."
|
||||
new_port=$(find_free_port "$((current + 1))" 2>/dev/null) || new_port=$((current + 100))
|
||||
set_env "$var" "$new_port"
|
||||
info " $var changed: $current → $new_port"
|
||||
PORT_MAP="$PORT_MAP $var=$new_port"
|
||||
else
|
||||
info " $var → $current"
|
||||
fi
|
||||
done
|
||||
|
||||
# Если порты изменились — перечитать .env
|
||||
if [ -n "$PORT_MAP" ]; then
|
||||
set -a; source "$INSTALL_DIR/.env"; set +a
|
||||
info "Ports adjusted — re-sourced .env"
|
||||
fi
|
||||
|
||||
# Обновить DATABASE_URL если POSTGRES_PORT изменился
|
||||
POSTGRES_PORT_CUR=$(grep "^POSTGRES_PORT=" "$INSTALL_DIR/.env" 2>/dev/null | cut -d= -f2)
|
||||
PG_USER=$(grep "^POSTGRES_USER=" "$INSTALL_DIR/.env" 2>/dev/null | cut -d= -f2)
|
||||
PG_PASS=$(grep "^POSTGRES_PASSWORD=" "$INSTALL_DIR/.env" 2>/dev/null | cut -d= -f2)
|
||||
PG_DB=$(grep "^POSTGRES_DB=" "$INSTALL_DIR/.env" 2>/dev/null | cut -d= -f2)
|
||||
NEW_URL="postgresql://${PG_USER}:${PG_PASS}@localhost:${POSTGRES_PORT_CUR}/${PG_DB}"
|
||||
set_env "DATABASE_URL" "$NEW_URL"
|
||||
export DATABASE_URL="$NEW_URL"
|
||||
|
||||
# Остановить предыдущие контейнеры (если есть), потом запустить заново
|
||||
$SUDO docker compose down --remove-orphans 2>/dev/null || true
|
||||
|
||||
|
||||
Reference in New Issue
Block a user