Шаг 3: С нуля до развёртывания
С нуля до развёртывания¶
Мне нравится работать быстро. Я хочу, чтобы наш маленький проект был доступен в продакшене как можно скорее. Вот прямо сейчас. Поскольку мы ещё ничего не сделали, начнём с развёртывания простой и понятной страницы-заглушки типа «Under construction». Вам это понравится!
Потратьте немного времени, чтобы найти в интернете наиболее подходящую, старомодную анимированную картинку с надписью «Under construction». Вот эту GIF-картинку я собираюсь использовать:

Я же вам говорил, что будет очень весело.
Инициализация проекта¶
Создайте новый Symfony-проект с помощью CLI-утилиты symfony
, которую мы ранее установили:
1 2 | $ symfony new guestbook --version=5.0
$ cd guestbook
|
Эта команда представляет собой обертку над Composer
, которая облегчает создание проектов на Symfony. Она использует заготовку проекта, которая включает в себя минимальный набор зависимостей; компоненты Symfony, необходимые практически для любого проекта: консольная утилита и HTTP-абстракция, используемая для создания веб-приложений.
Если вы посмотрите на скелет проекта в репозитории на GitHub, то заметите, что он почти пуст. Там только лишь файл composer.json
. Однако в директории guestbook
полно файлов. Как это вообще возможно? Ответ кроется в пакете symfony/flex
. Symfony Flex — это плагин для Composer, который внедряется в процесс установки. Когда он обнаруживает пакет, который содержит так называемый рецепт, Composer выполняет его.
Основной точкой входа рецептов Symfony является файл манифеста, в котором описаны операции, которые необходимо выполнить, чтобы автоматически зарегистрировать пакет в Symfony-приложении. Вам никогда не придётся заглядывать в файл README для установки пакета Symfony. Автоматизация — ключевая особенность Symfony.
Учитывая, что Git установлен на вашем компьютере, команда symfony new
также создала Git-репозиторий и сделала в нём первый коммит.
Посмотрите на структуру директорий:
1 2 3 4 5 6 7 8 9 | ├── bin/
├── composer.json
├── composer.lock
├── config/
├── public/
├── src/
├── symfony.lock
├── var/
└── vendor/
|
Директория bin/
содержит основной скрипт командной строки console
. Вы будете использовать его постоянно.
Директория config/
состоит из набора готовых конфигурационных файлов. По одному файлу на каждый пакет. Вам редко предстоит их редактировать, поскольку значения по умолчанию хорошо подходят для приложения.
Директория public/
— это корневая директория сайта, а скрипт index.php
в ней — основная точка входа для всех динамических HTTP-ресурсов.
Директория src/
содержит весь код, который вы напишете — в ней вы будете проводить большую часть времени. По умолчанию все классы в этой директории используют пространство имён App
. Это ваша рабочая директория, ваш код, ваша бизнес-логика. Symfony имеет мало общего с этим.
Директория var/
содержит кеш-файлы, логи и прочие файлы, сгенерированные приложением во время выполнения; не обращайте внимания на неё. Это единственная директория, которая должна быть доступна для записи в продакшене.
Директория vendor/
содержит все пакеты, которые установил Composer, включая и сам Symfony. Это наше секретное оружие для максимальной продуктивности. Давайте не будем изобретать велосипед, а вместо этого воспользуемся существующими библиотеками для решения сложных задач. В этой директории всем заведует Composer, поэтому ничего в ней не изменяйте.
Это всё, что вам нужно знать на данный момент.
Создание публичных ресурсов¶
К всему, что находится в директории public/
, можно обратиться из браузера. Например, если вы переместите анимированный GIF-файл (назовите его under-construction.gif
) в новую директорию public/images/
, он будет доступен по URL-адресу, такому как https://localhost/images/under-construction.gif
.
Вы можете скачать мой GIF-файл отсюда:
1 2 | $ mkdir public/images/
$ php -r "copy('http://clipartmag.com/images/website-under-construction-image-6.gif', 'public/images/under-construction.gif');"
|
Запуск локального веб-сервера¶
Консольная утилита symfony
включает в себя веб-сервер, оптимизированный для разработки. Как вы можете себе представить, он очень хорошо работает с Symfony. Однако никогда не используйте его в продакшене.
Запустите веб-сервер в фоновом режиме прямо из директории проекта, используя флаг -d
:
1 | $ symfony server:start -d
|
Сервер запустится на первом доступном порту, начиная с 8000. Вы можете открыть сайт по ссылке из CLI:
1 | $ symfony open:local
|
В вашем браузере по умолчанию откроется новая вкладка, на которой будет примерно следующее:

Совет
Для поиска причин неполадок используйте команду symfony server:log
; эта команда в режиме реального времени выводит последние строки из логов веб-сервера, PHP и самого приложения.
Перейдите к /images/under-construction.gif
. Выглядит так же?

Довольны результатом? Теперь давайте закоммитим нашу работу:
1 2 | $ git add public/images
$ git commit -m'Add the under construction image'
|
Добавление фавиконки¶
Чтобы убрать из логов большое количество HTTP-ошибок 404 из-за отсутствующей фавиконки, которую автоматически запрашивают браузеры, давайте добавим её:
1 2 3 | $ php -r "copy('https://symfony.com/favicon.ico', 'public/favicon.ico');"
$ git add public/
$ git commit -m'Add a favicon'
|
Подготовка к развёртыванию в продакшене¶
Как насчёт развёртывания нашей работы в продакшене? Я в курсе, что у нас пока ещё нет HTML-страницы, чтобы поприветствовать пользователей. Но даже если мы просто посмотрим на маленькую картинку с надписью «under construction» в продакшене — это будет большим шагом вперёд. Ну, вы наверняка знаете этот девиз: разворачивай приложение как можно раньше и чаще.
Вы можете разместить приложение у любого провайдера с поддержкой PHP… то есть почти на всех хостингах. Но учтите несколько требований: поддержка последней версии PHP, наличие баз данных, сервера очереди и т.п.
Я сделал свой выбор: это будет SymfonyCloud. У него есть всё необходимое, а кроме этого он помогает финансировать разработку Symfony.
В консольной команде symfony
есть встроенная поддержка SymfonyCloud. Давайте создадим проект в SymfonyCloud:
1 | $ symfony project:init
|
Эта команда создаёт несколько файлов, которые требуются для работы с SymfonyCloud: .symfony/services.yaml
, .symfony/routes.yaml
и .symfony.cloud.yaml
.
Добавьте их в Git и закоммитьте:
1 2 | $ git add .
$ git commit -m"Add SymfonyCloud configuration"
|
Примечание
Использование универсальной команды git add .
может быть рискованно. Но не в нашем случае, так как все файлы, которые нам не нужно коммитить, будут исключены автоматически благодаря сгенерированному во время создания проекта файлу .gitignore
.
Развёртывание в продакшене¶
Не пора ли нам развернуть приложение?
Создайте новый проект SymfonyCloud:
1 | $ symfony project:create --title="Guestbook" --plan=development
|
Эта команда выполняет ряд операций:
- При первом запуске этой команды нужно пройти аутентификацию с помощью учётной записи SymfonyConnect, если вы ранее этого не сделали.
- Команда создаст новый проект на SymfonyCloud (в течение 7 дней вы можете бесплатно разместить любой новый проект).
Наконец, разворачиваем приложение:
1 | $ symfony deploy
|
Приложение разворачивается автоматически каждый раз при отправке новых изменений в Git-репозиторий. После того как команда отработает, проект будет доступен по уникальному доменному имени.
Убедитесь, что всё работает хорошо:
1 | $ symfony open:remote
|
Вы должны получить ошибку 404, но перейдя на /images/under-construction.gif
, вы увидите GIF-изображение.
Обратите внимание, что вы не увидите стандартную красивую страницу Symfony на SymfonyCloud. Почему? Скоро вы узнаете, что Symfony поддерживает работу с несколькими окружениями, а SymfonyCloud автоматически развёрнул код в окружении продакшена.
Совет
Если вы хотите удалить проект на SymfonyCloud, воспользуйтесь командой project:delete
.
- « Previous Шаг 2: Знакомство с проектом
- Next » Шаг 4: Выбор методологии разработки
This work, including the code samples, is licensed under a Creative Commons BY-NC-SA 4.0 license.