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_URLDATABASE_HOSTDATABASE_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та натисніть "Повторно застосувати налаштування"