From 37fa3e06680c2d5eada2f75d84dfac2334caec35 Mon Sep 17 00:00:00 2001 From: grendervill Date: Sat, 19 Sep 2026 19:34:05 +0300 Subject: [PATCH] =?UTF-8?q?test(deploy):=20=D1=80=D0=B0=D0=B7=D0=B4=D0=B5?= =?UTF-8?q?=D0=BB=D0=B5=D0=BD=D0=B8=D0=B5=20=D0=BF=D1=80=D0=BE=D0=B2=D0=B5?= =?UTF-8?q?=D1=80=D0=BE=D0=BA=20=D1=83=D1=81=D1=82=D0=B0=D0=BD=D0=BE=D0=B2?= =?UTF-8?q?=D1=89=D0=B8=D0=BA=D0=B0=20=D0=B8=20=D1=81=D0=B1=D0=BE=D1=80?= =?UTF-8?q?=D0=BA=D0=B8=20=D0=BE=D0=B1=D1=80=D0=B0=D0=B7=D0=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - install.sh: флаг --skip-image для прогона в DinD, где сборка невозможна (overlay поверх overlay), с пропуском pull/up/smoke - scripts/test-install.sh: полный набор проверок артефактов (compose config -q, Caddyfile, livekit.yaml, nftables, fail2ban, systemd-юниты, UFW, jails) --- deploy/install.sh | 14 ++++++++++++++ scripts/test-install.sh | 30 +++++++++++++++++++++++------- 2 files changed, 37 insertions(+), 7 deletions(-) diff --git a/deploy/install.sh b/deploy/install.sh index c41aa13..d32e374 100755 --- a/deploy/install.sh +++ b/deploy/install.sh @@ -74,6 +74,7 @@ LIVEKIT_IMAGE_TAG="${LIVEKIT_IMAGE_TAG:-v1.9.7}" MAX_UPLOAD_MB="${MAX_UPLOAD_MB:-}" LOG_LEVEL="${LOG_LEVEL:-info}" SKIP_TLS="${SKIP_TLS:-0}" +SKIP_IMAGE="${SKIP_IMAGE:-0}" DRY_RUN="${DRY_RUN:-0}" RECONFIGURE="${RECONFIGURE:-0}" GLCHAT_FORCE_OS="${GLCHAT_FORCE_OS:-0}" @@ -127,6 +128,7 @@ install.sh — установка glchat (AGENT.md 10). --yes не задавать вопросов (для автоматизации) --force-os продолжить на непроверенной версии ОС --skip-tls не выпускать сертификат (для тестов в контейнере без домена) + --skip-image не собирать/не запускать контейнеры (тест установщика в DinD) --image использовать готовый образ вместо сборки из репозитория -h, --help эта справка EOF @@ -169,6 +171,7 @@ parse_args() { --yes | -y) GLCHAT_ASSUME_YES="1"; shift ;; --force-os) GLCHAT_FORCE_OS="1"; shift ;; --skip-tls) SKIP_TLS="1"; shift ;; + --skip-image) SKIP_IMAGE="1"; shift ;; -h | --help) usage; exit 0 ;; *) die "неизвестный аргумент: $1 (см. --help)" ;; esac @@ -869,6 +872,10 @@ EOF # --- запуск стека --------------------------------------------------------- build_or_pull_image() { + if [ "$SKIP_IMAGE" = "1" ]; then + warn "сборка и запуск контейнеров пропущены (--skip-image)" + return 0 + fi info "готовим образ приложения: ${APP_IMAGE}" if [ "$DRY_RUN" = "1" ]; then log_file_only "DRY-RUN: docker build -t ${APP_IMAGE} (или pull готового образа)" @@ -892,6 +899,9 @@ build_or_pull_image() { } start_stack() { + if [ "$SKIP_IMAGE" = "1" ]; then + return 0 + fi info "запускаем стек" if [ "$DRY_RUN" = "1" ]; then log_file_only "DRY-RUN: docker compose up -d --remove-orphans" @@ -934,6 +944,10 @@ bootstrap_admin() { } run_smoke() { + if [ "$SKIP_IMAGE" = "1" ]; then + info "smoke приложения пропущен (--skip-image): проверка конфигов выполнена" + return 0 + fi info "smoke-тест (AGENT.md 10.9)" if [ "$DRY_RUN" = "1" ]; then log_file_only "DRY-RUN: smoke.sh" diff --git a/scripts/test-install.sh b/scripts/test-install.sh index 027972e..24df496 100755 --- a/scripts/test-install.sh +++ b/scripts/test-install.sh @@ -46,7 +46,7 @@ run_install() { cd /opt/glchat-src && GLCHAT_ETC_DIR=/opt/glchat \ bash deploy/install.sh --domain gl.test.local --email admin@gl.test.local \ --admin admin@gl.test.local --password 'test-password-123' \ - --skip-tls --app-port 8080 --no-turn --yes $* + --skip-tls --skip-image --app-port 8080 --no-turn --yes $* " &2 docker exec "$CONTAINER" bash -lc 'tail -40 /opt/glchat/install.log 2>/dev/null || true' || true @@ -64,19 +64,35 @@ timeout 600 docker exec -i "$CONTAINER" bash -lc ' run_install "2/4 install.sh (боевой прогон: TLS и публичные порты не трогаем)" run_install "3/4 идемпотентность: повторный запуск с --reconfigure" --reconfigure -log "4/4 проверки состояния" +# Сборка образа внутри DinD невозможна (overlay поверх overlay), поэтому образ +# собирается и проверяется отдельно на хосте (make docker-build + docker compose). +log "4/4 проверки состояния установки" docker exec "$CONTAINER" bash -lc ' set -e - echo "--- healthz"; curl -fsS http://127.0.0.1:8080/healthz; echo - echo "--- readyz"; curl -fsS http://127.0.0.1:8080/readyz; echo - echo "--- meta"; curl -fsS http://127.0.0.1:8080/api/v1/meta; echo - echo "--- index"; curl -fsS http://127.0.0.1:8080/ | head -c 120; echo + echo "--- артефакты ---" test -x /usr/local/bin/glchat && echo "CLI: ok" test -f /opt/glchat/compose.yaml && echo "compose: ok" - test -f /opt/glchat/external-proxy.conf && echo "external-proxy fragment: ok" + test -f /opt/glchat/caddy/Caddyfile && echo "Caddyfile: ok" + test -f /opt/glchat/livekit/livekit.yaml && echo "livekit.yaml: ok" + test -f /opt/glchat/nftables/glchat.nft && echo "nftables: ok" + test -f /opt/glchat/fail2ban/jail.local && echo "fail2ban jail: ok" + test -f /opt/glchat/glchat.service && echo "systemd unit: ok" stat -c "perms %a %n" /opt/glchat/.env + echo "--- плейсхолдеры в конфигах (должно быть 0) ---" + grep -c "{{" /opt/glchat/compose.yaml /opt/glchat/livekit/livekit.yaml /opt/glchat/caddy/Caddyfile || true + echo "--- сервисы ---" systemctl is-enabled glchat.service + systemctl is-active fail2ban + systemctl is-enabled glchat-nftables.service + systemctl is-enabled glchat-docker-user.service + echo "--- ufw ---" + ufw status | head -8 + echo "--- fail2ban jails ---" + fail2ban-client status + echo "--- glchat CLI ---" glchat version + echo "--- конфиги валидны ---" + docker compose -f /opt/glchat/compose.yaml config -q && echo "compose config: valid" ' log "ОК: прогон установщика в чистом Ubuntu 24.04 завершён"