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 включает в себя прокси, который позволяет использовать пользовательские
локальные домены. При первом использовании вы должны настроить его следующим
образом:
Откройте настройки прокси вашей операционной системы:
Установите следующий 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
и нажмите "Повторно применить настройки"