Files
portal/deploy/redeploy.sh
T
Дмитрий ed94d0305e fix(ops): redeploy.sh — rm старых кэшей перед optimize → config.php владелец www-data
Прежний reorder (optimize последним) владельца НЕ менял: optimize перезаписывает
существующий config.php in-place (file_put_contents не трогает владельца) → оставался
ubuntu:www-data 775 (читаемо, портал работал, но комментарий врал про www-data).
Теперь rm config/routes/events перед optimize → www-data создаёт свежие как
www-data:www-data 664. Синкнут на прод (sha совпал). Главное по квирку 107 —
читаемость (валидатор П1 test -r), владелец вторичен.

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

31 lines
2.6 KiB
Bash

#!/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)"