Как установить и настроить Laravel с LEMP в Ubuntu 18.04

Вступление

Laravel - это PHP-фреймворк с открытым исходным кодом, который предоставляет набор инструментов и ресурсов для создания современных PHP-приложений. Благодаря тому, чтоcomplete ecosystem использует свои встроенные функции, популярность Laravel стремительно росла за последние несколько лет, и многие разработчики приняли его в качестве своей структуры выбора для упрощенного процесса разработки.

В этом руководстве вы установите и настроите новое приложение Laravel на сервере Ubuntu 18.04, используяComposer для загрузки зависимостей фреймворка и управления ими. Когда вы закончите, у вас будет функциональное демонстрационное приложение Laravel, извлекающее контент из базы данных MySQL.

Предпосылки

Чтобы выполнить это руководство, вам сначала необходимо выполнить следующие задачи на сервере Ubuntu 18.04:

[[step-1 -—- install-required-php-modules]] == Шаг 1. Установка необходимых модулей PHP

Прежде чем вы сможете установить Laravel, вам нужно установить несколько модулей PHP, которые требуются для фреймворка. Мы будем использоватьapt для установки модулей PHPphp-mbstring,php-xml иphp-bcmath. Эти расширения PHP обеспечивают дополнительную поддержку для работы с кодировкой символов, XML и точной математикой.

Еслиapt в этом сеансе используется впервые, вы должны сначала запустить командуupdate, чтобы обновить кеш диспетчера пакетов:

sudo apt update

Теперь вы можете установить необходимые пакеты с помощью:

sudo apt install php-mbstring php-xml php-bcmath

Теперь ваша система готова выполнить установку Laravel через Composer, но для этого вам понадобится база данных для вашего приложения.

[[step-2 -—- Creating-a-database-for-the-application]] == Шаг 2 - Создание базы данных для приложения

Чтобы продемонстрировать базовую установку и использование Laravel, мы создадим пример приложенияtravel list, чтобы показать список мест, куда пользователь хотел бы отправиться, и список мест, которые он уже посетил. Это можно сохранить в простой таблицеplaces с полем для местоположений, которое мы назовемname, и другим полем, чтобы пометить их какvisited илиnot visited, которые мы ' Я позвонюvisited. Кроме того, мы добавим полеid для уникальной идентификации каждой записи.

Чтобы подключиться к базе данных из приложения Laravel, мы создадим специального пользователя MySQL и предоставим этому пользователю полные права доступа к базе данныхtravel_list.

Для начала войдите в консоль MySQL как пользователь базы данныхroot с помощью:

sudo mysql

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

CREATE DATABASE travel_list;

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

GRANT ALL ON travel_list.* TO 'travel_user'@'localhost' IDENTIFIED BY 'password' WITH GRANT OPTION;

Это предоставит пользователюtravel_user полные привилегии над базой данныхtravel_list, не позволяя этому пользователю создавать или изменять другие базы данных на вашем сервере.

После этого выйдите из оболочки MySQL:

exit

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

mysql -u travel_user -p

Обратите внимание на флаг-p в этой команде, который запросит у вас пароль, используемый при создании пользователяtravel_user. После входа в консоль MySQL убедитесь, что у вас есть доступ к базе данныхtravel_list:

SHOW DATABASES;

Это даст вам следующий вывод:

Output+--------------------+
| 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),
("Oslo", false),
("Rio", true),
("Cincinati", false),
("Helsinki", false);

Чтобы подтвердить, что данные были успешно сохранены в вашей таблице, выполните:

SELECT * FROM travel_list.places;

Вы увидите вывод, похожий на этот:

Output+----+-----------+---------+
| 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 |
| 11 | Helsinki  |       0 |
+----+-----------+---------+
11 rows in set (0.00 sec)

Убедившись, что в тестовой таблице у вас есть действительные данные, вы можете выйти из консоли MySQL:

exit

Теперь вы готовы создать приложение и настроить его для подключения к новой базе данных.

[[step-3 -—- created-a-new-laravel-application]] == Шаг 3 - Создание нового приложения Laravel

Теперь вы создадите новое приложение Laravel с помощью командыcomposer create-project. Эта команда Composer обычно используется для начальной загрузки новых приложений на основе существующих платформ и систем управления контентом.

В этом руководстве мы будем использоватьtravel_list в качестве примера приложения, но вы можете изменить его на что-нибудь другое. Приложениеtravel_list отобразит список расположений, взятых с локального сервера MySQL, предназначенный для демонстрации базовой конфигурации Laravel и подтверждения того, что вы можете подключиться к базе данных.

Сначала перейдите в домашний каталог вашего пользователя:

cd ~

Следующая команда создаст новый каталогtravel_list, содержащий базовое приложение Laravel на основе настроек по умолчанию:

composer create-project --prefer-dist laravel/laravel travel_list

Вы увидите вывод, похожий на этот:

OutputInstalling 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%)
...

Когда установка будет завершена, войдите в каталог приложения и запустите команду Laravelartisan, чтобы убедиться, что все компоненты были успешно установлены:

cd travel_list
php artisan

Вы увидите вывод, похожий на этот:

OutputLaravel 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 работают должным образом. Однако нам все еще нужно настроить приложение для настройки базы данных и некоторых других деталей.

[[step-4 -—- configuring-laravel]] == Шаг 4. Настройка Laravel

Файлы конфигурации Laravel находятся в каталоге под названиемconfig внутри корневого каталога приложения. Кроме того, когда вы устанавливаете Laravel с Composer, он создаетenvironment file. Этот файл содержит параметры, относящиеся к текущей среде, в которой работает приложение, и будет иметь приоритет над значениями, установленными в обычных файлах конфигурации, расположенных в каталогеconfig. Для каждой установки в новой среде требуется специальный файл среды для определения таких параметров, как параметры подключения к базе данных, параметры отладки, URL-адрес приложения и другие элементы, которые могут различаться в зависимости от среды, в которой выполняется приложение.

[.warning] #Warning: файл конфигурации среды содержит конфиденциальную информацию о вашем сервере, включая учетные данные базы данных и ключи безопасности. По этой причине вы никогда не должны публиковать этот файл публично.
#

Теперь мы отредактируем файл.env, чтобы настроить параметры конфигурации для текущей среды приложения.

Откройте файл.env с помощью выбранного редактора командной строки. Здесь мы будем использоватьnano:

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 в средеdevelopment илиtesting, вы можете оставить опциюAPP_DEBUG включенной, так как это даст вам важную отладочную информацию при тестировании приложения из браузера. В этом случае переменнаяAPP_ENV должна быть установлена ​​наdevelopment илиtesting.

Если вы устанавливаете Laravel в средеproduction, вам следует отключить опциюAPP_DEBUG, потому что она показывает конечному пользователю конфиденциальную информацию о вашем приложении. APP_ENV в этом случае следует установить наproduction.

Следующий файл.env устанавливает наше примерное приложение дляdevelopment:

[.note] #Note: ПеременнаяAPP_KEY содержит уникальный ключ, который был автоматически сгенерирован при установке Laravel через Composer. Вам не нужно менять это значение. Если вы хотите сгенерировать новый ключ безопасности, вы можете использовать командуphp artisan key:generate.
#

/var/www/travel_list/.env

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.

[[step-5 -—- setting-up-nginx]] == Шаг 5. Настройка Nginx

Мы установили Laravel в локальную папку домашнего каталога вашего удаленного пользователя, и хотя это хорошо работает для локальных сред разработки, это не рекомендуется для веб-серверов, которые открыты для общедоступного Интернета. Мы переместим папку приложения в/var/www, которое является обычным местом для веб-приложений, работающих на Nginx.

Сначала используйте командуmv, чтобы переместить папку приложения со всем ее содержимым в/var/www/travel_list:

sudo mv ~/travel_list /var/www/travel_list

Теперь нам нужно предоставить пользователю веб-сервера доступ на запись к папкамstorage иcache, где 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 для обслуживания контента. Для этого мы создадим новый файл конфигурации виртуального хоста в/etc/nginx/sites-available:

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

Следующий файл конфигурации содержит настройкиrecommended для приложений Laravel на Nginx:

/etc/nginx/sites-available/travel_list

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;
    }
}

Скопируйте это содержимое в свой файл/etc/nginx/sites-available/travel_list и, при необходимости, отрегулируйте выделенные значения, чтобы они соответствовали вашей собственной конфигурации. Сохраните и закройте файл, когда вы закончите редактирование.

Чтобы активировать новый файл конфигурации виртуального хоста, создайте символическую ссылку наtravel_list вsites-enabled:

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

[.note] #Note: Если у вас есть другой файл виртуального хоста, который ранее был настроен для того жеserver_name, который использовался на виртуальном хостеtravel_list, вам может потребоваться деактивировать старую конфигурацию, удаление соответствующей символической ссылки внутри/etc/nginx/sites-enabled/.
#

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

sudo nginx -t

Вы должны увидеть результат примерно так:

Outputnginx: 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 в вашем файле конфигурации:

http://server_domain_or_IP

Вы увидите страницу, подобную этой:

Laravel splash page

Это подтверждает, что ваш сервер Nginx правильно настроен для обслуживания Laravel. С этого момента вы можете приступить к созданию приложения поверх скелета, предоставляемого установкой по умолчанию.

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

[[step-6 -—- customizing-the-main-page]] == Шаг 6 - Настройка главной страницы

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

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

Откройте основной файл маршрутаroutes/web.php:

nano routes/web.php

Этот файл поставляется по умолчанию со следующим содержимым:

routes/web.php

Маршруты определяются в этом файле с помощью статического методаRoute::get, который принимает в качестве аргументовpath иcallback function.

Следующий код заменяет функцию обратного вызова основного маршрута. Он выполняет 2 запроса к базе данных, используя флагvisited для фильтрации результатов. Он возвращает результаты в представление с именемtravel_list, которое мы собираемся создать дальше. Скопируйте это содержимое в свой файлroutes/web.php, заменив уже существующий код:

routes/web.php

 $visited, 'togo' => $togo ] );
});

Сохраните и закройте файл, когда вы закончите редактирование. Теперь мы создадим представление, которое будет отображать результаты базы данных пользователю. Создайте новый файл представления внутриresources/views:

nano resources/views/travel_list.blade.php

Следующий шаблон создает два списка мест на основе переменныхvisited иtogo. Скопируйте этот контент в ваш новый файл представления:

resources/views/travel_list/blade.php



    Travel List



    

My Travel Bucket List

Places I'd Like to Visit

    @foreach ($togo as $newplace)
  • {{ $newplace->name }}
  • @endforeach

Places I've Already Been To

    @foreach ($visited as $place)
  • {{ $place->name }}
  • @endforeach

Сохраните и закройте файл, когда вы закончите. Теперь зайдите в ваш браузер и перезагрузите приложение. Вы увидите страницу, подобную этой:

Demo Laravel Application

Теперь у вас есть функциональное приложение Laravel, извлекающее содержимое из базы данных MySQL.

Заключение

В этом руководстве вы создали новое приложение Laravel поверх стека LEMP (Linux, Nginx, MySQL и PHP), работающее на сервере Ubuntu 18.04. Вы также настроили маршрут по умолчанию для запроса содержимого базы данных и отображения результатов в настраиваемом представлении.

Отсюда вы можете создавать новые маршруты и представления для любых дополнительных страниц, которые нужны вашему приложению. Обратитесь к официальной документации Laravel для получения дополнительной информации оroutes,views иdatabase support. Если вы выполняете развертывание в производственной среде, вам также следует проверитьoptimization section, чтобы узнать о нескольких различных способах повышения производительности приложения.

Для повышения безопасности следует рассмотреть возможность установки сертификата TLS / SSL для вашего сервера, чтобы он мог обслуживать контент через HTTPS. С этой целью вы можете следовать нашему руководству поhow to secure your Nginx installation with Let’s Encrypt on Ubuntu 18.04.

Related