# Linux, VPS и CI

PHPStan запускается на рабочей машине или в CI; постоянная служба на VPS ему не нужна. Продакшен должен получать подготовленный код после проверок. Если анализ выполняется на сервере, выделите отдельный каталог и непривилегированного пользователя. Не принимайте произвольные файлы посетителей для анализа в процессе веб-сайта.

## Установка

Установите поддерживаемый PHP CLI и Composer из официального источника своего окружения. Проверьте `php -v`, `php --ini`, `composer check-platform-reqs`. Не смешивайте версию исполняющего PHP с `phpVersion` анализатора. Целевая версия проекта закреплена 80200; на вашем сервере она должна соответствовать договорённостям приложения.

```bash
composer install --no-interaction --no-plugins --no-scripts
php vendor/bin/phpstan --version
php bin/ci.php
```

Для рабочего проекта замените список исправленных учебных файлов в ci.php на свои src/tests. Автозагрузку настройте через Composer, а неизвестные символы сначала разберите как проблему конфигурации. Не исключайте vendor-классы из понимания анализатора: не нужно анализировать их как собственные файлы, но Composer должен их находить.

## Пример шага CI

```bash
set -eu
composer install --no-interaction --no-plugins --no-scripts
php vendor/bin/phpstan analyse --configuration=phpstan.neon --level=9 --no-progress --error-format=json src > phpstan-result.json
```

Здесь src обозначает ваш реальный проект. JSON сохраняется и при ненулевом exit; публикация артефакта отчёта настраивается в CI с условием always. Не добавляйте `|| true`, иначе ошибка перестанет останавливать выпуск. Для этой лаборатории используйте `php bin/ci.php`, а не широкую команду над намеренно нетипизированным служебным Runner и before-фикстурами.

Composer install для анализа должен включать require-dev. Для финального пакета production можно отдельно выполнить install --no-dev, когда проверки уже завершены. Кеш PHPStan хранится в var/phpstan-cache и не публикуется на веб-сервер. Ключ кеша учитывайте вместе с PHP, lock-файлом, конфигурацией и правилами инструмента; кеш не заменяет проверку актуального изменения.

## Baseline

Генерация baseline — действие автора изменения, которое проходит review. Обычный CI должен только читать этот файл. Иначе новый дефект может быть автоматически принят в список игнорирования. Проверяйте путь, identifier и count; не заменяйте точную запись на широкое регулярное выражение для всей кодовой базы.

После исправления старого участка сократите соответствующую запись. При обновлении PHPStan перечитайте новые диагностики и повторите runtime-тесты. Отсутствие сообщений статического анализа не доказывает, что база доступна, операция авторизована или письмо корректно отправлено. Внешний VPS, пайплайн и бизнес-тесты лаборатория не разворачивает за вас.
