Files
portal/deploy/redeploy.sh
T
Дмитрий c370ff8248
Accessibility (Pa11y live) / a11y (push) Waiting to run
fix(ops): закрыть повтор квирка 107 — optimize последним в redeploy + валидатор проверяет читаемость
Проверено на боевом 25.06: config.php = ubuntu:www-data mode 775, www-data ЧИТАЕТ его
через группу, портал HTTP 200 — реального дефекта НЕТ. Квирк «лечили» несколько раз,
гонясь за строгой проверкой «владелец == www-data», тогда как важна читаемость.

Две первопричины повтора закрыты:
1. deploy/redeploy.sh: optimize перенесён в КОНЕЦ (после chown -R ubuntu:www-data
   bootstrap/cache). Раньше optimize шёл ДО chown'а → chown переписывал владельца
   свежего config.php обратно на ubuntu. Теперь кэши пишутся после chown и остаются
   www-data:www-data.
2. .claude/agents/prod-deploy-validator.md П1: критерий сменён на ЧИТАЕМОСТЬ www-data
   (sudo -u www-data test -r config.php) вместо строгого владельца. Владелец ubuntu при
   группе www-data+775 больше НЕ даёт ложный NO-GO. Свежесть (mtime ≥ .env, квирк 104)
   сохранена. Описание квирка 107 и формат рапорта обновлены.

Прод не трогали — он здоров. После следующего redeploy config.php станет www-data-owned.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-25 09:07:24 +03:00

28 lines
2.2 KiB
Bash
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
#!/usr/bin/env bash
# Лидерра тест-сервер — применить обновление (server-side половина).
# ПЕРЕД запуском: с dev-машины залить новый код (git archive app db) + сборку
# (app/public/build) через scp. Затем на сервере: bash /var/www/liderra/redeploy.sh
set -euo pipefail
cd /var/www/liderra/app
# vendor/ принадлежит www-data, а скрипт бежит от ubuntu → composer install от
# ubuntu падает "autoload_classmap.php: Permission denied" и (из-за set -e) рвёт
# деплой ДО кэшей/рестарта → прод 500. Инцидент 23.06.2026. Поэтому composer
# запускаем от root (COMPOSER_ALLOW_SUPERUSER) и возвращаем владельца vendor www-data.
sudo env COMPOSER_ALLOW_SUPERUSER=1 composer install --optimize-autoloader --no-interaction --no-scripts --ignore-platform-req=ext-redis
sudo chown -R www-data:www-data vendor
# NB: миграции crm_migrator-owned таблиц (напр. saas_transactions) штатной .env-ролью
# НЕ применяются ("must be owner") — применять ВРУЧНУЮ под `sudo -u postgres` ДО запуска
# скрипта + INSERT в migrations, тогда строка ниже = no-op. Иначе set -e порвёт деплой.
php artisan migrate --force
sudo chmod -R a+rX public/build
sudo chown -R ubuntu:www-data storage bootstrap/cache
sudo chmod -R 775 storage bootstrap/cache
# optimize ПОСЛЕДНИМ под www-data: до 25.06 он стоял ДО chown'а выше, и chown -R
# на bootstrap/cache переписывал владельца свежесозданного config.php обратно на
# ubuntu (квирк 107 «лечили» зря несколько раз). Теперь optimize пишет кэши
# (config/route/event/view) ПОСЛЕ chown — они остаются www-data:www-data.
# (Портал работал и так — www-data читал config.php через группу+775 — но так чище.)
sudo -u www-data php artisan optimize
sudo systemctl restart php8.3-fpm liderra-queue
echo "Redeploy done at $(date -u +%FT%TZ)"