#!/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 # Квирк 107 (config.php): РЕАЛЬНО важна ЧИТАЕМОСТЬ www-data, а не владелец — # `ubuntu:www-data 775` тоже читаем группой и портал работает (валидатор П1 проверяет # именно `test -r`). Для чистоты делаем владельца www-data: rm старых кэшей + optimize # ПОСЛЕДНИМ под www-data. Важно: optimize перезаписывает существующий config.php # in-place (file_put_contents НЕ меняет владельца), поэтому без rm файл остаётся # ubuntu — отсюда и удаление перед пересборкой. dir bootstrap/cache 775 (группа # www-data) → www-data создаёт свежие config/routes/events/views как www-data:www-data. sudo rm -f bootstrap/cache/config.php bootstrap/cache/routes-v7.php bootstrap/cache/events.php sudo -u www-data php artisan optimize sudo systemctl restart php8.3-fpm liderra-queue echo "Redeploy done at $(date -u +%FT%TZ)"