Введение

Часть 9

Хостинг — это система: сначала установите факты, потом что-то меняйте

Проблема хостинга часто выглядит как «сломался скрипт», хотя настоящая причина — версия PHP, отсутствующее расширение, закончившееся место, права, сеть или почтовый транспорт. Работать в терминале спокойнее, когда сначала описываешь машину, которая существует на самом деле.

Один и тот же проект может вести себя по-разному на разных хостингах

Файлы могут быть одинаковыми, а среда выполнения — нет. Версия PHP, загруженные расширения, ограничения файловой системы, владелец, права, время, сетевой доступ и политика сервера влияют на то, что приложение вообще способно сделать.

Поэтому первый полезный вопрос — не «что мне изменить?», а «в каком окружении это выполняется?». Терминал хорош тем, что превращает расплывчатое «окружение» в факты, которые можно посмотреть.

Начните с одного экрана фактов

core показывает текущий lil Core, PHP, слой интерфейса, файл расширений, обновления, активный файл и каталог. doctor -q даёт короткую картину состояния, а sys host и sys uptime описывают сам хост и время его работы.

Нормальная сводка не доказывает, что приложение здорово. Это исходный снимок — быстрый способ заметить, что машина, Core или среда выполнения не те, которые вы ожидали увидеть, прежде чем уходить в глубокую диагностику.

core
doctor -q
sys host
sys uptime

Возможность PHP существует только тогда, когда её действительно предоставляет текущая среда выполнения

php version, php modules и doctor extensions прямо отвечают на вопрос о возможностях. IMAP, SQLite, GD или нужная криптографическая функция могут быть на одном тарифе хостинга и отсутствовать на другом.

Отсутствующая возможность — не то же самое, что неправильная команда. Лучше получить ясную ошибку о недоступной возможности, чем строить случайные обходы: сначала проверьте расширение PHP, затем решайте — включить его, выбрать другой инструмент или перенести задачу.

php version
php modules
php info memory -c
doctor extensions

Свободное место, объём каталога и права — три разных вопроса

disk . показывает ёмкость файловой системы; disk . -r специально обходит текущее дерево и считает его объём. stat говорит, чем путь является на самом деле. Права — ещё один слой: файл может существовать и место может быть свободным, но PHP всё равно не сможет читать или писать.

Не «чините права», делая всё доступным для записи. Посмотрите владельца и режим, измените только минимально необходимую цель и снова проверьте. Права доступа — локальная граница, а не замена авторизации или шифрования.

disk .
disk . -r
stat .

Читайте журналы до удаления, перезапуска и догадок

log -l находит вероятные журналы. Когда нужный файл известен, ограниченное чтение начала или конца и буквальный фильтр позволяют посмотреть свежие записи, не загружая огромный журнал целиком в браузер.

Полезная строка журнала содержит контекст: время, компонент, запрос или операцию и реальную ошибку. Сохраните этот контекст до очистки. Многие сложные инциденты становятся понятнее, когда можно точно сказать, когда начался сбой и что менялось рядом с этим моментом.

log -l

Окружение и почта — отдельные подсистемы, которые стоит проверять явно

env показывает значения окружения, сервера и текущего запроса в читаемом виде, маскируя чувствительные имена. Так можно, например, узнать, какой временный каталог или адрес сервера видит PHP, не выгружая вслепую всё окружение процесса.

mail имеет собственный диагностический набор: локальная отправка почты через PHP и подключение по IMAP — не одно и то же. Сайт может прекрасно открываться, пока исходящая почта отвергается, а IMAP может быть недоступен просто из-за отсутствующего расширения PHP. Проверяйте именно ту подсистему, от которой зависите.

env server SERVER_ADDR
env TMP
mail

Сохраните исходный снимок до исправления

Перед изменением настроек PHP, модулей, прав доступа или конфигурации хостинга перенаправьте короткие отчёты в каталог diagnostics/. После изменения соберите те же отчёты снова и сравните факты вместо ощущения «теперь вроде лучше».

Эта привычка работает далеко за пределами lil-terminal. В Linux, macOS, Windows, контейнерах и панелях управления хорошая диагностика устроена одинаково: определить окружение, выделить слой, собрать факты, изменить одну вещь и проверить результат.

md diagnostics
doctor -j > diagnostics/doctor.json -r
sys > diagnostics/system.txt -r
php version > diagnostics/php.txt -r

Сохраните это как сценарий

Сохраните это как hosting-baseline.lil. Сценарий собирает компактный снимок диагностики в diagnostics/, не меняя данные приложения. Сохраняйте снимки до и после изменения хостинга: сравнение почти всегда полезнее памяти.

#lil
@install md doctor sys php disk log env
md diagnostics
core > diagnostics/core.txt -r
doctor -q > diagnostics/doctor.txt -r
sys > diagnostics/system.txt -r
php version > diagnostics/php.txt -r
disk . > diagnostics/disk.txt -r
log -l > diagnostics/logs.txt -r
env server SERVER_ADDR > diagnostics/server.txt -r