Введение
Laravel — это фреймворк для веб-приложений, который поставляется с набором встроенных инструментов и ресурсов для разработки современных приложений на PHP . Он известен своей надежностью, производительностью, эффективностью, модульностью и безопасностью. Благодаря различным встроенным функциям популярность Laravel невероятно выросла. Многие разработчики используют Laravel для оптимизации процесса веб-разработки.
В этом руководстве будет показано, как установить и настроить новое приложение Laravel на Ubuntu 20.04.
Laravel на Ubuntu
Мы будем использовать Composer, менеджер зависимостей PHP, для загрузки и управления Laravel. Чтобы установить Composer, следуйте инструкциям этого руководства. Веб-сервер Nginx будет обслуживать приложение. Мы создадим демонстрационное приложение Laravel, использующее базу данных MySQL.
Для этого руководства требуются некоторые предварительные условия. Мы предполагаем, что у вас уже есть правильно настроенный и работающий сервер Ubuntu 20.04. Для справки, вот краткое руководство по настройке сервера Ubuntu. Также требуется установить и настроить стек LEMP (Linux, Nginx, MySQL и PHP). У нас есть подробное руководство по установке и настройке стека LEMP.
Поскольку мы собираемся устанавливать различные пакеты, для этого требуются права root. В случае Ubuntu пользователь root по умолчанию отключен. Поэтому нам нужен доступ к пользователю без прав root с привилегиями sudo. Вот как предоставить права sudo другим пользователям.
Шаг 1 – Установка модулей PHP
Перед установкой Laravel нам понадобятся некоторые важные модули PHP для фреймворка. Эти модули доступны непосредственно из репозиториев пакетов Ubuntu по умолчанию. Они поддерживают такие функции, как кодирование символов, XML и точная математика.
Сначала обновите кэш APT и установите пакеты:
|
1 2 |
$ sudo apt update $ sudo apt install php-mbstring php-xml php-bcmath |
Шаг 2 – Создание базы данных для приложения
Чтобы продемонстрировать функциональность Laravel, мы создадим приложение со списком путешествий, которое показывает список мест, которые пользователь хотел бы посетить, и список мест, которые уже visited. Мы можем хранить эти данные в таблице places с полями name (название места) и visited (пометка как visited или nonvisited). Дополнительное поле будет содержать уникальный идентификатор для каждой записи. Чтобы связать данные с нашим приложением Laravel, мы создадим выделенного пользователя MySQL и предоставим ему полные права на базу данных travellist.
Собственная библиотека PHP для MySQL mysqlnd больше не поддерживает caching_sha2_authentication. Таким образом, нам нужно настроить нашу базу данных с методом аутентификации mysql_native_password. Войдите в оболочку MySQL как root:
|
1 |
$ sudo mysql |
Затем создайте новую базу данных с именем travellist:
|
1 |
> CREATE DATABASE travellist; |
После этого создайте выделенного пользователя travellist_user с подходящим паролем:
|
1 |
> CREATE USER 'travellist_user'@'%' IDENTIFIED WITH mysql_native_password BY 'password123'; |
Предоставьте пользователю travellist_user полные права на базу данных travellist. Это также предотвратит создание и изменение пользователем любых других баз данных на сервере:
|
1 |
> GRANT ALL ON travellist.* TO 'travellist_user'@'%'; |
Выйдите из оболочки MySQL:
|
1 |
> exit |
Давайте протестируем нового пользователя. Следующая команда выполнит вход в оболочку MySQL от имени пользователя travellist_user. Флаг -p запросит пароль пользователя:
|
1 |
$ mysql -u travellist_user -p |
Выведите список всех доступных баз данных. Как было настроено ранее, должны отображаться только travellist и information_schema:
|
1 |
> SHOW DATABASES; |
Затем нам нужно создать таблицу данных places. Выполните следующую инструкцию MySQL:
|
1 2 3 4 5 6 |
> CREATE TABLE travellist.places ( id INT AUTO_INCREMENT, name VARCHAR(255), visited BOOLEAN, PRIMARY KEY(id) ); |
Давайте заполним таблицу тестовыми данными:
|
1 2 3 4 5 6 7 8 9 10 11 12 |
> INSERT INTO travellist.places (name, visited) VALUES ("Tokyo", false), ("Delhi", true), ("Shanghai", false), ("Moscow", true), ("Lisbon", true), ("Denver", false), ("Berlin", false), ("Istanbul", false), ("Rio", true), ("Beijing", false), ("Helsinki", false); |
Давайте проверим, успешно ли сохранились данные в базе данных:
|
1 |
> SELECT * FROM travellist.places; |
Как видим, тестовая таблица заполнена корректными данными. Теперь мы можем выйти из оболочки MySQL:
|
1 |
> exit |
Шаг 3 – Создание нового приложения Laravel
Теперь мы готовы создать новое приложение Laravel с помощью Composer. Мы будем использовать travellist в качестве демонстрационного приложения. Это приложение будет отображать список мест из базы данных MySQL, демонстрируя базовую конфигурацию Laravel. Перейдите в домашний каталог пользователя:
|
1 |
$ cd ~ |
Следующий шаг — создание нового приложения Laravel с помощью Composer. Будет создан отдельный каталог travellist с базовым приложением Laravel с настройками по умолчанию. Выполните следующую команду:
|
1 |
$ composer create-project --prefer-dist laravel/laravel travellist |
После создания приложения мы можем проверить, все ли компоненты были успешно установлены:
|
1 2 |
$ cd travellist $ php artisan |
Вывод подтверждает, что все файлы приложения находятся на своих местах. Он также гарантирует работоспособность всех инструментов командной строки Laravel. Тем не менее, для настройки базы данных и внесения нескольких дополнительных изменений все еще требуется конфигурация приложения.
Шаг 4 – Настройка Laravel
Все конфигурационные файлы Laravel хранятся в каталоге с именем config внутри корневого каталога приложения. Кроме того, при установке Laravel с помощью Composer также создается файл окружения. Он содержит различные настройки, специфичные для текущей среды. Значения, объявленные в нем, будут иметь приоритет над значениями, заданными в обычных конфигурационных файлах в config.
Для каждой уникальной установки потребуется собственный файл окружения для определения таких значений, как настройки подключения к базе данных, URL-адрес приложения, параметры отладки и т. д. Обратите внимание, что файл окружения содержит конфиденциальную информацию, такую как учетные данные базы данных, ключи безопасности и т. д. Вот почему настоятельно рекомендуется никогда не публиковать этот файл в открытом доступе.
Откройте файл окружения в текстовом редакторе:
|
1 |
$ nano .env |
Вот пример кода окружения:
|
1 2 3 4 5 6 7 8 9 10 11 12 |
APP_NAME=TravelList APP_ENV=development APP_KEY=<unique_app_key> APP_DEBUG=true APP_URL=http://<domain_or_ip> LOG_CHANNEL=stack DB_CONNECTION=mysql DB_HOST=127.0.0.1 DB_PORT=3306 DB_DATABASE=travellist DB_USERNAME=travellist_user DB_PASSWORD=password123 |
Давайте разберем эти значения:
APP_NAME: Это поле описывает имя приложения. Это имя будет использоваться для уведомлений и сообщений.APP_ENV: Текущая среда приложения.APP_KEY: Этот ключ генерируется автоматически при установке Laravel через Composer. Он используется для генерации солей и хешей. Менять его не нужно.APP_DEBUG: Переключатель режима отладки. Если он включен, на стороне клиента будет отображаться отладочная информация.APP_URL: Базовый URL-адрес приложения. Он также используется для генерации ссылок приложения.DB_DATABASE: Имя базы данных. В данном случае это будет созданная нами выделенная база данных.DB_USERNAME: Имя пользователя для подключения к базе данных.DB_PASSWORD: Пароль для подключения к базе данных.
После внесения изменений сохраните файл и закройте редактор.
Шаг 5 – Настройка Nginx
Мы успешно установили Laravel в локальную папку домашней директории пользователя. Эта конфигурация отлично подходит для локальной среды разработки. Однако не рекомендуется использовать ее для веб-серверов, открытых для публичного интернета.
Наш следующий шаг — перенести приложение в /var/www, так как это обычное расположение для веб-приложений, работающих на Nginx. Используйте команду mv, чтобы переместить travellist в /var/www/travellist:
|
1 |
$ sudo mv ~/travellist /var/www/travellist |
Затем предоставьте пользователю права на запись в папки storage и cache. В этих папках находятся файлы, создаваемые приложением Laravel:
|
1 2 |
$ sudo chown -R www-data.www-data /var/www/travellist/storage $ sudo chown -R www-data.www-data /var/www/travellist/bootstrap/cache |
Файлы приложения теперь на месте. Однако нам нужно указать Nginx обслуживать этот контент. Создайте новый файл конфигурации виртуального хоста:
|
1 |
$ sudo nano /etc/nginx/sites-available/travellist |
Вот пример рекомендуемых настроек для приложения Laravel, работающего на Nginx:
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 |
server { listen 80; server_name <domain_or_ip>; root /var/www/travellist/public; add_header X-Frame-Options "SAMEORIGIN"; add_header X-XSS-Protection "1; mode=block"; add_header X-Content-Type-Options "nosniff"; index index.html index.htm index.php; charset utf-8; location / { try_files $uri $uri/ /index.php?$query_string; } location = /favicon.ico { access_log off; log_not_found off; } location = /robots.txt { access_log off; log_not_found off; } error_page 404 /index.php; location ~ \.php$ { fastcgi_pass unix:/var/run/php/php7.4-fpm.sock; fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME $realpath_root$fastcgi_script_name; include fastcgi_params; } location ~ /\.(?!well-known).* { deny all; } } |
Пришло время активировать новый файл конфигурации виртуального хоста. Создайте символическую ссылку на директорию sites-enabled:
|
1 |
$ sudo ln -s /etc/nginx/sites-available/travellist /etc/nginx/sites-enabled/ |
Следующая команда Nginx проверит файлы конфигурации на наличие синтаксических ошибок:
|
1 |
$ sudo nginx -t |
Затем перезапустите Nginx:
|
1 |
$ sudo systemctl reload nginx |
Теперь приложение должно быть доступно по доменному имени или IP-адресу (как определено директивой server_name):
Шаг 6 – Настройка главной страницы
После настройки приложения Laravel мы можем приступить к работе над ним. Для демонстрации пришло время создать пример страницы, отображающей тестовые данные из таблицы базы данных places. Сначала откройте основной файл маршрутов в текстовом редакторе:
|
1 |
$ nano routes/web.php |
По умолчанию файл будет содержать некоторый контент. Здесь маршруты определяются с помощью статического метода (Route::get). Он принимает path и callback function в качестве аргументов.
Замените код на следующий:
|
1 2 3 4 5 6 7 |
<?php use Illuminate\Support\Facades\DB; Route::get('/', function () { $visited = DB::select('select * from places where visited = ?', [1]); $togo = DB::select('select * from places where visited = ?', [0]); return view('travellist', ['visited' => $visited, 'togo' => $togo ] ); }); |
Сохраните файл и закройте редактор. Далее мы создадим макет для отображения пользователю результатов запроса к базе данных. Создайте новый файл в resource/views:
|
1 |
$ nano resources/views/travellist.blade.php |
В следующем коде мы создали два списка мест в зависимости от значения visited и togo:
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
<html> <head> <title>Список путешествий</title> </head> <body> <h1>Мой список путешествий</h1> <h2>Места для посещения</h2> <ul> @foreach ($togo as $newplace) <li>{{ $newplace->name }}</li> @endforeach </ul> <h2>Уже посещенные</h2> <ul> @foreach ($visited as $place) <li>{{ $place->name }}</li> @endforeach </ul> </body> </html> |
Сохраните файл и закройте редактор. Теперь снова откройте страницу веб-приложения:
Вуаля! Теперь у нас есть работающее приложение Laravel, использующее базу данных MySQL для хранения содержимого.
Заключение
В этом руководстве мы продемонстрировали, как настроить приложение Laravel на базе стека LEMP, работающего на сервере Ubuntu 20.04. Мы также показали, как настроить маршрут по умолчанию для запроса содержимого базы данных и отображения результатов в пользовательском представлении. Для получения дополнительной информации о Laravel ознакомьтесь с официальной документацией по представлениям, маршрутам, и поддержке баз данных.
Установка в этом руководстве выполняется на отдельной виртуальной машине. Однако вы также можете развернуть Laravel на стеках LEMP в Docker.
Приятной работы!









Комментарии
Комментариев пока нет. Будьте первым.