fix and update

This commit is contained in:
lendry
2026-07-01 19:19:27 +03:00
parent f423f512f8
commit 7e54cec361
16 changed files with 1093 additions and 150 deletions

View File

@@ -10,7 +10,7 @@
set -euo pipefail
SCRIPT_VERSION="2.6.1"
SCRIPT_VERSION="2.6.2"
ROOT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
cd "$ROOT_DIR"
@@ -76,6 +76,7 @@ ${BOLD}Lendry ID v${SCRIPT_VERSION}${NC} — установка и управл
./install.sh --renew-ssl Обновить сертификаты (Let's Encrypt / custom / selfsigned)
./install.sh --restart Перезапуск контейнеров
./install.sh --migrate-rebuild Миграции Prisma + пересборка стека (после git pull)
./install.sh --fix-host-nginx Host Nginx: остановить Docker Nginx, поднять system nginx
./install.sh --docker-prune Только очистка Docker (без пересборки)
./install.sh --fix-proxy Исправить 502: host Nginx + порты 3000/3002/3003
./install.sh --fix-all Комплексное исправление: 502, прокси, порты, Nginx
@@ -159,6 +160,7 @@ parse_args() {
--renew-ssl) ACTION="renew-ssl"; shift ;;
--restart) ACTION="restart"; shift ;;
--migrate-rebuild) ACTION="migrate-rebuild"; shift ;;
--fix-host-nginx) ACTION="fix-host-nginx"; shift ;;
--docker-prune) ACTION="docker-prune"; shift ;;
--skip-docker-prune) SKIP_DOCKER_PRUNE=1; shift ;;
--docker-prune-aggressive) DOCKER_PRUNE_AGGRESSIVE=1; shift ;;
@@ -374,6 +376,9 @@ ensure_docker_nginx_not_conflicting() {
if [[ "$(env_get NGINX_MODE docker)" == "host" ]] || [[ "$ports_busy" -eq 1 ]]; then
stop_docker_nginx
if [[ "$(env_get NGINX_MODE docker)" == "host" ]]; then
ensure_host_nginx_stack || true
fi
fi
}
@@ -388,6 +393,55 @@ stop_docker_nginx() {
fi
}
# NGINX_MODE=host: системный Nginx на 80/443, Docker Nginx не используется.
ensure_host_nginx_stack() {
load_env
[[ "$(env_get NGINX_MODE docker)" == "host" ]] || return 0
[[ -n "$(env_get DOMAIN_API "")" ]] || return 0
[[ "$(env_get INSTALL_MODE local)" == "local" ]] && return 0
stop_docker_nginx
log "Синхронизация системного Nginx (NGINX_MODE=host)..."
refresh_host_nginx_configs || true
recreate_host_port_services || true
ensure_host_upstreams || true
if ! host_nginx_available; then
fail "NGINX_MODE=host, но системный Nginx не установлен. Установите nginx или переключите NGINX_MODE=docker"
fi
if ! system_nginx_is_active; then
log "Запуск системного Nginx (освободили порты после остановки lendry-id-nginx)..."
run_root systemctl start nginx 2>/dev/null || run_root service nginx start 2>/dev/null || \
fail "Не удалось запустить system nginx — проверьте: sudo systemctl status nginx"
fi
if run_root nginx -t >/dev/null 2>&1; then
run_root systemctl reload nginx 2>/dev/null || run_root service nginx reload 2>/dev/null || true
ok "Системный Nginx активен и перезагружен"
else
warn "nginx -t не прошёл — проверьте /etc/nginx/sites-enabled/${NGINX_PREFIX}-*.conf"
run_root nginx -t 2>&1 | sed 's/^/ /' || true
return 1
fi
if docker_nginx_container_running; then
fail "Конфликт: lendry-id-nginx всё ещё запущен при NGINX_MODE=host"
fi
}
action_fix_host_nginx() {
[[ -f .env ]] || fail "Файл .env не найден"
load_env
prepare_compose_stack
ensure_host_nginx_stack || fail "Не удалось восстановить системный Nginx"
recreate_host_port_services || true
ensure_host_upstreams || true
show_upstream_health
ok "Host Nginx восстановлен — проверьте сайт в браузере"
}
reload_docker_nginx() {
docker_nginx_container_running || return 0
log "Перезагрузка конфигурации Docker Nginx..."
@@ -451,7 +505,7 @@ recreate_docker_nginx() {
wait_for_service "nginx" 60
}
# После пересборки стека (п.11 migrate-rebuild): поднять Nginx, если он не запущен.
# После пересборки стека (п.11 migrate-rebuild): Nginx согласно NGINX_MODE.
ensure_nginx_after_stack_rebuild() {
load_env
prepare_compose_stack
@@ -460,6 +514,11 @@ ensure_nginx_after_stack_rebuild() {
[[ -n "$(env_get DOMAIN_API "")" ]] || return 0
[[ "$(env_get INSTALL_MODE local)" == "local" ]] && return 0
if [[ "$(env_get NGINX_MODE docker)" == "host" ]]; then
ensure_host_nginx_stack
return $?
fi
if [[ "$(env_get NGINX_MODE docker)" == "docker" ]]; then
log "Запуск и синхронизация Docker Nginx (lendry-id-nginx)..."
ensure_nginx_gateway_watch_script
@@ -493,14 +552,7 @@ ensure_nginx_after_stack_rebuild() {
return 0
fi
log "Синхронизация системного Nginx (NGINX_MODE=host)..."
refresh_host_nginx_configs || true
recreate_host_port_services || true
ensure_host_upstreams || true
if system_nginx_is_active || lendry_host_nginx_configured; then
run_root nginx -t >/dev/null 2>&1 && run_root systemctl reload nginx 2>/dev/null || true
fi
ok "Системный Nginx синхронизирован"
warn "NGINX_MODE=$(env_get NGINX_MODE auto) — пропуск настройки Nginx"
}
ensure_nginx_gateway_watch_script() {
@@ -1586,11 +1638,23 @@ action_migrate_rebuild() {
wait_for_service docs 60
log "Шаг 4/4: Nginx, прокси и проверка..."
ensure_nginx_after_stack_rebuild || warn "Nginx не поднялся — выполните ./install.sh --fix-all"
post_deploy_proxy_verify 0 || true
ensure_nginx_after_stack_rebuild || warn "Nginx не восстановлен — выполните: ./install.sh --fix-host-nginx"
if [[ "$(env_get NGINX_MODE docker)" == "host" ]]; then
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
if compose_uses_proxy_profile && ! docker_nginx_container_running; then
if [[ "$(env_get NGINX_MODE docker)" == "host" ]]; 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"
fi
@@ -3773,7 +3837,7 @@ diagnose_common_issues() {
issues=$((issues + 1))
elif [[ "$(env_get NGINX_MODE docker)" == "host" ]]; then
echo -e " ${RED}${NC} Конфликт: NGINX_MODE=host, но запущен lendry-id-nginx"
echo " Решение: ./install.sh --fix-all"
echo " Решение: ./install.sh --fix-host-nginx"
issues=$((issues + 1))
elif [[ "$(env_get NGINX_MODE docker)" == "docker" ]] \
&& ! docker_nginx_container_running \
@@ -3956,10 +4020,16 @@ show_status() {
echo ""
if docker_cmd ps -q -f name=lendry-id-nginx 2>/dev/null | grep -q .; then
if [[ "$(env_get NGINX_MODE docker)" == "host" ]]; then
warn "КОНФЛИКТ: контейнер lendry-id-nginx запущен при NGINX_MODE=host — выполните: ./install.sh --fix-all"
warn "КОНФЛИКТ: контейнер lendry-id-nginx запущен при NGINX_MODE=host — выполните: ./install.sh --fix-host-nginx"
else
echo " Docker Nginx: запущен (режим docker; curl 127.0.0.1:3002 не нужен)"
fi
elif [[ "$(env_get NGINX_MODE docker)" == "host" ]]; then
if system_nginx_is_active; then
echo " Host Nginx: активен (systemd)"
else
warn "Host Nginx: не запущен — выполните: ./install.sh --fix-host-nginx"
fi
fi
if [[ "$(env_get NGINX_MODE docker)" == "host" ]]; then
docker_cmd port lendry-id-frontend 3000/tcp 2>/dev/null | sed 's/^/ frontend port: /' || \
@@ -4372,6 +4442,7 @@ main() {
renew-ssl) action_renew_ssl ;;
restart) action_restart ;;
migrate-rebuild) action_migrate_rebuild ;;
fix-host-nginx) action_fix_host_nginx ;;
docker-prune) action_docker_prune ;;
fix-proxy) action_fix_host_proxy ;;
fix-all) action_fix_all_errors ;;