Установка LEMP
Установка и базовая настройка Nginx, php-fpm, MySQL на Centos 7
Al-Sher
Решил вот рассказать про установку и базовую настройку LEMP на VDS с Centos 7. В дальнейшем постараюсь написать и про настройку LEMP на Ubuntu, но, пока что, лишь это?.
Что такое LEMP?
Конечно же перед установкой следует разобрать вопрос, который звучит примерно так: "Что такое LEMP?". LEMP является набором приложений для Web-сайтов, использующий Nginx как Web-сервер. В данный набор обычно входят следующие приложения: Nginx, php(php-fpm), mysql/MariaDB.
Установка Nginx
Начнем мы с установки Nginx. Итак, давайте для начала добавим репозиторий Nginx на наш сервер. Для этого добавим в файл/etc/yum.repos.d/nginx.repoследующее содержимое:
[nginx]
name=nginx repo
baseurl=http://nginx.org/packages/centos/7/$basearch/
gpgcheck=0
enabled=1
Всё готово для установки, можно переходить к привычному yum:
yum install nginx
Запускаем nginx и добавляем его в автозапуск:
systemctl start nginx
systemctl enable nginx
Если nginx запустился без ошибок, то, при переходе на ip адрес сервера, вы получите приветствующее окно:
Если вдруг вы получаете ошибку, что сервер недоступен, то, скорее всего, закрыт 80 порт. Как открыть порты на сервере, используя firewalld, я описывал в прошлой статье, поэтому тут мы этот процесс пропустим и перейдем к установке mysql.
Установка Mysql
Для MySQL сервера я решил использоватьMariaDB, так как она не отличается по синтаксису от MySQL и лишь немного лучше по производительности.
В базовых репозиториях обычно присутствуетMariaDB, поэтому её установка не требует дополнительной подготовки. Установим же её:
yum install mariadb-server mariadb
Включаем и добавляем в автозапуск наш Mysql-сервер:
systemctl start mariadb
systemctl enable mariadb
Кстати, при установке Mysql пароль у root пользователя БД отключен, давайте реализуем базовую настройку с помощью скриптаmysql_secure_installation:
/usr/bin/mysql_secure_installation
Разумеется первым вопросом будет текущий пароль root пользователя. Нажимаем Enter, ведь пароль не установлен. Далее у нас спрашивают о том, а нужен ли вообще пароль администратору БД. Конечно же да! Вводим "y" и жмем кнопку ввода. Следующие два вопроса просят ввести новый пароль. Придумываем, вводим, жмем кнопку и подтверждаем пароль. Давайте заодно и заблокируем доступ для "анонимных" пользователей: вводим "y" на вопрос "Remove anonymous users?". Думаю пользователю root не следует подключаться с других серверов, поэтому на следующий вопрос "Disallow root login remotely?" вводим "y". Далее нас спросят, а не хотим ли мы удалить тестовую базу данных. Тут уж решайте сами?
Установка PHP
Для работы Nginx+php обычно используют php-fpm. Не будем отличаться от большинства и воспользуемся проверенным решением. Установим php-fpm:
yum install php php-fpm php-common
Так же, как и в предыдущих случаях, мы сразу же включим его и добавим в автозапуск:
systemctl start php-fpm
systemctl enable php-fpm
За php-fpm отвечает файл конфигурации, расположенный по пути/etc/php-fpm.d/www.conf. Настроим наш PHP. Для начала заставим его "слушать" сокеты. Ищем строку, похожую на
listen = 127.0.0.1:9000
и заменяем на
listen = /var/run/php-fpm/php-fpm.sock
Далее мы скажем от чьего имени запускаться php-fpm. Ищем
user = apache
group = apache
И заменяем на
user = nginx
group = nginx
Сохраняем изменения и перезапускаем php-fpm:
service php-fpm restart
Добавление хоста
Разумеется сайты не смогут определить какой из них вызывают, если не указать специальные настройки. Для настроек сайтов используют VirtualHost, который указывает на место хранения сайта на сервере(ну и другие настройки сайта).
Для начала создадим папку для сайта, а так же передадим nginx права на неё:
mkdir -p /var/www/site.ru
chown -R nginx:nginx /var/www/site.ru
В этой папке будет храниться наш сайт. Теперь настроим конфигурацию Nginx. Создаем файл/etc/nginx/conf.d/site.ru.conf и заполняем его следующим содержимым:
server {
server_name site.ru www.site.ru;
access_log /var/log/nginx/site.ru-access.log;
error_log /var/log/nginx/site.ru-error.log;
root /var/www/site.ru;
location / {
index index.html index.htm index.php;
}
location ~ .php$ {
include /etc/nginx/fastcgi_params;
fastcgi_pass unix:/var/run/php-fpm/php-fpm.sock;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME /var/www/site.ru$fastcgi_script_name;
}
}
Проверим корректность конфигурации nginx:
nginx -t
И, если всё хорошо, перезагружаем его:
service nginx restart
Проверка работоспособности хоста
Иногда возникают различные ошибки при настройке сайта, например сервер отдает ошибку 404 или 403, хотя, вроде бы, всё настроено правильно. Давайте проверим и php, и mysql.
Для проверки PHP легче всего произвести вывод конфигурации. Создадим файл phpinfo.php в каталоге нашего сайта. Его содержимое должно быть следующим:
<?php phpinfo();??>
Переходим на site.ru/phpinfo.php и смотрим, запустится ли скрипт. Если у вас возникли проблемы, вроде ошибок 404/403 или вообще отказался запускаться nginx, то, возможно, у вас включен SELinux. Возможно он и хорош, но, если его выключить, то такие ошибки встречаются реже?
Если вам не важен SELinux, то можно его временно отключить используя команду
setenforce 0
Если же вам всё же важен SELinux, то следует разрешить nginx и php-fpm работу с некоторыми каталогами(/var/log,/var/run,/var/www). Пример:
chcon -Rv --type=httpd_sys_content_t /var/log
Теперь время проверки mysql! Создадим базу данных для нашего сайта, но сначала необходимо авторизоваться в mysql:
mysql -uroot -p
Нас спросят пароль и, после его ввода, переведут в консоль mysql. Тут воспринимается обычный SQL, поэтому, если вы с ним знакомы, нам не составит труда создать БД и пользователя, управляющего ей.
Создаем БД site_ru:
CREATE DATABASE `site_ru` CHARACTER SET utf8 COLLATE utf8_unicode_ci;
Теперь пользователя site_ru с паролем testuser:
CREATE USER 'site_ru'@'localhost' IDENTIFIED BY 'testuser';
Ну и на последок дадим нашему пользователю site_ru права на соответствующую БД:
GRANT ALL PRIVILEGES ON site_ru.* TO 'site_ru'@'localhost';
Теперь настало время проверять работу php с mysql. Давайте реализуем простой скрипт, который будет добавлять строку со временем каждый раз, когда мы заходим на страницу. А так же, чтобы убедиться в его работоспособности, будем выводить последние 10 запросов.
Создадим таблицу to_site, в которой будут храниться данные. Воспользуемся следующим SQL запросом:
create table to_site (
id int(10) AUTO_INCREMENT,
time int(10) NOT NULL,
PRIMARY KEY (id)
);
Создадим файл test_db.php в каталоге нашего сайта, а так же добавим ему следующее содержание:
<?php
$connect = new mysqli('localhost','site_ru','testuser','site_ru');
$query=$connect->query("INSERT INTO `to_site` (`time`) VALUES (".time().")");
$query=$connect->query("SELECT `id`,`time` FROM `to_site` ORDER By `id` DESC LIMIT 10");
$row=$query->fetch_array();
do {
echo 'ID='.$row['id'].'; time='.$row['time'].'';
} while($row=$query->fetch_array());
?>
Возможно у Вас возникнет ошибка "Class 'mysqli' not found". Давайте установим его:
yum install php-mysqli
service php-fpm restart
Проверяем повторно и, вроде как, всё должно работать хорошо✌
Заключение
На этом я хочу закончить данную статью, но, если вдруг, у вас возникнут ошибки, то оставляйте свои комментарии и я постараюсь помочь Вам