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