Как развернуть приложение Symfony 4 в рабочей среде с помощью LEMP в Ubuntu 18.04

_ Автор выбрал Software в Public Interest Inc, чтобы получить пожертвование в рамках https://do.co/ Программа w4do-cta [Писать для DOnations] ._

Вступление

https://symfony.com [Symfony] - это PHP-фреймворк с открытым исходным кодом с элегантной структурой и репутацией подходящего фреймворка для запуска любого проекта независимо от его размера. Являясь набором повторно используемых компонентов, его гибкость, архитектура и высокая производительность делают его лучшим выбором для создания очень сложного корпоративного приложения.

В этом руководстве вы развернете существующее стандартное приложение Symfony 4 в производство со стеком LEMP (Nginx, MySQL и PHP) в Ubuntu 18.04, что поможет вам приступить к настройке сервера и структуры инфраструктуры. Nginx - это популярный высокопроизводительный HTTP-сервер с открытым исходным кодом, с дополнительными функциями, включая поддержку обратного прокси-сервера. Он имеет хорошую репутацию и размещает некоторые из крупнейших и самых популярных сайтов в Интернете. Если вы решите развернуть собственное приложение Symfony, вам может потребоваться выполнить дополнительные действия в зависимости от существующей структуры вашего приложения.

Предпосылки

Для завершения этого урока вам понадобится:

Шаг 1 - Создание пользователя и базы данных для приложения

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

Чтобы создать базу данных MySQL для нашего приложения и связанного с ним пользователя, вам необходимо получить доступ к клиенту MySQL с помощью корневой учетной записи MySQL:

mysql -u root -p

Введите соответствующий пароль, который должен быть тем же паролем, который использовался при запуске + mysql_secure_installation +.

Затем создайте базу данных приложения с помощью:

CREATE DATABASE blog;

Вы увидите следующий вывод в консоли:

OutputQuery OK, 1 row affected (0.00 sec)

Вы успешно создали свою базу данных приложений. Теперь вы можете создать пользователя MySQL и предоставить ему доступ к вновь созданной базе данных.

Выполните следующую команду, чтобы создать пользователя и пароль MySQL. Вы можете изменить имя пользователя и пароль на что-то более безопасное, если хотите:

CREATE USER  @'localhost' IDENTIFIED BY ;

Вы увидите следующий вывод:

OutputQuery OK, 0 rows affected (0.00 sec)

В настоящее время пользователь * blog-admin * не имеет прав доступа к базе данных приложения. Фактически, даже если * blog-admin * попытается войти в систему со своим паролем, они не смогут получить доступ к оболочке MySQL.

Пользователь должен иметь соответствующие разрешения перед доступом или выполнением определенного действия с базой данных. Используйте следующую команду, чтобы разрешить полный доступ к базе данных * blog * для пользователя * blog-admin *:

GRANT ALL PRIVILEGES ON blog.* TO @'localhost';

Вы увидите следующий вывод:

OutputQuery OK, 0 rows affected (0.00 sec)
  • Blog-admin * теперь имеет все привилегии для всех таблиц в базе данных * blog *. Чтобы перезагрузить таблицы предоставления и применить изменения, вам нужно выполнить операцию очистки привилегий с помощью оператора flush:

FLUSH PRIVILEGES;

Вы увидите следующий вывод:

OutputQuery OK, 0 rows affected (0.00 sec)

Вы закончили создание нового пользователя и предоставление привилегий. Чтобы проверить, в порядке ли вы, выйдите из клиента MySQL:

quit;

И снова войдите в систему, используя учетные данные только что созданного пользователя MySQL, и введите пароль при появлении запроса:

mysql -u  -p

Убедитесь, что пользователь может получить доступ к базе данных с помощью:

SHOW DATABASES;

Вы увидите таблицу + blog + в выводе:

Output+--------------------+
| Database           |
+--------------------+
| information_schema |
| blog               |
+--------------------+
2 rows in set (0.00 sec)

Наконец, выйдите из клиента MySQL:

quit;

Вы успешно создали базу данных, пользователя для демонстрационного приложения, и предоставили вновь созданному пользователю права доступа к базе данных. Теперь вы готовы установить демонстрационное приложение.

Шаг 2 - Настройка демонстрационного приложения

Для простоты этого руководства вы развернете приложение для блога, созданное с помощью Symfony. Это приложение позволит аутентифицированному пользователю создать запись в блоге и сохранить ее в базе данных. Кроме того, пользователь приложения может просматривать все сообщения и сведения, связанные с автором.

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

Сначала создайте каталог, который будет служить корневым каталогом для вашего приложения. Итак, выполните следующую команду из консоли, чтобы создать новый каталог с именем + symfony-blog +:

sudo mkdir -p /var/www/symfony-blog

Чтобы работать с файлами проекта, используя учетную запись пользователя без полномочий root, вам нужно изменить владельца папки и группу, выполнив:

sudo chown : /var/www/symfony-blog

Замените * sammy * своим именем пользователя sudo без полномочий root.

Теперь вы можете перейти в родительский каталог и клонировать приложение на GitHub:

cd /var/www
git clone https://github.com/yemiwebby/symfony-blog.git symfony-blog

Вы увидите следующий вывод:

OutputCloning into 'symfony-blog'...
remote: Counting objects: 180, done.
remote: Compressing objects: 100% (122/122), done.
remote: Total 180 (delta 57), reused 164 (delta 41), pack-reused 0
Receiving objects: 100% (180/180), 167.01 KiB | 11.13 MiB/s, done.
Resolving deltas: 100% (57/57), done.

Демо-приложение установлено. На следующем шаге вы настроите переменные среды и установите необходимые зависимости для проекта.

Шаг 3 - Настройка переменных среды для приложения

Чтобы полностью настроить приложение, вам нужно установить зависимости проекта и правильно настроить параметры приложения.

По умолчанию приложение Symfony работает в режиме разработки, что дает очень подробный журнал для целей отладки. Это не относится к тому, что вы делаете в этом руководстве, и не является хорошей практикой для производственной среды, так как это может замедлить работу и создать очень большие файлы журналов.

Symfony должен знать, что вы запускаете приложение в производственной среде. Вы можете настроить это, создав файл + .env +, содержащий объявления переменных, или непосредственно создав переменные окружения. Поскольку вы также можете использовать файл + .env + для настройки учетных данных базы данных для этого приложения, для вас имеет больше смысла делать это. Измените ваш рабочий каталог на клонированный проект и создайте файл + .env + с помощью:

cd symfony-blog
sudo nano .env

Добавьте следующие строки в файл для настройки среды производственного приложения:

env
APP_ENV=prod
APP_DEBUG=0

+ APP_ENV + - это переменная среды, которая указывает, что приложение находится в рабочем состоянии, а + APP_DEBUG + - это переменная среды, которая указывает, должно ли приложение работать в режиме отладки или нет. Вы установили его в false на данный момент.

Сохраните файл и выйдите из редактора.

Затем установите расширение PHP, которое приложения Symfony используют для обработки XML:

sudo apt install php7.2-xml

Далее вам нужно установить зависимости проекта, запустить + composer install:

cd /var/www/symfony-blog
composer install

Вы успешно настроили переменные среды и установили необходимые зависимости для проекта. Далее вы настроите учетные данные базы данных.

Шаг 4 - Настройка учетных данных базы данных

Чтобы получить данные из базы данных приложения, которую вы создали ранее, вам нужно будет установить и настроить необходимые учетные данные базы данных из приложения Symfony.

Снова откройте файл + .env +:

sudo nano .env

Добавьте следующий файл в файл, который позволит вам легко подключаться и правильно взаимодействовать с базой данных. Вы можете добавить его сразу после строки + APP_DEBUG = 0 + в файле + .env +:

env
...
DATABASE_URL=mysql://:@localhost:3306/blog

Платформа Symfony использует стороннюю библиотеку под названием Doctrine для взаимодействия с базами данных. Doctrine предоставляет вам полезные инструменты, которые делают взаимодействие с базами данных простым и гибким.

Теперь вы можете использовать Doctrine для обновления вашей базы данных таблицами из клонированного приложения Github. Запустите эту команду, чтобы сделать это:

php bin/console doctrine:schema:update --force

Вы увидите следующий вывод:

OutputUpdating database schema...
   4 queries were executed
[OK] Database schema updated successfully!

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

Шаг 5 - Заполнение вашей базы данных с помощью Doctrine-Fixtures

На данный момент вновь созданные таблицы пусты. Заполните его, используя doctrine-fixtures. Использование Doctrine-Fixtures не является обязательным условием для приложений Symfony, оно используется только для предоставления фиктивных данных для вашего приложения.

Выполните следующую команду, чтобы автоматически загрузить данные тестирования, содержащие данные * author * и образец * post * в таблицу базы данных, созданную для блога:

php bin/console doctrine:fixtures:load

Вы получите предупреждение об очистке базы данных. Вы можете пойти дальше и набрать + Y +:

OutputCareful, database will be purged. Do you want to continue y/N ? y
 > purging database
 > loading App\DataFixtures\ORM\Fixtures

В следующем разделе вы очистите и разогреете свой кеш.

Шаг 6 - Очистка и разогрев кеша

Чтобы приложение загружалось быстрее, когда пользователи отправляют запросы, рекомендуется подогревать кеш во время развертывания. Прогрев кеша генерирует страницы и сохраняет их для более быстрого ответа, а не для создания совершенно новых страниц. К счастью, у Symfony есть команда для очистки кеша, которая также запускает прогрев. Для этого выполните следующую команду:

php bin/console cache:clear

Вы увидите следующий вывод:

OutputClearing the cache for the prod environment with debug false
[OK] Cache for the "prod" environment (debug=false) was successfully cleared.

Вы завершите настройку чуть позже. Осталось только настроить веб-сервер. Вы сделаете это в следующем разделе.

Шаг 7 - Настройка веб-сервера и запуск приложения

К настоящему времени у вас установлен Nginx для обслуживания ваших страниц и MySQL для хранения ваших данных и управления ими. Теперь вы настроите веб-сервер, создав новый блок сервера приложений вместо редактирования по умолчанию.

Откройте новый блок сервера с помощью:

sudo nano /etc/nginx/sites-available/blog

Добавьте следующее содержимое в новый файл конфигурации блока сервера. Убедитесь, что вы заменили ++ в блоке сервера на IP-адрес вашего сервера:

/ И т.д. / Nginx / сайты Недоступные / блог

server {
   listen 80;
   listen [::]:80;

   server_name blog ;
   root /var/www/symfony-blog/public;
   index index.php;
   client_max_body_size 100m;

   location / {
       try_files $uri $uri/ /index.php$is_args$args;
   }

   location ~ \.php {
       try_files $uri /index.php =404;
       fastcgi_pass unix:/var/run/php/php7.2-fpm.sock;
       fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
       fastcgi_param SCRIPT_NAME $fastcgi_script_name;
       fastcgi_split_path_info ^(.+\.php)(/.+)$;
       fastcgi_index index.php;
       include fastcgi_params;
     }

   location ~ /\.(?:ht|git|svn) {
       deny all;
   }
}

Сначала мы указали директивы + listen + для Nginx, который по умолчанию используется для порта + 80 +, а затем задали имя сервера, соответствующее запросам на IP-адрес сервера. Далее мы использовали директивы + root +, чтобы указать корневой документ для проекта. Приложение + symfony-blog + хранится в + / var / www / symfony-blog +, но в соответствии с лучшими практиками мы установили для корневого веб-каталога значение + / var / www / symfony-blog / public + как только подкаталог + / public + должен быть подключен к Интернету. Наконец, мы настроили директиву location для обработки PHP.

После добавления содержимого сохраните файл и выйдите из редактора.

Чтобы включить вновь созданный блок сервера, нам нужно создать символическую ссылку из файла конфигурации нового блока сервера, расположенного в каталоге + / etc / nginx / sites-available +, в каталог + + etc / nginx / sites-enabled + ` используя следующую команду:

sudo ln -s /etc/nginx/sites-available/blog /etc/nginx/sites-enabled/

Проверьте новый файл конфигурации на наличие синтаксических ошибок, выполнив:

sudo nginx -t

Эта команда выведет ошибки на консоль, если они есть. Если ошибок нет, выполните эту команду для перезагрузки Nginx:

sudo systemctl reload nginx

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

Наконец, теперь вы можете запустить и протестировать приложение. Посетите + http: // + в вашем любимом браузере:

На следующем рисунке показан снимок экрана приложения блога Symfony, который вы должны увидеть по IP-адресу вашего сервера:

изображение: https: //assets.digitalocean.com/articles/symfony4-1804/EQQNuIv.png [альтернативный снимок экрана приложения блога Symfony]

Заключение

Symfony - это многофункциональный PHP-фреймворк с архитектурой, которая делает веб-разработку интересной для разработчика, который создает программное обеспечение с его использованием. Symfony - это многофункциональная среда веб-разработки, которая предоставляет разработчикам мощные инструменты для создания веб-приложений. Это часто считается хорошим выбором для корпоративных приложений из-за его гибкости. Шаги для развертывания типичного приложения Symfony различаются в зависимости от настроек, сложности и требований приложения.

В этом руководстве вы вручную развернули приложение Symfony 4 на рабочем месте на сервере Ubuntu 18.04, работающем под управлением LEMP. Теперь вы можете применить эти знания для развертывания ваших собственных приложений Symfony.

Related