Symfony CLI

Дата обновления перевода 2025-09-30

Symfony CLI

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

  • Веб-сервер, оптимизированный для разработки, с поддержкой HTTPS
  • Интеграция с Docker и автоматическое управление переменными окружения
  • Управление несколькими версиями PHP
  • Поддержка фоновых работников
  • Бесперебойная интеграция с Symfony Cloud

Установка

CLI Symfony доступен как отдельный исполняемый файл, поддерживающий Linux, macOS и Windows. Загрузите и установите его, следуя инструкциям на symfony.com/download.

Автозавершение оболочки

CLI Symfony поддерживает автозавершение для оболочек Bash, Zsh и Fish. Это помогает вам быстрее вводить команды и находить доступные опции:

1
2
3
4
5
6
7
8
# установить автозавершение (сделайте это единожды)
$ symfony completion bash | sudo tee /etc/bash_completion.d/symfony

# для пользователей Zsh
$ symfony completion zsh > ~/.symfony_completion && echo "source ~/.symfony_completion" >> ~/.zshrc

# для пользователей Fish
$ symfony completion fish | source

После установки перезапустите терминал, чтобы включить автозавершение. CLI также будет обеспечивать автозавершение для команд composer и console, когда будет обнаруживать проект Symfony.

Создание новых приложений Symfony

CLI Symfony включает в себя команду создания проекта, которая помогает вам быстро
начинать новые проекты:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
# создать новый проект Symfony, основанный на последней стабильной версии
$ symfony new my_project

# создать проект с последней версией LTS (долгосрочной поддержки)
$ symfony new my_project --version=lts

# создать проект, основанный на конкретной версии Symfony
$ symfony new my_project --version=6.4

# создать проект, используя версию разработки
$ symfony new my_project --version=next

# все предыдущие команды создають минимальний проект с наименьшим возможными
# количеством зависимостей; если вы создаете веб-сайт или веб-приложение, добавьте
# эту опцию, чтобы установить все распространенные зависимости
$ symfony new my_project --webapp

# Создать проект, основанный на приложении Symfony Demo
$ symfony new my_project --demo

Tip

Передайте опцию --cloud, чтобы инициализировать проект Symfony Cloud одновременно с созданием проекта Symfony.

Запуск локального веб-сервера

CLI Symfony включает в себя локальный веб-сервер, предназначенный для разработки. Он не предназначен для использования в производстве, но предоставляет функции, которые улучшают опыт разработчика:

  • Поддержка HTTPS с автоматической генерацией сертификатов
  • Поддержка HTTP/2
  • Автоматический выбор версии PHP
  • Интеграция с сервисами Docker
  • Встроенный прокси для пользовательских доменных имен

Обслуживание вашего приложения

Чтобы обслуживать проект Symfony с помощью локального сервера:

1
2
3
4
5
$ cd my-project/
$ symfony server:start

  [OK] Web server listening on http://127.0.0.1:8000
  ...

Теперь перейдите по указанному URL-адресу или выполните следующую команду, чтобы открыть
его в браузере:

1
$ symfony open:local

Tip

Если вы работаете над несколькими проектами, вы можете запустить несколько экземпляров сервера Symfony на вашей машине для разработки. Каждый экземпляр найдет отдельный доступный порт.

Команда server:start блокирует текущий терминал для вывода логов сервера. Чтобы
запустить сервер в фоновом режиме:

1
$ symfony server:start -d

Теперь вы можете продолжить работать в терминале и выполнять другие команды:

1
2
3
4
5
# просмотреть последние сообщения логов
$ symfony server:log

# остановить фоновый сервер
$ symfony server:stop

Tip

В macOS при запуске сервера Symfony вы можете увидеть предупреждающее диалоговое
окно «Хотите ли вы, чтобы приложение принимало входящие сетевые соединения?».
Это происходит при запуске неподписанных приложений, которые не указаны в списке брандмауэра. Решением является выполнение этой команды для подписания Symfony CLI:

1
$ sudo codesign --force --deep --sign - $(whereis -q symfony)

Включение PHP-FPM

Note

PHP-FPM должен быть установлен локально для использования сервером Symfony.

Когда сервер запускается, он проверяет наличие файлов web/index_dev.php,
web/index.php, public/app_dev.php, public/app.php в указанном порядке.
Если один из них найден, сервер автоматически запустится с включенным PHP-FPM. В
другом случае сервер запустится без PHP-FPM и покажет страницу Page not found
при попытке получить доступ к файлу .php в браузере.

Tip

Когда присутствуют как index.html, так и фронт-контроллер (например, index.php), сервер все равно запустится с включенным PHP-FPM, но index.html будет иметь приоритет.
Это означает, что если файл index.html присутствует в public/ или web/, он будет
отображаться вместо index.php, который в противном случае показывал бы, например,
приложение Symfony.

Включение HTTPS/TLS

Запуск вашего приложения через HTTPS локально помогает выявить проблемы со смешанным
содержанием на ранней стадии и позволяет использовать функции, требующие безопасных
соединений. Традиционно это было болезненным и сложным в настройке, но сервер Symfony
автоматизирует все за вас:

1
2
3
4
5
# установить авторитет сертификата (выполните это единожды на вашей машине)
$ symfony server:ca:install

# теперь запустите (или перезапустите) ваш сервер; он автоматически будет использовать HTTPS
$ symfony server:start

Tip

Для WSL (Windows Subsystem для Linux) новосозданный локальный авторитет сертификата необходимо импортировать вручную:

1
$ explorer.exe `wslpath -w $HOME/.symfony5/certs`

В открывшемся окне проводника файлов дважды щелкните по файлу с именем default.p12.

Управление PHP

Symfony CLI предоставляет функции управления PHP, что позволяет вам использовать различные версии PHP и/или настройки для разных проектов.

Вибор версии PHP

Если на вашем компьютере установлено несколько версий PHP, вы можете указать Symfony, какую из них использовать, создав файл с именем .php-version
в корневом каталоге проекта:

1
2
3
4
5
6
7
$ cd my-project/

# использовать конкретную версию PHP
$ echo 8.2 > .php-version

# использовать любую доступную версию PHP 8.x 
$ echo 8 > .php-version

Для того, чтобы увидеть все доступные версии PHP:

1
$ symfony local:php:list

Tip

Вы можете создать файл .php-version в родительском каталоге, чтобы установить одну и ту же версию PHP для нескольких проектов.

Пользовательская конфигурация PHP

Переопределите настройки PHP для каждого проекта, создав файл php.ini в
корневом каталоге проекта:

1
2
3
4
5
6
; php.ini
[Date]
date.timezone = Asia/Tokyo

[PHP]
memory_limit = 256M

Использование команд PHP

Используйте symfony php, чтобы убедиться, что команды выполняются с правильной
версией PHP:

1
2
3
4
5
6
7
8
# запускается с PHP системой по умолчанию
$ php -v

# запускается с версией PHP проекта
$ symfony php -v

# это также работает для Composer
$ symfony composer install

Имена локальных доменов

По умолчанию проекты доступны по случайному порту в локальном IP-адресе
127.0.0.1. Однако иногда лучше ассоциировать с ними имя домена (например,
my-app.wip):

  • это удобнее при постоянной работе над одним и тем же проектом, поскольку номера портов могут меняться, а домены - нет;
  • поведение некоторых приложений зависит от их доменов/поддоменов;
  • для обеспечения стабильных конечных точек, таких как локальный URL перенаправления
    для OAuth2.

Установка локального прокси

Symfony CLI включает в себя прокси, который позволяет использовать пользовательские
локальные домены. При первом использовании вы должны настроить его следующим образом:

  1. Откройте настройки прокси вашей операционной системы:

  2. Установите следующий URL как значение Конфигурации автоматического прокси:

    http://127.0.0.1:7080/proxy.pac

Теперь выполните эту команду, чтобы запустить прокси:

1
$ symfony proxy:start

Если прокси не работает, как объясняется в следующих разделах, проверьте следующее:

  • Некоторые браузеры (например, Chrome) требуют повторного применения настроек прокси
    (нажав кнопку Re-apply settings на странице chrome://net-internals/#proxy) или полного перезапуска после запуска прокси. В противном случае вы увидите ошибку «Эта веб-страница недоступна» (ERR_NAME_NOT_RESOLVED);
  • Некоторые операционные системы (например, macOS) по умолчанию не применяют настройки
    прокси к локальным хостам и доменам. Возможно, вам придется удалить *.local и/или
    другие IP-адреса из списка.
  • Windows требует использования localhost вместо 127.0.0.1 при настройке автоматического прокси, иначе вы не сможете получить доступ к своему локальному домену из
    браузера, работающего в Windows.

Определение локального домена

По умолчанию Symfony использует .wip (для В процессе разработки) в качестве
локального TLD для пользовательских доменов. Вы можете определить локальный домен для ваших проектов следующим образом:

1
2
$ cd my-project/
$ symfony proxy:domain:attach my-app

Ваше приложение теперь доступно по адресу https://my-app.wip

Tip

Перегляньте всі локальні домени та їх конфігурацію за адресою http://127.0.0.1:7080

Ви також можете використовувати підстановочні знаки:

1
$ symfony proxy:domain:attach "*.my-app"

Это позволяет получать доступ к поддоменам типа https://api.my-app.wip
или https://admin.my-app.wip.

При выполнении консольных команд установите переменную окружения https_proxy, чтобы заставить пользовательские домены работать:

1
2
3
4
5
6
7
8
# пример с cURL
$ https_proxy=$(symfony proxy:url) curl https://my-domain.wip

# пример с Blackfire и cURL
$ https_proxy=$(symfony proxy:url) blackfire curl https://my-domain.wip

# пример с Cypress
$ https_proxy=$(symfony proxy:url) ./node_modules/bin/cypress open

Warning

Хотя имена переменных окружения обычно пишутся в верхнем регистре, переменная
https_proxy обрабатывается по-другому и должна быть написана в нижнем.

Tip

Если вы хотите использовать другой TLD, отредактируйте файл ~/.symfony5/proxy.json (где ~ означает путь к вашему каталогу пользователя) и измените значение опции
tld с wip на любой другой TLD.

Интеграция с Docker

Symfony CLI обеспечивает полную интеграцию с Docker для проектов, которые его используют. Чтобы узнать больше о Docker и Symfony, смотрите Использование Docker с Symfony. Локальный сервер автоматически обнаруживает сервисы Docker и раскрывает их информацию
о соединении как переменные окружения.

Автоматическое обнаружение сервисов

С этим compose.yaml:

1
2
3
4
services:
    database:
        image: mysql:8
        ports: [3306]

Веб-сервер обнаруживает, что для проекта работает сервис, который раскрывает порт 3306. Он понимает, что это сервис MySQL, и создает соответствующие переменные окружения, используя имя сервиса (database) в качестве префикса:

  • DATABASE_URL
  • DATABASE_HOST
  • DATABASE_PORT

Вот полный список поддерживаемых сервисов с их портами и префиксами Symfony по умолчанию:

?????? ???? ??????? Symfony ?? ?????????
MySQL 3306 DATABASE_
PostgreSQL 5432 DATABASE_
Redis 6379 REDIS_
Memcached 11211 MEMCACHED_
RabbitMQ 5672 RABBITMQ_ (?????????? ???????????? ? ????????? ????? Docker ?????????? ????????? RABBITMQ_DEFAULT_USER ? RABBITMQ_DEFAULT_PASS)
Elasticsearch 9200 ELASTICSEARCH_
MongoDB 27017 MONGODB_ (?????????? ???? ?????? ? ????????? ????? Docker ?????????? ????????? MONGO_DATABASE)
Kafka 9092 KAFKA_
MailCatcher 1025/1080 or 25/80 MAILER_
Blackfire 8707 BLACKFIRE_
Mercure 80 ?????? ?????????? MERCURE_PUBLIC_URL ? MERCURE_URL (???????? ?????? ? ???????????? Docker dunglas/mercure)

Если сервис не поддерживается, устанавливаются общие переменные окружения: PORT, IP и HOST.

Вы можете открыть веб-интерфейсы управления для сервисов, которые их раскрывают, нажав на ссылку в разделе "Сервер" веб-панели инструментов отладки, или выполнив
следующие команды:

1
2
$ symfony open:local:webmail
$ symfony open:local:rabbitmq

Tip

Чтобы отдадить и перечислить все экспортированные переменные окружения, выполните: symfony var:export --debug.

Tip

Для некоторых сервисов локальный веб-сервер также раскрывает переменные окружения, которые понимают инструменты CLI, связанные с этим сервисом. Например, запуск symfony run psql автоматически подключит вас к серверу PostgreSQL, работающему в контейнере, без необходимости указывать имя пользователя, пароль или название базы данных.

Когда сервисы Docker работают, перейдите на страницу вашего приложения Symfony и проверьте раздел "Symfony Server" на панели инструментов веб-отладки. Вы увидите,
что "Docker Compose" обозначен как "Up".

Note

Если вы не хотите, чтобы переменные окружения раскрывались для сервиса, установите ярлык com.symfony.server.service-ignore как true:

1
2
3
4
5
6
# compose.yaml
services:
    db:
        ports: [3306]
        labels:
            com.symfony.server.service-ignore: true

Если ваш файл Docker Compose не находится в корне проекта, используйте переменные окружения COMPOSE_FILE и COMPOSE_PROJECT_NAME, чтобы определить его расположение, так же как для docker-compose:

1
2
3
4
5
# запустить ваши контейнеры:
COMPOSE_FILE=docker/compose.yaml COMPOSE_PROJECT_NAME=project_name docker-compose up -d

# выполнить любую команду Symfony CLI:
COMPOSE_FILE=docker/compose.yaml COMPOSE_PROJECT_NAME=project_name symfony var:export

Note

Если у вас более одного файла Docker Compose, вы можете указать их все, разделив символом :, как описано в Справочнике по переменным окружения Docker Compose CLI.

Warning

При использовании Symfony CLI с php bin/console (symfony console ...), вы всегда будете использовать переменные окружения, обнаруженные через Docker, игнорируя любые локальные переменные окружения. Например, если вы настроили другое название базы данных в вашем файле .env.test (DATABASE_URL=mysql://db_user:db_password@127.0.0.1:3306/test) и запустите symfony console doctrine:database:drop --force --env=test, команда удалит базу данных, определенную в вашей конфигурации Docker, а не базу данных "test".

Warning

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

Именование сервисов

Если ваши имена сервисов не совпадают с соглашениями Symfony, используйте ярлыки:

1
2
3
4
5
6
services:
    db:
        image: postgres:15
        ports: [5432]
        labels:
            com.symfony.server.service-prefix: 'DATABASE'

В этом примере сервис называется db, поэтому переменные окружения будут иметь префикс DB_, но поскольку com.symfony.server.service-prefix установлен как
DATABASE, веб-сервер создает переменные окружения, которые вместо этого начинаются с DATABASE_, как и предусмотрено конфигурацией Symfony по умолчанию.

Управление долгосрочными процессами

Используйте команду run, предоставляемую Symfony CLI, для управления долгосрочными процессами, такими как наблюдатели Webpack:

1
2
3
4
5
6
7
8
9
10
# запустить наблюдателя webpack фоново, чтобы не блокировать треминал
$ symfony run -d npx encore dev --watch

# продолжать работать и выполнять другие команды...

# просмотреть логи
$ symfony server:log

# проверить статус
$ symfony server:status

Конфигурирование работников

Определите процессы, которые должны запускаться автоматически с сервером, в .symfony.local.yaml:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
# .symfony.local.yaml
workers:
    # Встроенная интеграция с Encore
    npm_encore_watch: ~

    # Потребитель Messenger с наблюдением файлов
    messenger_consume_async:
        cmd: ['symfony', 'console', 'messenger:consume', 'async']
        watch: ['config', 'src', 'templates', 'vendor']

    # Пользовательские команды
    build_spa:
        cmd: ['npm', 'run', 'watch']

    # Автоматически запустить Docker Compose
    docker_compose: ~

Продвинутая конфигурация

Файл .symfony.local.yaml предоставляет продвинутые опции конфигурации:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
# установить app.wip и admin.app.wip для текущего проекта
proxy:
    domains:
        - app
        - admin.app

# настройки HTTP-сервера
http:
    document_root: public/
    passthru: index.php
    # форсирует порт, который будет использован для запуска сервера
    port: 8000
    # устанаваливает HTTP-порт, который вы хотите для этого проекта [default: 8000]
    # (будет использован только если доступен; иначе будет выбран рандомный порт)
    preferred_port: 8001
    # используется для отключения автоматического перенаправления по умолчанию с HTTP на HTTPS
    allow_http: true
    # форсировать использование HTTP вместо HTTPS
    no_tls: false
    # путь к файлу, который содержит TLS сертификат для использования в формате p12
    p12: path/to/custom-cert.p12
    # включить/выключить сжатие GZIP
    use_gzip: true
    # запустить сервер фоново
    daemon: true

Warning

Установка доменов в этом файле конфигурации переопределит любые домены, которые вы
установили с помощью команды proxy:domain:attach для текущего проекта во время
запуска сервера.

Интеграция с Symfony Cloud

Symfony CLI предоставляет безупречную интеграцию с Symfony Cloud (на базе Platform.sh):

1
2
3
4
5
6
7
8
# открыть веб-UI Platform.sh
$ symfony cloud:web

# развернуть ваш проект в производство
$ symfony cloud:deploy

# создать новое окружение
$ symfony cloud:env:create feature-xyz

Чтобы увидеть больше функций, см. Документацию Symfony Cloud.

Устранение неполадок

Сервер не запускается: Проверьте, не используется ли порт:

1
2
$ symfony server:status
$ symfony server:stop  # Если сервер уже работает

HTTPS не работает: Убедитесь, что установлен CA:

1
$ symfony server:ca:install

Сервисы Docker не обнаружены: Убедитесь, что Docker запущен, и что переменные окружения раскрыты правильным образом:

1
2
$ docker compose ps
$ symfony var:export --debug

Домены прокси не работают:

  • Очистите кэш вашего браузера
  • Проверьте настройки прокси в вашей системе
  • Для Chrome, зайдите на chrome://net-internals/#proxy и нажмите "Повторно применить настройки"