Введение:
Стек LEMP - это группа программ, которые могут использоваться для обслуживания динамических страниц и приложений, написанных на PHP.В аббревиатуре каждая буква отвечает за отдельную программу:L-Linux,E-Engine-X,M-MySQL,P-PHP.
Эта статья поможет вам установить LEMP на Ubuntu 20.04.
В Serverspace вы можете создать сервер с уже установленным приложением LEMP.
Установка Nginx сервера
Обновим пакеты сервера:
sudo apt update
После этого,установим Nginx:
sudo apt install nginx
При появлении запроса введите Y, чтобы подтвердить, что вы хотите установить Nginx. После завершения установки веб-сервер Nginx будет активен и запущен на вашем сервере Ubuntu 20.04.
Далее,проверяем включенные профили UFW:
sudo ufw app list
Вам вылезет окно с доступными приложениями:
Available applications:
Nginx Full
Nginx HTTP
Nginx HTTPS
OpenSSH
Рекомендуем включить самый строгий профиль,который будет пропускать необходимый трафик:
sudo ufw allow 'Nginx HTTP'
Проверим изменения:
sudo ufw status
Вам должны вылезти следующие команды,которые покажут,что HTTP-трафик,теперь разрешен:
Status: active
To Action From
-- ------ ----
OpenSSH ALLOW Anywhere
Nginx HTTP ALLOW Anywhere
OpenSSH (v6) ALLOW Anywhere (v6)
Nginx HTTP (v6) ALLOW Anywhere (v6)
Затем,введите домен или IP адрес в браузере и вас перенаправит на целевую страницу Nginx по умолчанию:
http://domen_or_IP_adress
Если вы видите эту страницу, это означает, что вы успешно установили Nginx и включили HTTP-трафик для вашего сервера:
Установка MySQL
Установим базу данных MySQL,чтобы иметь возможность хранить и управлять данными для нашего сайта. Сделаем это с помощью данных команд:
<span>sudo apt install mysql-server</span>
При появлении запроса подтвердите установку, введя Y, а затем введите ENTER.
Когда установка будет завершена, рекомендуем запустить сценарий безопасности, который предварительно идет вместе с MySQL. Этот скрипт удалит некоторые небезопасные настройки по умолчанию и заблокирует доступ к вашей системе баз данных:
sudo mysql_secure_installation
Отвечаем на задаваемые вопросы:
VALIDATE PASSWORD PLUGIN can be used to test passwords
and improve security. It checks the strength of password
and allows the users to set only those passwords which are
secure enough. Would you like to setup VALIDATE PASSWORD plugin?
Press y|Y for Yes, any other key for No: Y
There are three levels of password validation policy:
LOW Length >= 8
MEDIUM Length >= 8, numeric, mixed case, and special characters
STRONG Length >= 8, numeric, mixed case, special characters and dictionary file
Please enter 0 = LOW, 1 = MEDIUM and 2 = STRONG: 1
Имейте в виду, что если вы введете 2 для самого сильного уровня, вы получите ошибки при попытке установить любой пароль, который не содержит цифр, прописных и строчных букв и специальных символов.
После,вас попросят повторить пароль,который не следует путать с системным паролем.Системный пароль-пароль от административного пользователя,у которого есть полный доступ к системе баз данных. Несмотря на то, что метод аутентификации по умолчанию, для пользователя MySQL root, исключает использование пароля, даже если он установлен, вы должны определить надежный пароль здесь в качестве дополнительной меры безопасности.
Если вы включили проверку пароля, вам будет показана сила пароля, и ваш сервер спросит, хотите ли вы продолжить работу с этим паролем. Если вы довольны своим текущим паролем, введите Y для подтверждения:
Estimated strength of the password: 100
Do you wish to continue with the password provided?(Press y|Y for Yes, any other key for No) : y
Для остальных вопросов нажмите Y и нажмите клавишу ENTER. Это позволит удалить некоторых анонимных пользователей и тестовую базу данных, отключить удаленные корневые логины и загрузить эти новые правила, чтобы MySQL немедленно принял внесенные вами изменения.
Когда вы закончите, проверьте, можете ли вы войти в консоль MySQL, с помощью:
sudo mysql
Это позволит подключиться к серверу MySQL в качестве администратора базы данных.Результат должен выглядеть так:
Welcome to the MySQL monitor. Commands end with ; or g.
Your MySQL connection id is 22
Server version: 8.0.19-0ubuntu5 (Ubuntu)
Copyright (c) 2000, 2020, Oracle and/or its affiliates. All rights reserved.
Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.
Type 'help;' or 'h' for help. Type 'c' to clear the current input statement.
mysql>
Чтобы выйти из MySQL,используем:
mysql> exit
Для повышения безопасности рекомендуем иметь выделенные учетные записи пользователей с менее широкими привилегиями, настроенными для каждой базы данных, особенно если вы планируете иметь несколько баз данных, размещенных на вашем сервере.
Теперь ваш сервер MySQL установлен и защищен.
Установка PHP
Установим PHP для обработки кода и создания динамического контента сервера.
Чтобы установить пакеты php-fpm и php-mysql, выполним следующие команды:
sudo apt install php-fpm php-mysql
При появлении запроса введите Y и ENTER для подтверждения установки.
Теперь у нас есть установленные компоненты PHP.
Настройка Nginx
При использовании сервера Nginx мы можем создавать серверные блоки (аналогичные виртуальным хостам в Apache) для упаковки в единый пакет сведений о конфигурации и размещения нескольких доменов на одном сервере. В этой инструкции мы будем использовать vash_domen в качестве примера доменного имени.
В Ubuntu 20.04 Nginx имеет один серверный блок, включенный по умолчанию, и настроен для обслуживания документов из каталога в /var / www / html. Хотя это хорошо работает для одного сайта, это может стать трудным для управления, если вы размещаете несколько сайтов.Создадим структуру каталогов в /var /www для веб-сайта vash_domen, оставив/var/www / html в качестве каталога по умолчанию, который будет обслуживаться, если запрос клиента не соответствует каким-либо другим сайтам.
Создаем корневой каталог для vash_domen:
sudo mkdir /var/www/vash_domen
Затем,назначим владельцу каталога переменную $USER, которая будет ссылаться на текущего системного пользователя:
sudo chown -R $USER:$USER /var/www/vash_domen
Затем откроем новый конфигурационный файл в каталоге nginx sites-available, используя любой редактор командной строки. Здесь мы будем использовать nano:
sudo nano /etc/nginx/sites-available/vash_domen
Создастся новый пустой файл,в который нужно будет вставить следующие строки:
server {
listen 80;
server_name vash_domen www.vash_domen;
root /var/www/vash_domen;
index index.html index.htm index.php;
location / {
try_files $uri $uri/ =404;
}
location ~ .php$ {
include snippets/fastcgi-php.conf;
fastcgi_pass unix:/var/run/php/php7.4-fpm.sock;
}
location ~ /.ht {
deny all;
}
}
После редактирование, сохраним и закроем файл. Если вы использовали nano, вы можете сделать это, введя CTRL+X, а затемY и ENTER для подтверждения.
Активируем свою конфигурацию, с помощью конфигурационного файла из каталога nginx sites-enabled:
sudo ln -s /etc/nginx/sites-available/vash_domen /etc/nginx/sites-enabled/
Это подскажет Nginx какую использовать конфигурацию в следующий раз, когда она будет перезагружена. Вы можете проверить свою конфигурацию на наличие ошибок,с помощью:
sudo nginx -t
Если вы обнаружите какие-либо ошибки, вернитесь к своему конфигурационному файлу, чтобы просмотреть его содержимое, прежде чем продолжить работу
Перезагрузим Nginx для того чтобы все изменения применились:
sudo systemctl reload nginx
Наш новый сайт теперь активен, но корень /var/www/vash_domen по-прежнему пуст. Создадим файл index.html в этом месте, чтобы мы могли проверить, что наш новый серверный блок работает так, как ожидалось:
nano /var/www/vash_domen/index.html
Добавляем в файл следующие строки:
Теперь перейдем в браузер и получим подключимся через доменное имя или IP-адрес вашего сервера:
http://domen_swrvera_ili_IP_adress
Если вы увидите данное изображение,значит ваш серверный блок Nginx работает:
Вы можете оставить этот файл на месте в качестве временной целевой страницы для вашего приложения, пока не настроите index.php file для его замены. Как только вы сделаете это, не забудьте удалить или переименовать index.html file из корня вашего документа, так как он будет иметь приоритет по умолчанию.
Теперь ваш стек LEMP полностью настроен.
Проверяем работу PHP совместно с Nginx
Проверить работу вашего стека LEMP для того,чтобы проверить, что Nginx может правильно передавать .php files на ваш PHP-процессор.
Сделаем это,открыв новый файл под названием info.php в любом текстовом редакторе:
nano /var/www/vash_domen/info.php
Вводим следующие строки в новый файл. Это действительный PHP код, который будет возвращать информацию о вашем сервере:
После этого,сохраним и закроем файл.Если вы использовали nano, вы можете сделать это, введя CTRL+X, а затемY и ENTER для подтверждения.
Теперь,получим доступ,подключившись через браузер,используя домен или IP адресс.
http://domen_servera_ili_IP_adress/info.php
Нам покажется страницу, содержащая подробную информацию о нашем сервере:
После проверки соответствующей информации о вашем PHP-сервере на этой странице,лучше всего удалить созданный вами файл, так как он содержит конфиденциальную информацию. Сделаем это с помощью следующей команды:
<span>sudo rm /var/www/vash_domen</span><span>/info.php</span>
Вы всегда можете восстановить этот файл, если он вам понадобится позже.
Проверяем подключение к базе данных
Если вы хотите проверить, способен ли PHP подключаться к MySQL и выполнять запросы к базе данных,нужно создать тестовую таблицу и запросить ее содержимое из PHP-скрипта. Прежде чем мы сможем это сделать, нам нужно создать тестовую базу данных и нового пользователя MySQL, правильно настроенного для доступа к ней.
Мы создадим базу данных с именем primer_database и пользователя с именем primer_user, но вы можете изменить эти название на ваше усмотрение.
Сначала,подключимся к MySQL
sudo mysql
Чтобы создать новую базу данных, выполним следующую команду:
mysql> CREATE DATABASE primer_database;
Теперь создадим нового пользователя,с необходимыми правами,с помощью следующей команды.Мы используем "very_strong_password",как пароль для нового пользователя, но вы должны заменить это значение безопасным паролем по вашему собственному выбору:
mysql> CREATE USER 'primer_user'@'%' IDENTIFIED WITH very_strong_password BY 'password';
Теперь даем пользователю права на использование базы данных:
mysql> GRANT ALL ON primer_database.* TO 'primer_user'@'%';
Это даст пользователю полные права доступа к базе данных, а также запретит создавать или изменять другие базы данных на вашем сервере.
После этого,выходим из MySQL с помощью команды:
mysql> exit
Вы можете проверить, есть ли у нового пользователя соответствующие права, снова войдя в консоль MySQL, с использованием пользовательских учетных данных:
sudo mysql
mysql -u primer_user -p
После входа в консоль MySQL убедитесь, что у вас есть доступ к базе данных:
mysql> SHOW DATABASES;
Если все работает вам выдаст следующий текст:
+--------------------+
| Database |
+--------------------+
| example_database |
| information_schema |
+--------------------+
2 rows in set (0.000 sec)
Далее,создаем тестовую таблицу с именем zadanii_list:
mysql> CREATE TABLE primer_database.zadanii_list (
mysql> item_id INT AUTO_INCREMENT
mysql> content VARCHAR(255)
mysql> PRIMARY KEY(item_id)
mysql> );
Вставляем несколько строк содержимого в тестовую таблицу:
mysql> INSERT INTO primer_database.zadanii_list (content) VALUES ("Chto-to vaznoe")
Чтобы подтвердить, сохраненные данные в нашей таблице, запустим ее:
+---------+--------------------------+
| item_id | content |
+---------+--------------------------+
| 1 | Chto-to vazhnoe | |
+---------+--------------------------+
1 row in set (0.000 sec)
Убедившись, что в тестовой таблице у нас есть действительные данные,выходим из консоли MySQL:
mysql> exit
Теперь мы можем создать скрипт PHP, который будет подключаться к MySQL и запрашивать наш контент. Создаем новый PHP-файл в своем пользовательском каталоге, используя предпочитаемый вами редактор. Мы будем использовать nano для этого:
nano /var/www/vash_domen/zadanii_list.php
Вставим следующий текст в наш скрипт zadanii_list.php:
После этого,сохраним и закроем файл.Если вы использовали nano, вы можете сделать это, введя CTRL+X, а затемY и ENTER для подтверждения.
Теперь мы можем получить доступ к этой странице в своем браузере,вбив имя домена или IP-адрес, настроенный для вашего сайта, а затем /zadanii_ist.php:
http://vash_domen_ili_IP/zadanii_list.php
Если все работает правильно,мы увидим следующий текст:
Это означает, что наш PHP готов для подключения и взаимодействия с нашим сервером MySQL.
Вывод:
В этом руководстве мы создали гибкую основу для обслуживания сайтов и приложений PHP для ваших посетителей, используя Nginx в качестве сервера и MySQL в качестве системы баз данных.