From 8329507d8df88d7bae8b8a9527b863e5a1eff8e3 Mon Sep 17 00:00:00 2001 From: grendervill Date: Sat, 19 Sep 2026 19:29:18 +0300 Subject: [PATCH] =?UTF-8?q?fix(deploy):=20=D0=BF=D0=BE=D1=80=D1=8F=D0=B4?= =?UTF-8?q?=D0=BE=D0=BA=20=D0=B2=D1=8B=D1=87=D0=B8=D1=81=D0=BB=D0=B5=D0=BD?= =?UTF-8?q?=D0=B8=D1=8F=20FILES=5FDOMAIN=20=D0=B8=20=D1=87=D0=B8=D1=81?= =?UTF-8?q?=D1=82=D0=BE=D1=82=D0=B0=20=D1=80=D0=B5=D0=BD=D0=B4=D0=B5=D1=80?= =?UTF-8?q?=D0=B0=20=D1=88=D0=B0=D0=B1=D0=BB=D0=BE=D0=BD=D0=BE=D0=B2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - resolve_derived_values(): производные значения (files.) считаются до записи .env; раньше set -u ронял установщик на write_env_file - убраны local-объявления, маскировавшие turn_external_tls/use_external_ip/ disable_simulcast/compose_template внутри render_all_templates - из рендера compose убрана неиспользуемая пара IMAGE_TAG - guard чётности аргументов рендера пишет в журнал, а не в консоль: проверка результата — отсутствие незаполненных плейсхолдеров --- deploy/install.sh | 31 ++++++++++++++++++------------- deploy/lib/common.sh | 8 ++++---- 2 files changed, 22 insertions(+), 17 deletions(-) diff --git a/deploy/install.sh b/deploy/install.sh index 73aea5b..b29d610 100755 --- a/deploy/install.sh +++ b/deploy/install.sh @@ -215,6 +215,18 @@ detect_ssh_port() { # --- подготовка ----------------------------------------------------------- +# resolve_derived_values вычисляет значения, которые нужны и в .env, и в шаблонах. +# Раньше FILES_DOMAIN_RESOLVED считался внутри render_all_templates, из-за чего +# write_env_file обращался к ещё не заданной переменной (set -u → падение). +resolve_derived_values() { + if [ "$FILES_SUBDOMAIN" = "true" ]; then + FILES_DOMAIN_RESOLVED="files.${DOMAIN}" + else + FILES_DOMAIN_RESOLVED="${DOMAIN}" + fi + export FILES_DOMAIN_RESOLVED +} + validate_inputs() { case "$PROFILE" in auto | lite | standard | plus | pro | custom | none) ;; @@ -564,14 +576,6 @@ render_all_templates() { cp "${DEPLOY_DIR}/fail2ban/filter-glchat-auth.conf" "${TARGET_DIR}/fail2ban/" fi - local files_root - if [ "$FILES_SUBDOMAIN" = "true" ]; then - files_root="files.${DOMAIN}" - else - files_root="${DOMAIN}" - fi - FILES_DOMAIN_RESOLVED="$files_root" - # В режиме внешнего прокси собственный Caddy не нужен вовсе: сервис # выносится в несуществующий профиль, чтобы `docker compose up` его не поднимал. CADDY_PROFILE="embedded-proxy" @@ -583,14 +587,14 @@ render_all_templates() { # Вариант compose выбирается по режиму: в тестовом прогоне (--skip-tls) # порты LiveKit не публикуются, чтобы не занимать порты хост-машины. - local compose_template="${DEPLOY_DIR}/compose.yaml.tpl" + compose_template="${DEPLOY_DIR}/compose.yaml.tpl" if [ "$LIVEKIT_PUBLISH" != "true" ]; then compose_template="${DEPLOY_DIR}/compose.test.yaml.tpl" fi render_template "${compose_template}" "${TARGET_DIR}/compose.yaml" \ "DOMAIN=${DOMAIN}" "FILES_DOMAIN=${FILES_DOMAIN_RESOLVED}" "INSTANCE_NAME=${INSTANCE_NAME}" \ - "PROFILE=${PROFILE_RESOLVED}" "APP_IMAGE=${APP_IMAGE}" "IMAGE_TAG=${IMAGE_TAG}" \ + "PROFILE=${PROFILE_RESOLVED}" "APP_IMAGE=${APP_IMAGE}" \ "APP_PORT=${APP_PORT}" "LIVEKIT_WS_PORT=${LIVEKIT_WS_PORT}" \ "LIVEKIT_TCP_PORT=${LIVEKIT_TCP_PORT}" "LIVEKIT_UDP_PORT=${LIVEKIT_UDP_PORT}" \ "DATA_DIR=${GLCHAT_DATA_DIR}" "LOG_LEVEL=${LOG_LEVEL}" \ @@ -617,13 +621,13 @@ render_all_templates() { "PROXY_MODE=${PROXY_MODE}" fi - local turn_external_tls="false" + turn_external_tls="false" [ "$PROXY_MODE" = "external" ] && turn_external_tls="true" - local disable_simulcast="true" + disable_simulcast="true" [ "${PROFILE_LIVEKIT_SIMULCAST:-0}" -gt 0 ] 2>/dev/null && disable_simulcast="false" PROFILE_LIVEKIT_DISABLE_SIMULCAST="$disable_simulcast" - local use_external_ip="true" + use_external_ip="true" if [ "$PROXY_MODE" = "embedded" ]; then use_external_ip="true" fi @@ -977,6 +981,7 @@ main() { check_os interactive_defaults validate_inputs + resolve_derived_values check_resources check_dns "$DOMAIN" || true check_ports_free diff --git a/deploy/lib/common.sh b/deploy/lib/common.sh index 3bf7538..e0e9e16 100644 --- a/deploy/lib/common.sh +++ b/deploy/lib/common.sh @@ -198,11 +198,11 @@ detect_profile() { render_template() { local src="$1" dst="$2" shift 2 - # Нечётное число аргументов означает, что вызов неполный: сообщаем об этом, - # но продолжаем — значения, которые всё же переданы, будут применены, - # а незаполненные плейсхолдеры видны в предупреждении ниже. + # Нечётное число аргументов означает неполный вызов: пишем в журнал + # установки, но продолжаем — реальная проверка ниже (незаполненные + # плейсхолдеры в результате рендера). if [ $(( $# % 2 )) -ne 0 ]; then - warn "render_template($(basename "$src")): нечётное число аргументов: $#" + log_file_only "render_template($(basename "$src")): нечётное число аргументов: $#" fi # export "$pair" разбирает KEY=value сам; export "${pair}" трактует всю