fix and update
This commit is contained in:
@@ -4,10 +4,10 @@
|
|||||||
# Режим: local | intranet | production
|
# Режим: local | intranet | production
|
||||||
INSTALL_MODE=local
|
INSTALL_MODE=local
|
||||||
|
|
||||||
# Nginx: auto (Windows → Docker) | host (Linux) | docker
|
# Nginx: docker (контейнер lendry-id-nginx на 80/443) | host (только с --nginx-mode host)
|
||||||
NGINX_MODE=auto
|
NGINX_MODE=docker
|
||||||
|
|
||||||
# Порты Nginx-контейнера (если 80/443 заняты системным nginx)
|
# Порты Nginx-контейнера (если 80/443 заняты другим процессом — install.sh предложит 8080/8443)
|
||||||
NGINX_HTTP_PORT=80
|
NGINX_HTTP_PORT=80
|
||||||
NGINX_HTTPS_PORT=443
|
NGINX_HTTPS_PORT=443
|
||||||
|
|
||||||
|
|||||||
214
install.sh
214
install.sh
@@ -10,7 +10,7 @@
|
|||||||
|
|
||||||
set -euo pipefail
|
set -euo pipefail
|
||||||
|
|
||||||
SCRIPT_VERSION="2.6.2"
|
SCRIPT_VERSION="2.6.3"
|
||||||
ROOT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
ROOT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
||||||
cd "$ROOT_DIR"
|
cd "$ROOT_DIR"
|
||||||
|
|
||||||
@@ -32,7 +32,7 @@ ACTION=""
|
|||||||
INSTALL_LOCAL=0
|
INSTALL_LOCAL=0
|
||||||
INSTALL_INTRANET=0
|
INSTALL_INTRANET=0
|
||||||
OFFLINE="${OFFLINE:-0}"
|
OFFLINE="${OFFLINE:-0}"
|
||||||
NGINX_MODE="${NGINX_MODE:-auto}"
|
NGINX_MODE="${NGINX_MODE:-docker}"
|
||||||
SKIP_DOCKER_PRUNE="${SKIP_DOCKER_PRUNE:-0}"
|
SKIP_DOCKER_PRUNE="${SKIP_DOCKER_PRUNE:-0}"
|
||||||
DOCKER_PRUNE_AGGRESSIVE="${DOCKER_PRUNE_AGGRESSIVE:-0}"
|
DOCKER_PRUNE_AGGRESSIVE="${DOCKER_PRUNE_AGGRESSIVE:-0}"
|
||||||
# Принудительный Docker Nginx (контейнер lendry-id-nginx) — включается в --fix-all
|
# Принудительный Docker Nginx (контейнер lendry-id-nginx) — включается в --fix-all
|
||||||
@@ -76,7 +76,8 @@ ${BOLD}Lendry ID v${SCRIPT_VERSION}${NC} — установка и управл
|
|||||||
./install.sh --renew-ssl Обновить сертификаты (Let's Encrypt / custom / selfsigned)
|
./install.sh --renew-ssl Обновить сертификаты (Let's Encrypt / custom / selfsigned)
|
||||||
./install.sh --restart Перезапуск контейнеров
|
./install.sh --restart Перезапуск контейнеров
|
||||||
./install.sh --migrate-rebuild Миграции Prisma + пересборка стека (после git pull)
|
./install.sh --migrate-rebuild Миграции Prisma + пересборка стека (после git pull)
|
||||||
./install.sh --fix-host-nginx Host Nginx: остановить Docker Nginx, поднять system nginx
|
./install.sh --fix-host-nginx Устарело: восстановить Docker Nginx (lendry-id-nginx)
|
||||||
|
./install.sh --fix-docker-nginx Остановить system nginx, поднять lendry-id-nginx
|
||||||
./install.sh --docker-prune Только очистка Docker (без пересборки)
|
./install.sh --docker-prune Только очистка Docker (без пересборки)
|
||||||
./install.sh --fix-proxy Исправить 502: host Nginx + порты 3000/3002/3003
|
./install.sh --fix-proxy Исправить 502: host Nginx + порты 3000/3002/3003
|
||||||
./install.sh --fix-all Комплексное исправление: 502, прокси, порты, Nginx
|
./install.sh --fix-all Комплексное исправление: 502, прокси, порты, Nginx
|
||||||
@@ -160,7 +161,8 @@ parse_args() {
|
|||||||
--renew-ssl) ACTION="renew-ssl"; shift ;;
|
--renew-ssl) ACTION="renew-ssl"; shift ;;
|
||||||
--restart) ACTION="restart"; shift ;;
|
--restart) ACTION="restart"; shift ;;
|
||||||
--migrate-rebuild) ACTION="migrate-rebuild"; shift ;;
|
--migrate-rebuild) ACTION="migrate-rebuild"; shift ;;
|
||||||
--fix-host-nginx) ACTION="fix-host-nginx"; shift ;;
|
--fix-host-nginx) ACTION="fix-docker-nginx"; shift ;;
|
||||||
|
--fix-docker-nginx) ACTION="fix-docker-nginx"; shift ;;
|
||||||
--docker-prune) ACTION="docker-prune"; shift ;;
|
--docker-prune) ACTION="docker-prune"; shift ;;
|
||||||
--skip-docker-prune) SKIP_DOCKER_PRUNE=1; shift ;;
|
--skip-docker-prune) SKIP_DOCKER_PRUNE=1; shift ;;
|
||||||
--docker-prune-aggressive) DOCKER_PRUNE_AGGRESSIVE=1; shift ;;
|
--docker-prune-aggressive) DOCKER_PRUNE_AGGRESSIVE=1; shift ;;
|
||||||
@@ -175,7 +177,7 @@ parse_args() {
|
|||||||
--cert-dir) CLI_CERT_DIR="${2:-}"; shift 2 ;;
|
--cert-dir) CLI_CERT_DIR="${2:-}"; shift 2 ;;
|
||||||
--cert-fullchain) CLI_CERT_FULLCHAIN="${2:-}"; shift 2 ;;
|
--cert-fullchain) CLI_CERT_FULLCHAIN="${2:-}"; shift 2 ;;
|
||||||
--cert-key) CLI_CERT_KEY="${2:-}"; shift 2 ;;
|
--cert-key) CLI_CERT_KEY="${2:-}"; shift 2 ;;
|
||||||
--nginx-mode) NGINX_MODE="${2:-auto}"; NGINX_MODE_CLI="${2:-auto}"; shift 2 ;;
|
--nginx-mode) NGINX_MODE="${2:-docker}"; NGINX_MODE_CLI="${2:-docker}"; shift 2 ;;
|
||||||
--nginx-http-port) CLI_NGINX_HTTP_PORT="${2:-}"; shift 2 ;;
|
--nginx-http-port) CLI_NGINX_HTTP_PORT="${2:-}"; shift 2 ;;
|
||||||
--nginx-https-port) CLI_NGINX_HTTPS_PORT="${2:-}"; shift 2 ;;
|
--nginx-https-port) CLI_NGINX_HTTPS_PORT="${2:-}"; shift 2 ;;
|
||||||
--api-domain) CLI_DOMAIN_API="${2:-}"; shift 2 ;;
|
--api-domain) CLI_DOMAIN_API="${2:-}"; shift 2 ;;
|
||||||
@@ -234,19 +236,21 @@ preflight_checks() {
|
|||||||
|
|
||||||
detect_nginx_mode() {
|
detect_nginx_mode() {
|
||||||
load_env
|
load_env
|
||||||
if [[ -n "$(env_get NGINX_MODE "")" && "$(env_get NGINX_MODE auto)" != "auto" ]]; then
|
if [[ -n "$(env_get NGINX_MODE "")" && "$(env_get NGINX_MODE docker)" != "auto" ]]; then
|
||||||
NGINX_MODE="$(env_get NGINX_MODE auto)"
|
NGINX_MODE="$(env_get NGINX_MODE docker)"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
if [[ "$NGINX_MODE" == "auto" ]]; then
|
if [[ "$NGINX_MODE" == "auto" ]]; then
|
||||||
if [[ "$(uname -s)" == "Linux" ]] && { [[ -d /etc/nginx ]] || has_cmd nginx; }; then
|
NGINX_MODE="docker"
|
||||||
NGINX_MODE="host"
|
|
||||||
else
|
|
||||||
NGINX_MODE="docker"
|
|
||||||
fi
|
|
||||||
fi
|
fi
|
||||||
|
|
||||||
log "Режим Nginx: ${NGINX_MODE} (host=системный, docker=контейнер)"
|
# Host-режим устарел: без явного --nginx-mode host всегда Docker Nginx
|
||||||
|
if [[ "$NGINX_MODE" == "host" && "$NGINX_MODE_CLI" != "host" ]]; then
|
||||||
|
warn "NGINX_MODE=host в .env устарел — используется Docker Nginx (lendry-id-nginx)"
|
||||||
|
NGINX_MODE="docker"
|
||||||
|
fi
|
||||||
|
|
||||||
|
log "Режим Nginx: ${NGINX_MODE} (docker=контейнер lendry-id-nginx, host=только с --nginx-mode host)"
|
||||||
}
|
}
|
||||||
|
|
||||||
port_in_use() {
|
port_in_use() {
|
||||||
@@ -292,6 +296,28 @@ disable_host_nginx_lendry() {
|
|||||||
fi
|
fi
|
||||||
}
|
}
|
||||||
|
|
||||||
|
# Освобождает 80/443 для lendry-id-nginx: отключает IdP в system nginx и останавливает его.
|
||||||
|
prepare_docker_nginx_ports() {
|
||||||
|
load_env
|
||||||
|
disable_host_nginx_lendry
|
||||||
|
|
||||||
|
NGINX_HTTP_PORT="${NGINX_HTTP_PORT:-$(env_get NGINX_HTTP_PORT 80)}"
|
||||||
|
NGINX_HTTPS_PORT="${NGINX_HTTPS_PORT:-$(env_get NGINX_HTTPS_PORT 443)}"
|
||||||
|
[[ -n "$CLI_NGINX_HTTP_PORT" ]] && NGINX_HTTP_PORT="$CLI_NGINX_HTTP_PORT"
|
||||||
|
[[ -n "$CLI_NGINX_HTTPS_PORT" ]] && NGINX_HTTPS_PORT="$CLI_NGINX_HTTPS_PORT"
|
||||||
|
|
||||||
|
if system_nginx_is_active \
|
||||||
|
|| { port_in_use "$NGINX_HTTP_PORT" && host_nginx_available; } \
|
||||||
|
|| { port_in_use "$NGINX_HTTPS_PORT" && host_nginx_available; }; then
|
||||||
|
log "Остановка системного Nginx (освобождение портов ${NGINX_HTTP_PORT}/${NGINX_HTTPS_PORT} для lendry-id-nginx)..."
|
||||||
|
run_root systemctl stop nginx 2>/dev/null || run_root service nginx stop 2>/dev/null || true
|
||||||
|
sleep 2
|
||||||
|
fi
|
||||||
|
|
||||||
|
env_set NGINX_HTTP_PORT "$NGINX_HTTP_PORT"
|
||||||
|
env_set NGINX_HTTPS_PORT "$NGINX_HTTPS_PORT"
|
||||||
|
}
|
||||||
|
|
||||||
# --fix-all / --install: всегда Docker Nginx (lendry-id-nginx), не системный на 80/443
|
# --fix-all / --install: всегда Docker Nginx (lendry-id-nginx), не системный на 80/443
|
||||||
ensure_docker_nginx_mode_for_fix_all() {
|
ensure_docker_nginx_mode_for_fix_all() {
|
||||||
load_env
|
load_env
|
||||||
@@ -301,26 +327,10 @@ ensure_docker_nginx_mode_for_fix_all() {
|
|||||||
|
|
||||||
log "Переключение на Docker Nginx (контейнер lendry-id-nginx)..."
|
log "Переключение на Docker Nginx (контейнер lendry-id-nginx)..."
|
||||||
|
|
||||||
disable_host_nginx_lendry
|
prepare_docker_nginx_ports
|
||||||
|
|
||||||
NGINX_HTTP_PORT="${NGINX_HTTP_PORT:-$(env_get NGINX_HTTP_PORT 80)}"
|
|
||||||
NGINX_HTTPS_PORT="${NGINX_HTTPS_PORT:-$(env_get NGINX_HTTPS_PORT 443)}"
|
|
||||||
[[ -n "$CLI_NGINX_HTTP_PORT" ]] && NGINX_HTTP_PORT="$CLI_NGINX_HTTP_PORT"
|
|
||||||
[[ -n "$CLI_NGINX_HTTPS_PORT" ]] && NGINX_HTTPS_PORT="$CLI_NGINX_HTTPS_PORT"
|
|
||||||
|
|
||||||
if system_nginx_is_active \
|
|
||||||
|| port_in_use "$NGINX_HTTP_PORT" \
|
|
||||||
|| port_in_use "$NGINX_HTTPS_PORT"; then
|
|
||||||
log "Остановка системного Nginx (освобождение портов ${NGINX_HTTP_PORT}/${NGINX_HTTPS_PORT})..."
|
|
||||||
run_root systemctl stop nginx 2>/dev/null || run_root service nginx stop 2>/dev/null || true
|
|
||||||
sleep 2
|
|
||||||
fi
|
|
||||||
|
|
||||||
docker_cmd rm -f lendry-id-nginx 2>/dev/null || true
|
docker_cmd rm -f lendry-id-nginx 2>/dev/null || true
|
||||||
|
|
||||||
env_set NGINX_HTTP_PORT "$NGINX_HTTP_PORT"
|
|
||||||
env_set NGINX_HTTPS_PORT "$NGINX_HTTPS_PORT"
|
|
||||||
|
|
||||||
if port_in_use "$NGINX_HTTP_PORT" || port_in_use "$NGINX_HTTPS_PORT"; then
|
if port_in_use "$NGINX_HTTP_PORT" || port_in_use "$NGINX_HTTPS_PORT"; then
|
||||||
warn "Порты ${NGINX_HTTP_PORT}/${NGINX_HTTPS_PORT} всё ещё заняты после остановки system nginx"
|
warn "Порты ${NGINX_HTTP_PORT}/${NGINX_HTTPS_PORT} всё ещё заняты после остановки system nginx"
|
||||||
if has_cmd ss; then
|
if has_cmd ss; then
|
||||||
@@ -344,41 +354,20 @@ ensure_docker_nginx_mode_for_install() {
|
|||||||
ensure_docker_nginx_mode_for_fix_all
|
ensure_docker_nginx_mode_for_fix_all
|
||||||
}
|
}
|
||||||
|
|
||||||
# Не даём контейнерному nginx занять 80/443, если их уже держит системный nginx
|
# Docker Nginx на 80/443: не переключаемся на system nginx при занятых портах — освобождаем их.
|
||||||
# или явно выбран NGINX_MODE=host (типичная причина «address already in use»).
|
|
||||||
ensure_docker_nginx_not_conflicting() {
|
ensure_docker_nginx_not_conflicting() {
|
||||||
load_env
|
load_env
|
||||||
|
|
||||||
if [[ "${FORCE_DOCKER_NGINX:-0}" -eq 1 ]]; then
|
if [[ "${FORCE_DOCKER_NGINX:-0}" -eq 1 ]] || [[ "$(env_get NGINX_MODE docker)" == "docker" ]]; then
|
||||||
NGINX_MODE="docker"
|
NGINX_MODE="docker"
|
||||||
|
env_set NGINX_MODE "docker"
|
||||||
|
prepare_docker_nginx_ports
|
||||||
return 0
|
return 0
|
||||||
fi
|
fi
|
||||||
|
|
||||||
resolve_nginx_mode_and_ports
|
if [[ "$(env_get NGINX_MODE docker)" == "host" ]]; then
|
||||||
|
|
||||||
local http="${NGINX_HTTP_PORT:-80}"
|
|
||||||
local https="${NGINX_HTTPS_PORT:-443}"
|
|
||||||
local ports_busy=0
|
|
||||||
port_in_use "$http" && ports_busy=1
|
|
||||||
port_in_use "$https" && ports_busy=1
|
|
||||||
|
|
||||||
if [[ "$ports_busy" -eq 1 ]] && [[ "$(env_get NGINX_MODE docker)" == "docker" ]]; then
|
|
||||||
if host_nginx_available || system_nginx_is_active || lendry_host_nginx_configured; then
|
|
||||||
warn "Порты ${http}/${https} заняты системным Nginx — переключаем NGINX_MODE на host"
|
|
||||||
warn "Контейнер lendry-id-nginx не будет запущен (используйте системный Nginx)"
|
|
||||||
NGINX_MODE="host"
|
|
||||||
env_set NGINX_MODE "host"
|
|
||||||
else
|
|
||||||
warn "Порты ${http}/${https} заняты другим процессом — Docker Nginx не сможет стартовать"
|
|
||||||
warn "Освободите порты или укажите другие: --nginx-http-port / --nginx-https-port"
|
|
||||||
fi
|
|
||||||
fi
|
|
||||||
|
|
||||||
if [[ "$(env_get NGINX_MODE docker)" == "host" ]] || [[ "$ports_busy" -eq 1 ]]; then
|
|
||||||
stop_docker_nginx
|
stop_docker_nginx
|
||||||
if [[ "$(env_get NGINX_MODE docker)" == "host" ]]; then
|
ensure_host_nginx_stack || true
|
||||||
ensure_host_nginx_stack || true
|
|
||||||
fi
|
|
||||||
fi
|
fi
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -432,14 +421,26 @@ ensure_host_nginx_stack() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
action_fix_host_nginx() {
|
action_fix_host_nginx() {
|
||||||
|
warn "--fix-host-nginx устарел — используется Docker Nginx (lendry-id-nginx)"
|
||||||
|
action_fix_docker_nginx
|
||||||
|
}
|
||||||
|
|
||||||
|
action_fix_docker_nginx() {
|
||||||
[[ -f .env ]] || fail "Файл .env не найден"
|
[[ -f .env ]] || fail "Файл .env не найден"
|
||||||
load_env
|
load_env
|
||||||
|
NON_INTERACTIVE=1
|
||||||
|
|
||||||
|
log "Восстановление Docker Nginx (lendry-id-nginx)..."
|
||||||
|
ensure_docker_nginx_mode_for_fix_all
|
||||||
prepare_compose_stack
|
prepare_compose_stack
|
||||||
ensure_host_nginx_stack || fail "Не удалось восстановить системный Nginx"
|
ensure_nginx_after_stack_rebuild || fail "Не удалось запустить lendry-id-nginx"
|
||||||
recreate_host_port_services || true
|
sync_nginx_after_api_gateway_restart || true
|
||||||
ensure_host_upstreams || true
|
sync_nginx_after_edge_restart || true
|
||||||
show_upstream_health
|
reload_docker_nginx || true
|
||||||
ok "Host Nginx восстановлен — проверьте сайт в браузере"
|
post_deploy_proxy_verify 0 || warn "Проверка прокси не прошла — выполните: ./install.sh --fix-all"
|
||||||
|
diagnose_common_issues || true
|
||||||
|
ok "Docker Nginx (lendry-id-nginx) восстановлен — проверьте сайт в браузере"
|
||||||
|
show_status
|
||||||
}
|
}
|
||||||
|
|
||||||
reload_docker_nginx() {
|
reload_docker_nginx() {
|
||||||
@@ -670,14 +671,10 @@ resolve_nginx_mode_and_ports() {
|
|||||||
|
|
||||||
detect_nginx_mode
|
detect_nginx_mode
|
||||||
|
|
||||||
if system_nginx_is_active || lendry_host_nginx_configured; then
|
if [[ "$NGINX_MODE" == "docker" ]]; then
|
||||||
if [[ "$NGINX_MODE" == "docker" ]]; then
|
prepare_docker_nginx_ports
|
||||||
warn "На сервере активен системный Nginx — переключаем NGINX_MODE на host"
|
|
||||||
warn "Docker Nginx (lendry-id-nginx) не совместим с системным Nginx на 443"
|
|
||||||
NGINX_MODE="host"
|
|
||||||
env_set NGINX_MODE "host"
|
|
||||||
fi
|
|
||||||
fi
|
fi
|
||||||
|
|
||||||
if [[ -n "$CLI_NGINX_HTTP_PORT" ]]; then
|
if [[ -n "$CLI_NGINX_HTTP_PORT" ]]; then
|
||||||
NGINX_HTTP_PORT="$CLI_NGINX_HTTP_PORT"
|
NGINX_HTTP_PORT="$CLI_NGINX_HTTP_PORT"
|
||||||
env_set NGINX_HTTP_PORT "$NGINX_HTTP_PORT"
|
env_set NGINX_HTTP_PORT "$NGINX_HTTP_PORT"
|
||||||
@@ -692,12 +689,8 @@ resolve_nginx_mode_and_ports() {
|
|||||||
|
|
||||||
if [[ "$NGINX_MODE" == "docker" ]]; then
|
if [[ "$NGINX_MODE" == "docker" ]]; then
|
||||||
if port_in_use "$NGINX_HTTP_PORT" || port_in_use "$NGINX_HTTPS_PORT"; then
|
if port_in_use "$NGINX_HTTP_PORT" || port_in_use "$NGINX_HTTPS_PORT"; then
|
||||||
if host_nginx_available || system_nginx_is_active || lendry_host_nginx_configured; then
|
if [[ "$NGINX_HTTP_PORT" == "80" && "$NON_INTERACTIVE" -eq 1 ]]; then
|
||||||
warn "Порт ${NGINX_HTTP_PORT}/${NGINX_HTTPS_PORT} занят — переключаемся на системный Nginx (host)"
|
warn "Порт 80/443 занят — Docker Nginx будет на 8080/8443"
|
||||||
NGINX_MODE="host"
|
|
||||||
env_set NGINX_MODE "host"
|
|
||||||
elif [[ "$NGINX_HTTP_PORT" == "80" && "$NON_INTERACTIVE" -eq 1 ]]; then
|
|
||||||
warn "Порт 80 занят — Docker Nginx будет на 8080/8443"
|
|
||||||
NGINX_HTTP_PORT="8080"
|
NGINX_HTTP_PORT="8080"
|
||||||
NGINX_HTTPS_PORT="8443"
|
NGINX_HTTPS_PORT="8443"
|
||||||
env_set NGINX_HTTP_PORT "8080"
|
env_set NGINX_HTTP_PORT "8080"
|
||||||
@@ -705,16 +698,15 @@ resolve_nginx_mode_and_ports() {
|
|||||||
elif [[ "$NGINX_HTTP_PORT" == "80" ]]; then
|
elif [[ "$NGINX_HTTP_PORT" == "80" ]]; then
|
||||||
echo ""
|
echo ""
|
||||||
warn "Порт 80 или 443 уже занят на этом сервере."
|
warn "Порт 80 или 443 уже занят на этом сервере."
|
||||||
echo " 1) Системный Nginx (рекомендуется, если nginx уже установлен)"
|
echo " 1) Остановить системный Nginx и использовать Docker на 80/443 (рекомендуется)"
|
||||||
echo " 2) Docker Nginx на портах 8080 / 8443"
|
echo " 2) Docker Nginx на портах 8080 / 8443"
|
||||||
echo " 3) Отмена — освободите 80/443 и повторите"
|
echo " 3) Отмена — освободите 80/443 вручную и повторите"
|
||||||
local port_choice
|
local port_choice
|
||||||
read -r -p "Выберите [1-3] [1]: " port_choice
|
read -r -p "Выберите [1-3] [1]: " port_choice
|
||||||
port_choice="${port_choice:-1}"
|
port_choice="${port_choice:-1}"
|
||||||
case "$port_choice" in
|
case "$port_choice" in
|
||||||
1)
|
1)
|
||||||
NGINX_MODE="host"
|
prepare_docker_nginx_ports
|
||||||
env_set NGINX_MODE "host"
|
|
||||||
;;
|
;;
|
||||||
2)
|
2)
|
||||||
NGINX_HTTP_PORT="8080"
|
NGINX_HTTP_PORT="8080"
|
||||||
@@ -723,7 +715,7 @@ resolve_nginx_mode_and_ports() {
|
|||||||
env_set NGINX_HTTPS_PORT "8443"
|
env_set NGINX_HTTPS_PORT "8443"
|
||||||
;;
|
;;
|
||||||
*)
|
*)
|
||||||
fail "Освободите порт 80: sudo systemctl stop nginx или укажите --nginx-mode host"
|
fail "Освободите порт 80: sudo systemctl stop nginx или укажите --nginx-http-port 8080"
|
||||||
;;
|
;;
|
||||||
esac
|
esac
|
||||||
else
|
else
|
||||||
@@ -1127,7 +1119,7 @@ load_env() {
|
|||||||
# shellcheck disable=SC1091
|
# shellcheck disable=SC1091
|
||||||
set -a && source .env && set +a
|
set -a && source .env && set +a
|
||||||
fi
|
fi
|
||||||
NGINX_MODE="${NGINX_MODE:-auto}"
|
NGINX_MODE="${NGINX_MODE:-docker}"
|
||||||
}
|
}
|
||||||
|
|
||||||
env_get() {
|
env_get() {
|
||||||
@@ -1610,6 +1602,11 @@ fi'
|
|||||||
action_migrate_rebuild() {
|
action_migrate_rebuild() {
|
||||||
[[ -f .env ]] || fail "Файл .env не найден — сначала выполните ./install.sh --install"
|
[[ -f .env ]] || fail "Файл .env не найден — сначала выполните ./install.sh --install"
|
||||||
load_env
|
load_env
|
||||||
|
if [[ "$(env_get INSTALL_MODE local)" != "local" ]] && [[ -n "$(env_get DOMAIN_API "")" ]] && [[ "$NGINX_MODE_CLI" != "host" ]]; then
|
||||||
|
NGINX_MODE="docker"
|
||||||
|
env_set NGINX_MODE "docker"
|
||||||
|
prepare_docker_nginx_ports
|
||||||
|
fi
|
||||||
prepare_compose_stack
|
prepare_compose_stack
|
||||||
|
|
||||||
echo ""
|
echo ""
|
||||||
@@ -1638,25 +1635,16 @@ action_migrate_rebuild() {
|
|||||||
wait_for_service docs 60
|
wait_for_service docs 60
|
||||||
|
|
||||||
log "Шаг 4/4: Nginx, прокси и проверка..."
|
log "Шаг 4/4: Nginx, прокси и проверка..."
|
||||||
ensure_nginx_after_stack_rebuild || warn "Nginx не восстановлен — выполните: ./install.sh --fix-host-nginx"
|
ensure_nginx_after_stack_rebuild || warn "Nginx не восстановлен — выполните: ./install.sh --fix-docker-nginx"
|
||||||
if [[ "$(env_get NGINX_MODE docker)" == "host" ]]; then
|
post_deploy_proxy_verify 0 || warn "HTTPS-проверка не прошла — выполните: ./install.sh --fix-all"
|
||||||
show_upstream_health
|
|
||||||
check_https_api_with_origin || warn "HTTPS-проверка не прошла — выполните: ./install.sh --fix-host-nginx"
|
|
||||||
else
|
|
||||||
post_deploy_proxy_verify 0 || true
|
|
||||||
fi
|
|
||||||
diagnose_common_issues || true
|
diagnose_common_issues || true
|
||||||
|
|
||||||
if [[ "$(env_get NGINX_MODE docker)" == "host" ]]; then
|
if compose_uses_proxy_profile && ! docker_nginx_container_running; then
|
||||||
if docker_nginx_container_running; then
|
|
||||||
fail "Конфликт: lendry-id-nginx запущен при NGINX_MODE=host. Выполните: ./install.sh --fix-host-nginx"
|
|
||||||
fi
|
|
||||||
if ! system_nginx_is_active; then
|
|
||||||
fail "Системный Nginx не запущен. Выполните: ./install.sh --fix-host-nginx"
|
|
||||||
fi
|
|
||||||
elif compose_uses_proxy_profile && ! docker_nginx_container_running; then
|
|
||||||
fail "Сайт недоступен: lendry-id-nginx не запущен. Выполните: ./install.sh --fix-all"
|
fail "Сайт недоступен: lendry-id-nginx не запущен. Выполните: ./install.sh --fix-all"
|
||||||
fi
|
fi
|
||||||
|
if docker_nginx_container_running && system_nginx_is_active; then
|
||||||
|
warn "Конфликт: системный Nginx и lendry-id-nginx одновременно — выполните: ./install.sh --fix-docker-nginx"
|
||||||
|
fi
|
||||||
|
|
||||||
ok "Миграция и пересборка завершены"
|
ok "Миграция и пересборка завершены"
|
||||||
echo ""
|
echo ""
|
||||||
@@ -1669,7 +1657,7 @@ persist_domain_env() {
|
|||||||
write_env_secrets_if_missing
|
write_env_secrets_if_missing
|
||||||
|
|
||||||
env_set INSTALL_MODE "${INSTALL_MODE:-local}"
|
env_set INSTALL_MODE "${INSTALL_MODE:-local}"
|
||||||
env_set NGINX_MODE "${NGINX_MODE:-auto}"
|
env_set NGINX_MODE "${NGINX_MODE:-docker}"
|
||||||
env_set SSL_TYPE "${SSL_TYPE:-none}"
|
env_set SSL_TYPE "${SSL_TYPE:-none}"
|
||||||
env_set DOMAIN_API "${DOMAIN_API:-}"
|
env_set DOMAIN_API "${DOMAIN_API:-}"
|
||||||
env_set DOMAIN_FRONTEND "${DOMAIN_FRONTEND:-}"
|
env_set DOMAIN_FRONTEND "${DOMAIN_FRONTEND:-}"
|
||||||
@@ -2943,14 +2931,16 @@ remove_nginx_configs() {
|
|||||||
ensure_nginx_mode_for_config_write() {
|
ensure_nginx_mode_for_config_write() {
|
||||||
load_env
|
load_env
|
||||||
if [[ "${FORCE_DOCKER_NGINX:-0}" -eq 1 ]] \
|
if [[ "${FORCE_DOCKER_NGINX:-0}" -eq 1 ]] \
|
||||||
|| [[ "$(env_get NGINX_MODE auto)" == "docker" ]] \
|
|| [[ "$(env_get NGINX_MODE docker)" == "docker" ]] \
|
||||||
|| docker_nginx_container_running; then
|
|| docker_nginx_container_running; then
|
||||||
NGINX_MODE="docker"
|
NGINX_MODE="docker"
|
||||||
env_set NGINX_MODE "docker"
|
env_set NGINX_MODE "docker"
|
||||||
elif [[ -n "$(env_get NGINX_MODE "")" && "$(env_get NGINX_MODE auto)" != "auto" ]]; then
|
elif [[ "$NGINX_MODE_CLI" == "host" ]] && [[ "$(env_get NGINX_MODE docker)" == "host" ]]; then
|
||||||
NGINX_MODE="$(env_get NGINX_MODE auto)"
|
NGINX_MODE="host"
|
||||||
else
|
else
|
||||||
detect_nginx_mode
|
detect_nginx_mode
|
||||||
|
NGINX_MODE="docker"
|
||||||
|
env_set NGINX_MODE "docker"
|
||||||
fi
|
fi
|
||||||
log "Запись конфигов Nginx: mode=${NGINX_MODE}, каталог=${LOCAL_CONF_DIR}"
|
log "Запись конфигов Nginx: mode=${NGINX_MODE}, каталог=${LOCAL_CONF_DIR}"
|
||||||
}
|
}
|
||||||
@@ -3674,7 +3664,7 @@ print_summary() {
|
|||||||
echo -e "${GREEN} Lendry ID — развёртывание завершено${NC}"
|
echo -e "${GREEN} Lendry ID — развёртывание завершено${NC}"
|
||||||
echo -e "${GREEN}══════════════════════════════════════════════════════════════${NC}"
|
echo -e "${GREEN}══════════════════════════════════════════════════════════════${NC}"
|
||||||
echo ""
|
echo ""
|
||||||
echo -e " ${BOLD}Режим:${NC} ${INSTALL_MODE:-local} | SSL: ${SSL_TYPE:-none} | Nginx: ${NGINX_MODE:-auto}"
|
echo -e " ${BOLD}Режим:${NC} ${INSTALL_MODE:-local} | SSL: ${SSL_TYPE:-none} | Nginx: ${NGINX_MODE:-docker}"
|
||||||
echo -e " ${BOLD}API / Swagger:${NC} ${PUBLIC_API_URL}/docs"
|
echo -e " ${BOLD}API / Swagger:${NC} ${PUBLIC_API_URL}/docs"
|
||||||
echo -e " ${BOLD}Frontend:${NC} ${PUBLIC_FRONTEND_URL}"
|
echo -e " ${BOLD}Frontend:${NC} ${PUBLIC_FRONTEND_URL}"
|
||||||
echo -e " ${BOLD}Документация:${NC} ${PUBLIC_DOCS_URL}/docs"
|
echo -e " ${BOLD}Документация:${NC} ${PUBLIC_DOCS_URL}/docs"
|
||||||
@@ -3836,8 +3826,8 @@ diagnose_common_issues() {
|
|||||||
echo " Решение: sudo systemctl stop nginx && ./install.sh --fix-all"
|
echo " Решение: sudo systemctl stop nginx && ./install.sh --fix-all"
|
||||||
issues=$((issues + 1))
|
issues=$((issues + 1))
|
||||||
elif [[ "$(env_get NGINX_MODE docker)" == "host" ]]; then
|
elif [[ "$(env_get NGINX_MODE docker)" == "host" ]]; then
|
||||||
echo -e " ${RED}✘${NC} Конфликт: NGINX_MODE=host, но запущен lendry-id-nginx"
|
echo -e " ${RED}✘${NC} NGINX_MODE=host устарел — используйте Docker Nginx"
|
||||||
echo " Решение: ./install.sh --fix-host-nginx"
|
echo " Решение: ./install.sh --fix-docker-nginx"
|
||||||
issues=$((issues + 1))
|
issues=$((issues + 1))
|
||||||
elif [[ "$(env_get NGINX_MODE docker)" == "docker" ]] \
|
elif [[ "$(env_get NGINX_MODE docker)" == "docker" ]] \
|
||||||
&& ! docker_nginx_container_running \
|
&& ! docker_nginx_container_running \
|
||||||
@@ -4004,7 +3994,7 @@ show_status() {
|
|||||||
echo " SSL_CERT_DIR: $(env_get SSL_CERT_DIR -)"
|
echo " SSL_CERT_DIR: $(env_get SSL_CERT_DIR -)"
|
||||||
echo " SSL установлен: ${CUSTOM_CERT_TARGET_DIR}/"
|
echo " SSL установлен: ${CUSTOM_CERT_TARGET_DIR}/"
|
||||||
fi
|
fi
|
||||||
echo " NGINX_MODE: $(env_get NGINX_MODE auto)"
|
echo " NGINX_MODE: $(env_get NGINX_MODE docker)"
|
||||||
echo " USE_NGINX_SSL: $(env_get USE_NGINX_SSL false)"
|
echo " USE_NGINX_SSL: $(env_get USE_NGINX_SSL false)"
|
||||||
echo " DOMAIN_API: $(env_get DOMAIN_API -)"
|
echo " DOMAIN_API: $(env_get DOMAIN_API -)"
|
||||||
echo " DOMAIN_FRONTEND: $(env_get DOMAIN_FRONTEND -)"
|
echo " DOMAIN_FRONTEND: $(env_get DOMAIN_FRONTEND -)"
|
||||||
@@ -4020,16 +4010,16 @@ show_status() {
|
|||||||
echo ""
|
echo ""
|
||||||
if docker_cmd ps -q -f name=lendry-id-nginx 2>/dev/null | grep -q .; then
|
if docker_cmd ps -q -f name=lendry-id-nginx 2>/dev/null | grep -q .; then
|
||||||
if [[ "$(env_get NGINX_MODE docker)" == "host" ]]; then
|
if [[ "$(env_get NGINX_MODE docker)" == "host" ]]; then
|
||||||
warn "КОНФЛИКТ: контейнер lendry-id-nginx запущен при NGINX_MODE=host — выполните: ./install.sh --fix-host-nginx"
|
warn "NGINX_MODE=host устарел при запущенном lendry-id-nginx — выполните: ./install.sh --fix-docker-nginx"
|
||||||
else
|
else
|
||||||
echo " Docker Nginx: запущен (режим docker; curl 127.0.0.1:3002 не нужен)"
|
echo " Docker Nginx: запущен (lendry-id-nginx)"
|
||||||
fi
|
fi
|
||||||
|
elif [[ "$(env_get NGINX_MODE docker)" == "docker" ]] \
|
||||||
|
&& [[ "$(env_get INSTALL_MODE local)" != "local" ]] \
|
||||||
|
&& [[ -n "$(env_get DOMAIN_API "")" ]]; then
|
||||||
|
warn "Docker Nginx: не запущен — выполните: ./install.sh --fix-docker-nginx"
|
||||||
elif [[ "$(env_get NGINX_MODE docker)" == "host" ]]; then
|
elif [[ "$(env_get NGINX_MODE docker)" == "host" ]]; then
|
||||||
if system_nginx_is_active; then
|
warn "NGINX_MODE=host устарел — выполните: ./install.sh --fix-docker-nginx"
|
||||||
echo " Host Nginx: активен (systemd)"
|
|
||||||
else
|
|
||||||
warn "Host Nginx: не запущен — выполните: ./install.sh --fix-host-nginx"
|
|
||||||
fi
|
|
||||||
fi
|
fi
|
||||||
if [[ "$(env_get NGINX_MODE docker)" == "host" ]]; then
|
if [[ "$(env_get NGINX_MODE docker)" == "host" ]]; then
|
||||||
docker_cmd port lendry-id-frontend 3000/tcp 2>/dev/null | sed 's/^/ frontend port: /' || \
|
docker_cmd port lendry-id-frontend 3000/tcp 2>/dev/null | sed 's/^/ frontend port: /' || \
|
||||||
@@ -4442,7 +4432,7 @@ main() {
|
|||||||
renew-ssl) action_renew_ssl ;;
|
renew-ssl) action_renew_ssl ;;
|
||||||
restart) action_restart ;;
|
restart) action_restart ;;
|
||||||
migrate-rebuild) action_migrate_rebuild ;;
|
migrate-rebuild) action_migrate_rebuild ;;
|
||||||
fix-host-nginx) action_fix_host_nginx ;;
|
fix-host-nginx|fix-docker-nginx) action_fix_docker_nginx ;;
|
||||||
docker-prune) action_docker_prune ;;
|
docker-prune) action_docker_prune ;;
|
||||||
fix-proxy) action_fix_host_proxy ;;
|
fix-proxy) action_fix_host_proxy ;;
|
||||||
fix-all) action_fix_all_errors ;;
|
fix-all) action_fix_all_errors ;;
|
||||||
|
|||||||
Reference in New Issue
Block a user