Шаг 3: С нуля до развёртывания

5.0 version
Maintained

С нуля до развёртывания

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

Потратьте немного времени, чтобы найти в интернете наиболее подходящую, старомодную анимированную картинку с надписью «Under construction». Вот эту GIF-картинку я собираюсь использовать:

../_images/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.