CLI · Winter Console

Команда run

run запускает не «сервер», а приложение целиком — всё, что объявлено атрибутами #[Enable*] на классе приложения. Веб-сервер, фоновые процессы, демоны и планировщик поднимаются одной командой и живут в одном жизненном цикле.

Рантайм SwooleРазработка run devБез веба headless

Что именно запускается

Состав определяется атрибутами — команда ничего не решает за вас:

Атрибут Что поднимется
#[EnableWeb] HTTP-сервер Swoole — главный процесс
#[EnableProcess(...)] Процесс, привязанный к жизненному циклу приложения
#[EnableDaemon(...)] Демон под супервизором
#[EnableScheduler] Планировщик задач #[Scheduled]

Если #[EnableWeb] нет, приложение поднимается headless — без HTTP, только фоновые компоненты. Это законный и частый режим: очередь, планировщик и набор обработчиков без единого открытого порта.

bash
php call run

Что объявляют эти атрибуты — на странице Состав приложения.

Режим разработки

bash
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.

В контейнере режим переключается переменной, пересобирать образ не нужно:

bash
docker compose up            # рабочий режим
DEV=true docker compose up   # разработка: наблюдатель + opcache выключен

Адрес и порт

Опция Что задаёт По умолчанию
--host= Адрес привязки 0.0.0.0
--port= Порт 8000
bash
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; специальной обвязки для этого не нужно.

Дальше