Skip to content
  • About
    • What is Symfony?
    • Community
    • News
    • Contributing
    • Support
  • Documentation
    • Symfony Docs
    • Symfony Book
    • Screencasts
    • Symfony Bundles
    • Symfony Cloud
    • Training
  • Services
    • Platform.sh for Symfony Best platform to deploy Symfony apps
    • SymfonyInsight Automatic quality checks for your apps
    • Symfony Certification Prove your knowledge and boost your career
    • SensioLabs Professional services to help you with Symfony
    • Blackfire Profile and monitor performance of your apps
  • Other
  • Blog
  • Download
sponsored by
  1. Home
  2. Documentation
  3. Symfony: The Fast Track
  4. Russian
  5. С нуля до развёртывания

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

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

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

Я же вам говорил, что будет очень весело.

Инициализация проекта

Создайте новый Symfony-проект с помощью CLI-утилиты symfony, которую мы ранее установили:

1
2
$ symfony new guestbook --version=5.4 --php=8.1 --webapp --docker --cloud
$ cd guestbook

Эта команда представляет собой обертку над Composer, которая облегчает создание проектов на Symfony. Она использует заготовку проекта, которая включает в себя минимальный набор зависимостей; компоненты Symfony, необходимые практически для любого проекта: консольная утилита и HTTP-абстракция, используемая для создания веб-приложений.

Поскольку мы создаём полнофункциональное веб-приложение, мы добавили несколько опций, которые облегчат нам жизнь:

  • --webapp: По умолчанию создаётся приложение с наименьшим количеством возможных зависимостей. Для большинства веб-проектов рекомендуется использовать пакет webapp. Он содержит большинство пакетов, необходимых для "современных" веб-приложений. Пакет webapp добавляет множество пакетов Symfony, включая Symfony Messenger и PostgreSQL через Doctrine.
  • --docker: На вашем компьютере мы будем использовать Docker для управления такими сервисами, как PostgreSQL. Эта опция включает Docker, так что Symfony будет автоматически добавлять сервисы Docker на основе необходимых пакетов (например, сервис PostgreSQL при добавлении ORM или перехватчик почты при добавлении Symfony Mailer).
  • --cloud: Если вы хотите развернуть проект на Platform.sh, эта опция автоматически сгенерирует готовую конфигурацию Platform.sh. Platform.sh — это предпочтительный и самый простой способ развертывания тестовых, временных и продакшен-окружений Symfony в облаке.

Если вы посмотрите на скелет проекта в репозитории на 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

В вашем браузере по умолчанию откроется новая вкладка, на которой будет примерно следующее:

/

Tip

Для поиска причин неполадок используйте команду symfony server:log; эта команда в режиме реального времени выводит последние строки из логов веб-сервера, PHP и самого приложения.

Перейдите к /images/under-construction.gif. Выглядит так же?

/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, наличие баз данных, сервера очереди и т.п.

Я сделал свой выбор: это будет Platform.sh. У него есть всё необходимое, а кроме этого он помогает финансировать разработку Symfony.

Поскольку при создании проекта мы использовали опцию --cloud, Platform.sh уже инициализирован несколькими файлами, необходимыми Platform.sh, а именно: .platform/services.yaml, .platform/routes.yaml и .platform.app.yaml.

Развёртывание в продакшене

Не пора ли нам развернуть приложение?

Создайте новый удалённый проект Platform.sh:

1
$ symfony cloud:project:create --title="Guestbook" --plan=development

Эта команда выполняет ряд операций:

  • При первом запуске этой команды нужно пройти аутентификацию с помощью учётной записи Platform.sh, если вы ранее этого не сделали.
  • Команда создаст новый проект на Platform.sh (в течение 30 дней вы можете бесплатно разместить первый созданный вами проект).

Наконец, разворачиваем приложение:

1
$ symfony cloud:deploy

Приложение разворачивается автоматически каждый раз при отправке новых изменений в Git-репозиторий. После того как команда отработает, проект будет доступен по уникальному доменному имени.

Убедитесь, что всё работает хорошо:

1
$ symfony cloud:url -1

Вы должны получить ошибку 404, но перейдя на /images/under-construction.gif, вы увидите GIF-изображение.

Обратите внимание, что вы не увидите стандартную красивую страницу Symfony на Platform.sh. Почему? Скоро вы узнаете, что Symfony поддерживает работу с несколькими окружениями, а Platform.sh автоматически развёрнул код в окружении продакшена.

Tip

Если вы хотите удалить проект на Platform.sh, воспользуйтесь командой cloud:project:delete.

Двигаемся дальше

  • Репозитории официальных рецептов Symfony и рецептов сообщества, где вы можете разместить свои рецепты;
  • Локальный веб-сервер Symfony;
  • Документация Platform.sh.
Previous page Знакомство с проектом
Next page Выбор методологии разработки
This work, including the code samples, is licensed under a Creative Commons BY-NC-SA 4.0 license.
TOC
    Version

    Symfony 5.4 is backed by

    Code consumes server resources. Blackfire tells you how

    Code consumes server resources. Blackfire tells you how

    No stress: we've got you covered with our 116 automated quality checks of your code

    No stress: we've got you covered with our 116 automated quality checks of your code

    Version:
    Locale:
    ebook

    This book is backed by:

    see all backers

    Symfony footer

    Avatar of Raphaëll Roussel, a Symfony contributor

    Thanks Raphaëll Roussel for being a Symfony contributor

    1 commit • 4 lines changed

    View all contributors that help us make Symfony

    Become a Symfony contributor

    Be an active part of the community and contribute ideas, code and bug fixes. Both experts and newcomers are welcome.

    Learn how to contribute

    Symfony™ is a trademark of Symfony SAS. All rights reserved.

    • What is Symfony?

      • What is Symfony?
      • Symfony at a Glance
      • Symfony Components
      • Symfony Releases
      • Security Policy
      • Logo & Screenshots
      • Trademark & Licenses
      • symfony1 Legacy
    • Learn Symfony

      • Symfony Docs
      • Symfony Book
      • Reference
      • Bundles
      • Best Practices
      • Training
      • eLearning Platform
      • Certification
    • Screencasts

      • Learn Symfony
      • Learn PHP
      • Learn JavaScript
      • Learn Drupal
      • Learn RESTful APIs
    • Community

      • Symfony Community
      • SymfonyConnect
      • Events & Meetups
      • Projects using Symfony
      • Contributors
      • Symfony Jobs
      • Backers
      • Code of Conduct
      • Downloads Stats
      • Support
    • Blog

      • All Blog Posts
      • A Week of Symfony
      • Case Studies
      • Cloud
      • Community
      • Conferences
      • Diversity
      • Living on the edge
      • Releases
      • Security Advisories
      • Symfony Insight
      • Twig
      • SensioLabs Blog
    • Services

      • SensioLabs services
      • Train developers
      • Manage your project quality
      • Improve your project performance
      • Host Symfony projects

      Powered by

    Follow Symfony