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. Ukrainian
  5. Перехід від нуля до продакшн

Перехід від нуля до продакшн

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

Витратьте трохи часу, щоб знайти в інтернеті ідеальне, старомодне й анімоване зображення з надписом "Under construction". Ось те яке я збираюся використовувати:

Я ж казав, це буде дуже весело.

Ініціалізація проекту

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

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. Platformm.sh є кращим і найпростішим способом розгортання тестових, проміжних і продакшн середовищ Symfony у хмарі.

Якщо ви поглянете на репозиторій проекту skeleton на GitHub, то помітите, що він майже порожній. Просто файл composer.json. Але у каталозі гостьової книги повно файлів. Як це можливо? Відповідь знаходиться у пакеті symfony/flex. Symfony Flex — це плагін 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/ містить основну точку входу CLI: console. Ви будете використовувати її постійно.

Каталог config/ складається з набору всіх необхідних конфігураційних файлів. Один файл на пакет. Ви майже не будете змінювати їх, довіряючи значенням за замовчуванням. Це, майже завжди, правильне рішення.

Каталог public/ є кореневим каталогом веб-застосунку, а сценарій index.php є основною точкою входу для всіх динамічних HTTP-ресурсів.

Каталог src/ міститиме весь код, який ви напишете; саме там ви будете проводити більшу частину свого часу. За замовчуванням, усі класи в цьому каталозі використовують простір імен PHP App. Це ваш дім. Ваш код. Ваша бізнес-логіка. Symfony це майже не торкається.

Каталог var/ містить кеш, журнали та файли, згенеровані застосунком в процесі роботи. Ви можете його не чіпати. Це єдиний каталог, що має бути доступним для запису в продакшн.

Каталог vendor/ містить всі пакети, що були встановлені за допомогою Composer, включаючи сам Symfony. Це наша секретна зброя, щоб бути більш продуктивними. Не будемо знову винаходити колесо. Краще перекладемо складну роботу на існуючі бібліотеки. Каталогом управляє Composer. Не чіпайте його ніколи.

Це все, що вам потрібно знати на даний момент.

Створення публічних ресурсів

Все, що знаходиться в каталозі public/, доступно через браузер. Наприклад, якщо ви перемістите ваш анімований GIF-файл (назвіть його under-construction.gif) у новий каталог public/images/, він стане доступним за адресою: 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 CLI поставляється з веб-сервером, який оптимізовано для розробки. Ви не здивуєтеся, якщо я скажу, що він чудово працює із 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'

Додавання Favicon

Щоб уникнути "спаму" в наслідок HTTP-помилок із кодом 404 в журналах через відсутність favicon, що запитується браузерами, додаймо її прямо зараз:

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, ви побачите результат нашої роботи.

Зверніть увагу, що ви не побачите гарну, стандартну сторінку 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

    Online Symfony certification, take it now!

    Online Symfony certification, take it now!

    Be safe against critical risks to your projects and businesses

    Be safe against critical risks to your projects and businesses

    Version:
    Locale:
    ebook

    This book is backed by:

    see all backers

    Symfony footer

    Avatar of michaelwilliams, a Symfony contributor

    Thanks michaelwilliams for being a Symfony contributor

    2 commits • 40 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