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

5.2 version
Maintained

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

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

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

../_images/under-construction.gif

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

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

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

1
2
$ symfony new guestbook --version=5.2
$ cd guestbook

Ця команда є тонкою обгорткою над Composer, що полегшує створення проектів з Symfony. Вона використовує скелет проекту <https://github.com/symfony/skeleton> _, який включає мінімальний набір залежностей; компоненти Symfony, які потрібні практично для будь-якого проекту: консольний інструмент та абстракція HTTP, необхідні для створення веб-застосунків.

Якщо ви поглянете на репозиторій проекту 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/ містить основну точку входу командного рядка: 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 поставляється з веб-сервером, який оптимізовано для розробки. Ви не здивуєтеся, якщо я скажу, що він чудово працює з 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'

Додавання 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 і можливість розміщення сервісів, таких як бази даних, черги та деяких інших.

Я зробив свій вибір, це буде SymfonyCloud. Він забезпечує все необхідне, і допомагає фінансувати розвиток Symfony.

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

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