Команда run
run запускает не «сервер», а приложение целиком — всё, что объявлено
атрибутами #[Enable*] на классе приложения. Веб-сервер, фоновые
процессы, демоны и планировщик поднимаются одной командой и живут в одном
жизненном цикле.
Что именно запускается
Состав определяется атрибутами — команда ничего не решает за вас:
| Атрибут | Что поднимется |
|---|---|
#[EnableWeb] |
HTTP-сервер Swoole — главный процесс |
#[EnableProcess(...)] |
Процесс, привязанный к жизненному циклу приложения |
#[EnableDaemon(...)] |
Демон под супервизором |
#[EnableScheduler] |
Планировщик задач #[Scheduled] |
Если #[EnableWeb] нет, приложение поднимается headless — без HTTP, только
фоновые компоненты. Это законный и частый режим: очередь, планировщик и набор
обработчиков без единого открытого порта.
php call runЧто объявляют эти атрибуты — на странице Состав приложения.
Режим разработки
php call run dev
php call run -w # то же самое флагом
php call run --watcher # и опциейРазница с обычным запуском одна — включается наблюдатель: он следит за файлами проекта и перезапускает приложение при изменении, а заодно присматривает за памятью.
`dev` — это тот же Swoole
Отдельного «встроенного сервера PHP» здесь нет: и run, и run dev поднимают один
и тот же Swoole-сервер. Различается только наблюдатель.
Поэтому расширение swoole нужно и для разработки — оно ставится один раз
(pecl install swoole) или уже есть в образе, который создаёт
cfg docker.
В контейнере режим переключается переменной, пересобирать образ не нужно:
docker compose up # рабочий режим
DEV=true docker compose up # разработка: наблюдатель + opcache выключенАдрес и порт
| Опция | Что задаёт | По умолчанию |
|---|---|---|
--host= |
Адрес привязки | 0.0.0.0 |
--port= |
Порт | 8000 |
php call run --port=9000
php call run dev --host=127.0.0.1 --port=9000 # только локально0.0.0.0 означает «на всех интерфейсах» — так контейнер виден снаружи. Для
локальной разработки, когда сервер не должен быть доступен по сети, задавайте
--host=127.0.0.1 явно.
Остальные параметры сервера — не флаги
Число воркеров, лимиты запросов, таймауты и память задаются не в командной
строке: они живут в переменных SERVER_* и в классе-конфигураторе веб-слоя.
Так они одинаковы во всех способах запуска — из терминала, из compose, из supervisor, — и не теряются при копировании команды. См. Настройка веб-слоя и Конфигурация.
При старте
Перед первым запросом происходит обход проекта, сборка контейнера и построение
таблицы маршрутов; затем печатается баннер с составом приложения и адресом. Убрать
баннер — WINTER_BANNER=off.
Дальше мастер-процесс порождает воркеров. Что именно вы увидите в ps и кто из
процессов чем занят — разобрано в Обзоре консоли и
в Ключевых понятиях.
Остановка
Ctrl+C или SIGTERM — Swoole завершает воркеров корректно, дав им доработать
текущие запросы. В контейнере сигнал приходит прямо мастеру, потому что он PID 1;
специальной обвязки для этого не нужно.
Дальше
- Состав приложения — атрибуты
#[Enable*] - Настройка веб-слоя — воркеры, таймауты, лимиты
- Установка — первый запуск
- cfg docker — образ и режимы запуска