Введение
Laravel — это PHP-фреймворк с открытым исходным кодом, который предоставляет набор инструментов и ресурсов для создания современных PHP-приложений. Благодаря комплексной экосистеме, использующей встроенные функции, популярность Laravel в последние годы быстро росла, и многие разработчики выбрали ее в качестве предпочтительной среды для оптимизированного процесса разработки. В этом руководстве вы установите и настроите новое приложение Laravel на сервере Ubuntu 18.04, используя Composer для загрузки и управления зависимостями фреймворка. Когда вы закончите, у вас будет функциональное демонстрационное приложение Laravel, которое извлекает содержимое из базы данных MySQL.
В этом руководстве мы увидим, как установить Laravel с LEMP на Ubuntu 18.04 LTS.
Если вы намерены установить Laravel с LEMP на удаленном сервере, продолжайте чтение, в противном случае пропустите первый абзац «Подключение к серверу» и читайте следующий.
Подключение к серверу
Чтобы получить доступ к серверу, вам нужно знать IP-адрес. Вам также потребуется ваше имя пользователя и пароль для аутентификации. Чтобы подключиться к серверу как root, введите следующую команду:
ssh root@IP_DEL_SERVER
Далее вам нужно будет ввести пароль пользователя root.
Если вы не используете пользователя root, вы можете войти под другим именем пользователя с помощью той же команды, а затем изменить root на свое имя пользователя:
ssh VOSTRO_UTENTE@IP_DEL_SERVER
Затем вам будет предложено ввести пароль пользователя.
Стандартный порт для подключения по ssh — 22, если ваш сервер использует другой порт, вам нужно будет указать его с помощью параметра -p, затем введите следующую команду:
ssh nome_utente@IP_DEL_SERVER -p PORTA
Предпосылки
Чтобы выполнить это руководство, вы должны сначала выполнить следующие требования:
- Создайте пользователя sudo и включите брандмауэр UFW. Вы можете следовать нашему руководству по первоначальной настройке сервера с Ubuntu 18.04.
- Установите стек LEMP. Если вы еще не настроили его, вы можете следовать нашему руководству Как установить Linux Nginx MySQL PHP (LEMP) в Ubuntu 18.04 LTS.
- Установите Композитор. Мы будем использовать Composer для установки Laravel и его зависимостей. Вы можете установить Composer, следуя нашему руководству Как установить Composer на Ubuntu 18.04 LTS.
Установите необходимые модули PHP
Прежде чем вы сможете установить Laravel, вам нужно установить некоторые модули PHP, необходимые для фреймворка. Мы будем использовать apt для установки модулей PHP. Эти расширения PHP обеспечивают дополнительную поддержку обработки кодировки символов, XML и точной математики. Если вы впервые используете apt в этом сеансе, вам следует сначала запустить команду update, чтобы обновить кеш менеджера пакетов:
sudo apt update
Теперь вы можете установить необходимые пакеты с помощью:
sudo apt install php-mbstring php-xml php-bcmath
Теперь система готова к установке Laravel через Composer, но перед этим вам понадобится база данных для вашего приложения.
Создайте базу данных для приложения
Чтобы продемонстрировать базовую установку и использование Laravel, мы создадим пример приложения со списком поездок, чтобы показать список мест, которые пользователь хотел бы посетить, и список мест, которые он уже посетил. Это можно сохранить в простой таблице мест с полем для местоположений, которое мы назовем именем, и другим полем, чтобы пометить их как посещенные или не посещенные, которые мы назовем посещенными. Кроме того, мы добавим поле идентификатора для уникальной идентификации каждой записи. Чтобы подключиться к базе данных из приложения Laravel, мы создадим выделенного пользователя MySQL и предоставим этому пользователю все привилегии в базе данных travel_list.
Затем войдите в MySQL как root:
sudo mysql
Или, если вы следовали нашему руководству по установке LEMP, как указано в предварительных требованиях:
sudo mysql -u root -p
Создайте новую базу данных:
CREATE DATABASE travel_list;
Теперь вы можете создать нового пользователя и предоставить ему полные права доступа к пользовательской базе данных, которую вы только что создали. В этом примере мы создаем пользователя с именем travel_user с паролем по вашему выбору, хотя вы должны изменить его на безопасный пароль по вашему выбору:
GRANT ALL ON travel_list.* TO 'travel_user'@'localhost' IDENTIFIED BY 'TUA_PASSWORD' WITH GRANT OPTION;
Это даст пользователю travel_user полные привилегии в базе данных travel_list, не позволяя этому пользователю создавать или изменять другие базы данных на сервере. Затем выйдите из оболочки MySQL:
exit;
Теперь вы можете попробовать войти в MySQL с помощью только что созданного пользователя:
mysql -u travel_user -p
Обратите внимание на флаг -p в этой команде, который запросит у вас пароль, используемый при создании пользователя travel_user. После входа в консоль MySQL подтвердите, что у вас есть доступ к базе данных travel_list:
SHOW DATABASES;
Вы должны получить выходное сообщение, подобное следующему:
+--------------------+
| Database |
+--------------------+
| information_schema |
| travel_list |
+--------------------+
2 rows in set (0.01 sec)
Затем создайте таблицу с именем places в базе данных travel_list. В консоли MySQL выполните следующее объявление:
CREATE TABLE travel_list.places (
id INT AUTO_INCREMENT,
name VARCHAR(255),
visited BOOLEAN,
PRIMARY KEY(id)
);
Давайте заполним таблицу places образцами данных:
INSERT INTO travel_list.places (name, visited)
VALUES ("Tokyo", false),
("Budapest", true),
("Nairobi", false),
("Berlin", true),
("Lisbon", true),
("Denver", false),
("Moscow", false),
("Olso", false),
("Rio", true),
("Cincinati", false);
Подтвердите, что запись прошла успешно:
SELECT * FROM travel_list.places;
Вы должны получить выходное сообщение, подобное следующему:
+----+-----------+---------+
| id | name | visited |
+----+-----------+---------+
| 1 | Tokyo | 0 |
| 2 | Budapest | 1 |
| 3 | Nairobi | 0 |
| 4 | Berlin | 1 |
| 5 | Lisbon | 1 |
| 6 | Denver | 0 |
| 7 | Moscow | 0 |
| 8 | Oslo | 0 |
| 9 | Rio | 1 |
| 10 | Cincinati | 0 |
+----+-----------+---------+
10 rows in set (0.00 sec)
Теперь давайте выйдем из MySQL:
exit
Создайте приложение Laravel
Теперь вы создадите новое приложение Laravel с помощью команды composer. Эта команда Composer обычно используется для запуска новых приложений на основе существующих платформ и систем управления контентом. В этом руководстве мы будем использовать travel_list в качестве примера приложения. Приложение travel_list отобразит список местоположений, извлеченный из локального сервера MySQL, предназначенный для демонстрации базовой конфигурации Laravel и подтверждения того, что вы можете подключиться к базе данных. Сначала перейдите в домашний каталог вашего пользователя:
cd ~
Следующая команда создаст новый каталог travel_list, содержащий приложение Laravel по умолчанию:
composer create-project --prefer-dist laravel/laravel travel_list
Вы должны получить выходное сообщение, подобное следующему:
Installing laravel/laravel (v5.8.17)
- Installing laravel/laravel (v5.8.17): Downloading (100%)
Created project in travel_list
> @php -r "file_exists('.env') || copy('.env.example', '.env');"
Loading composer repositories with package information
Updating dependencies (including require-dev)
Package operations: 80 installs, 0 updates, 0 removals
- Installing symfony/polyfill-ctype (v1.11.0): Downloading (100%)
- Installing phpoption/phpoption (1.5.0): Downloading (100%)
- Installing vlucas/phpdotenv (v3.4.0): Downloading (100%)
- Installing symfony/css-selector (v4.3.2): Downloading (100%)...
После завершения установки перейдите в каталог приложения и запустите команду Laravel artisan, чтобы убедиться, что все компоненты установлены правильно:
cd travel_list
php artisan
Вы должны получить выходное сообщение, подобное следующему:
Laravel Framework 5.8.29
Usage:
command [options] [arguments]
Options:
-h, --help Display this help message
-q, --quiet Do not output any message
-V, --version Display this application version
--ansi Force ANSI output
--no-ansi Disable ANSI output
-n, --no-interaction Do not ask any interactive question
--env[=ENV] The environment the command should run under
-v|vv|vvv, --verbose Increase the verbosity of messages: 1 for normal output, 2 for more verbose output and 3 for debug
(...)
Этот вывод подтверждает, что файлы приложения присутствуют и что инструменты командной строки Laravel работают должным образом. Однако нам все еще нужно настроить приложение для настройки базы данных и некоторых других деталей.
Настроить Laravel
Файлы конфигурации Laravel расположены в каталоге с именем config в корневом каталоге приложения. Также при установке Laravel с Composer создается файл окружения. Этот файл содержит настройки, характерные для текущей среды, в которой работает приложение, и будет иметь приоритет над значениями, установленными в обычных файлах конфигурации, расположенных в каталоге конфигурации. Для каждой установки в новой среде требуется настраиваемый файл среды для определения таких элементов, как параметры подключения к базе данных, параметры отладки, URL-адрес приложения и другие элементы, которые могут различаться в зависимости от среды, в которой оно находится.
Теперь мы изменим файл .env, чтобы настроить параметры конфигурации для текущей среды приложения. Откройте файл .env:
nano.env
Хотя в этом файле много переменных конфигурации, сейчас нет необходимости настраивать их все. Следующий список содержит обзор переменных, требующих немедленного внимания:
- APP_NAME: имя приложения, используемое для уведомлений и сообщений.
- APP_ENV: текущая среда приложения.
- APP_KEY: используется для генерации солей и хэшей. Этот уникальный ключ создается автоматически при установке Laravel через Composer, поэтому его не нужно менять.
- APP_DEBUG: показывать или нет отладочную информацию на стороне клиента.
- APP_URL: базовый URL-адрес приложения, используемый для создания ссылок на приложения.
- DB_DATABASE: имя базы данных.
- DB_USERNAME: имя пользователя для подключения к базе данных.
- DB_PASSWORD: пароль для подключения к базе данных.
По умолчанию эти значения настроены для локальной среды разработки с использованием Homestead, предварительно упакованного пакета Vagrant, предоставляемого Laravel. Если вы устанавливаете Laravel в среде разработки или тестирования, вы можете оставить параметр APP_DEBUG включенным, так как это предоставит важную отладочную информацию при тестировании приложения из браузера. В этом случае переменная APP_ENV должна быть установлена на разработку или тестирование. Если вы устанавливаете Laravel в рабочей среде, вам необходимо отключить параметр APP_DEBUG, так как он показывает пользователю конфиденциальную информацию о приложении. APP_ENV в этом случае должен быть настроен на производство. Следующий файл.env настраивает наш пример приложения для разработки. Переменная APP_KEY содержит уникальный ключ, который был автоматически сгенерирован при установке Laravel через Composer. Нет необходимости изменять это значение. Если вы хотите сгенерировать новый ключ безопасности, вы можете использовать следующую команду:
php artisan key:generate
Измените следующие параметры на их собственные значения:
APP_NAME=TravelList
APP_ENV=development
APP_KEY=APPLICATION_UNIQUE_KEY_DONT_COPY
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=travel_list
DB_USERNAME=travel_user
DB_PASSWORD=password...
Когда вы закончите редактирование, сохраните и закройте файл, чтобы сохранить изменения. Если вы используете nano, вы можете сделать это с помощью CTRL + X, затем Y и Enter для подтверждения. Приложение Laravel теперь настроено, но веб-сервер все еще необходимо настроить, чтобы иметь доступ к нему из браузера.
Настроить Nginx
Мы установили Laravel в локальную папку домашнего каталога удаленного пользователя, и, хотя он отлично работает для локальных сред разработки, это не рекомендуется для веб-серверов, открытых для общедоступного Интернета. Мы переместим папку приложения в /var/www, это обычное место для веб-приложений, работающих на Nginx.
Используйте команду mv, чтобы переместить приложение в другую папку:
sudo mv ~/travel_list /var/www/travel_list
Теперь нам нужно дать пользователю доступ на запись к папкам хранилища и кеша, где Laravel хранит файлы, сгенерированные приложением:
sudo chown -R www-data.www-data /var/www/travel_list/storage
sudo chown -R www-data.www-data /var/www/travel_list/bootstrap/cache
Создайте новый файл виртуального хоста для Nginx:
sudo nano /etc/nginx/sites-available/travel_list
Введите следующие конфигурации, изменив server_name и корневой каталог, если у приложения другое имя:
server {
listen 80;
server_name server_domain_or_IP;
root /var/www/travel_list/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.2-fpm.sock;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $realpath_root$fastcgi_script_name;
include fastcgi_params;
}
location ~ /\.(?!well-known).* {
deny all;
}
}
Сохраните и закройте файл после завершения редактирования. Чтобы активировать новый файл конфигурации виртуального хоста, создайте символическую ссылку на travel_list на включенных сайтах:
sudo ln -s /etc/nginx/sites-available/travel_list /etc/nginx/sites-enabled/
Если у вас есть другой файл виртуального хоста, ранее настроенный для того же имени server_name, которое используется в виртуальном хосте travel_list, вам может потребоваться отключить старую конфигурацию, удалив соответствующую символическую ссылку в /etc/nginx/sites-enabled/, или отредактировать поле server_name старой конфигурации можно в качестве параметра вставить _ затем имя_сервера_;
Чтобы подтвердить правильную конфигурацию Nginx:
sudo nginx -t
Вы должны получить выходное сообщение, подобное следующему:
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful
Чтобы изменения вступили в силу, перезапустите Nginx:
sudo systemctl reload nginx
Теперь откройте браузер и войдите в приложение, используя доменное имя или IP-адрес сервера, как указано в директиве server_name в вашем файле конфигурации travel_list:
http://server_domain_or_IP
Вы должны увидеть страницу с надписью Laravel
Это подтверждает, что ваш сервер Nginx правильно настроен для обслуживания Laravel. С этого момента вы можете начать создавать свое приложение. На следующем шаге мы изменим основной маршрут приложения для запроса данных в базе данных.
Изменить домашнюю страницу
Предполагая, что вы выполнили все шаги в этом руководстве до сих пор, у вас должно быть работающее приложение Laravel и таблица базы данных с именем places, содержащая некоторые примеры данных. Теперь мы изменим основной путь приложения для запроса базы данных.
Откройте основной файл приложения:
nano routes/web.php
Маршруты определяются внутри этого файла с помощью статического метода Route::get, который принимает в качестве аргументов маршрут и функцию обратного вызова. Следующий код заменяет функцию обратного вызова основного пути. Замените содержимое открытого файла следующим:
<?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('travel_list', ['visited' => $visited, 'togo' => $togo ] );
});
?>
Этот скрипт выполняет 2 запроса к базам данных, используя флаг посещения для фильтрации результатов. Возвращает результаты в представлении с именем travel_list, которое мы создадим позже.
Сохраните и закройте файл после завершения редактирования. Теперь мы создадим представление, которое покажет пользователю результаты запроса. Создайте новый файл представления внутри ресурсов/представлений:
nano resources/views/travel_list.blade.php
Скопируйте и вставьте следующий код во вновь созданный файл:
<html>
<head>
<title>Travel List</title>
</head>
<body>
<h1>My Travel Bucket List</h1>
<h2>Places I'd Like to Visit</h2>
<ul>
@foreach ($togo as $newplace)
<li>{{ $newplace->name }}</li>
@endforeach
</ul>
<h2>Places I've Already Been To</h2>
<ul>
@foreach ($visited as $place)
<li>{{ $place->name }}</li>
@endforeach
</ul>
</body>
</html>
Сохраните и закройте файл, когда закончите. Теперь зайдите в браузер и перезагрузите приложение. Вы увидите только что созданную страницу с двумя списками, сгенерированными ранее заданными запросами. Теперь у вас есть функциональное приложение Laravel, которое извлекает содержимое из базы данных MySQL.
Вывод
В этом руководстве вы настроили новое приложение Laravel в стеке LEMP (Linux, Nginx, MySQL и PHP), работающее на сервере Ubuntu 18.04. Для дополнительной безопасности вам следует рассмотреть возможность установки сертификата TLS/SSL для вашего сервера, что позволит вам публиковать контент через HTTPS. С этой целью вы можете следовать нашему руководству «Как установить Let’s Encrypt для Nginx в Ubuntu 18.04 LTS».