commit 8
This commit is contained in:
@@ -20,7 +20,8 @@ JWT_REFRESH_EXPIRES_IN=7d
|
|||||||
POSTGRES_USER=sso
|
POSTGRES_USER=sso
|
||||||
POSTGRES_PASSWORD=sso_secret
|
POSTGRES_PASSWORD=sso_secret
|
||||||
POSTGRES_DB=sso_db
|
POSTGRES_DB=sso_db
|
||||||
DATABASE_URL=postgresql://${POSTGRES_USER}:${POSTGRES_PASSWORD}@localhost:5432/${POSTGRES_DB}
|
POSTGRES_PORT=5432
|
||||||
|
DATABASE_URL=postgresql://${POSTGRES_USER}:${POSTGRES_PASSWORD}@localhost:${POSTGRES_PORT}/${POSTGRES_DB}
|
||||||
|
|
||||||
# ──────────────────────────────────────────────
|
# ──────────────────────────────────────────────
|
||||||
# Redis
|
# Redis
|
||||||
@@ -35,6 +36,7 @@ RABBITMQ_USER=sso
|
|||||||
RABBITMQ_PASSWORD=sso_secret
|
RABBITMQ_PASSWORD=sso_secret
|
||||||
RABBITMQ_HOST=localhost
|
RABBITMQ_HOST=localhost
|
||||||
RABBITMQ_PORT=5672
|
RABBITMQ_PORT=5672
|
||||||
|
RABBITMQ_UI_PORT=15672
|
||||||
RABBITMQ_URL=amqp://${RABBITMQ_USER}:${RABBITMQ_PASSWORD}@${RABBITMQ_HOST}:${RABBITMQ_PORT}
|
RABBITMQ_URL=amqp://${RABBITMQ_USER}:${RABBITMQ_PASSWORD}@${RABBITMQ_HOST}:${RABBITMQ_PORT}
|
||||||
|
|
||||||
# ──────────────────────────────────────────────
|
# ──────────────────────────────────────────────
|
||||||
|
|||||||
@@ -8,7 +8,7 @@ services:
|
|||||||
POSTGRES_PASSWORD: ${POSTGRES_PASSWORD}
|
POSTGRES_PASSWORD: ${POSTGRES_PASSWORD}
|
||||||
POSTGRES_DB: ${POSTGRES_DB}
|
POSTGRES_DB: ${POSTGRES_DB}
|
||||||
ports:
|
ports:
|
||||||
- "5432:5432"
|
- "${POSTGRES_PORT:-5432}:5432"
|
||||||
volumes:
|
volumes:
|
||||||
- pgdata:/var/lib/postgresql/data
|
- pgdata:/var/lib/postgresql/data
|
||||||
healthcheck:
|
healthcheck:
|
||||||
@@ -21,7 +21,7 @@ services:
|
|||||||
image: redis:7-alpine
|
image: redis:7-alpine
|
||||||
restart: unless-stopped
|
restart: unless-stopped
|
||||||
ports:
|
ports:
|
||||||
- "6379:6379"
|
- "${REDIS_PORT:-6379}:6379"
|
||||||
healthcheck:
|
healthcheck:
|
||||||
test: ["CMD", "redis-cli", "ping"]
|
test: ["CMD", "redis-cli", "ping"]
|
||||||
interval: 5s
|
interval: 5s
|
||||||
@@ -36,8 +36,8 @@ services:
|
|||||||
RABBITMQ_DEFAULT_USER: ${RABBITMQ_USER}
|
RABBITMQ_DEFAULT_USER: ${RABBITMQ_USER}
|
||||||
RABBITMQ_DEFAULT_PASS: ${RABBITMQ_PASSWORD}
|
RABBITMQ_DEFAULT_PASS: ${RABBITMQ_PASSWORD}
|
||||||
ports:
|
ports:
|
||||||
- "5672:5672"
|
- "${RABBITMQ_PORT:-5672}:5672"
|
||||||
- "15672:15672"
|
- "${RABBITMQ_UI_PORT:-15672}:15672"
|
||||||
healthcheck:
|
healthcheck:
|
||||||
test: ["CMD", "rabbitmq-diagnostics", "check_port_connectivity"]
|
test: ["CMD", "rabbitmq-diagnostics", "check_port_connectivity"]
|
||||||
interval: 10s
|
interval: 10s
|
||||||
|
|||||||
60
install.sh
60
install.sh
@@ -18,6 +18,31 @@ step() { echo -e "\n${CYAN}━━━ $1 ━━━${NC}"; }
|
|||||||
mark_done() { echo "$1" >> "$PROGRESS_FILE"; }
|
mark_done() { echo "$1" >> "$PROGRESS_FILE"; }
|
||||||
is_done() { grep -qx "$1" "$PROGRESS_FILE" 2>/dev/null; }
|
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 -e "${CYAN}"
|
||||||
echo " ╔══════════════════════════════════════════════╗"
|
echo " ╔══════════════════════════════════════════════╗"
|
||||||
echo " ║ SSO Service — Auto Installer ║"
|
echo " ║ SSO Service — Auto Installer ║"
|
||||||
@@ -180,13 +205,40 @@ set -a; source .env; set +a
|
|||||||
# ─── 5. Docker infrastructure ────────────────────────────────────
|
# ─── 5. Docker infrastructure ────────────────────────────────────
|
||||||
step "5/8 Starting infrastructure (PostgreSQL, Redis, RabbitMQ)"
|
step "5/8 Starting infrastructure (PostgreSQL, Redis, RabbitMQ)"
|
||||||
|
|
||||||
# Проверка занятости портов
|
# Проверка и переназначение занятых портов
|
||||||
for port in 5432 6379 5672 15672; do
|
PORT_MAP=""
|
||||||
if ss -tlnp "sport = :$port" 2>/dev/null | grep -q .; then
|
for pair in "POSTGRES_PORT:5432" "REDIS_PORT:6379" "RABBITMQ_PORT:5672" "RABBITMQ_UI_PORT:15672"; do
|
||||||
warn "Port $port is already in use — service may conflict with existing postgres/redis/rabbitmq"
|
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
|
fi
|
||||||
done
|
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
|
$SUDO docker compose down --remove-orphans 2>/dev/null || true
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user