Что такое LEMP? LEMP (LNMP) — это акроним, обозначающий набор (комплекс) серверного программного обеспечения. LEMP назван по первым буквам входящих в его состав компонентов: Linux — операционная система Linux; Nginx — веб-сервер; MariaDB / MySQL — СУБД; PHP — язык программирования.
LEMP - это аналог популярного стека LAMP, используемого для разработки и развертывания веб-приложений. Традиционно LAMP состоит из Linux, Apache, MySQL и PHP. Благодаря своей модульной природе компоненты легко могут быть заменены. В LEMP Apache заменяется легким, но мощным Nginx, который может обеспечить более предсказуемую производительность при высоких нагрузках.
Затем устанавливаем веб-сервер Nginx:
Ubuntu и Debian:
apt update && apt -y install nginx
CentOS:
yum install nginx
После установки проверим, что веб-сервер запустился.
systemctl status nginx
На Ubuntu и Debian службы после установки запускаются и добавляются в автозапуск автоматически, на Centos это нужно сделать вручную:
systemctl enable nginx
Чтобы проверить, что веб-сервер заработал и может обрабатывать запросы к серверу, введите IP-адрес вашего сервера в адресной строке браузера. Откроется приветственная страница Apache, и это нормально, так как до этого у нас был установлен Apache
Установка PHP-fpm производится командой: Ubuntu и Debian:
apt install php-fpm php8.1-mysql
CentOS:
yum install php-fpm
После установки, проверим статус и если нужно запускаем менеджер процессов php-fpm и добавляем его в автозагрузку:
systemctl status php*-fpm.service systemctl start php-fpm.service && systemctl enable php-fpm.service
После установки нужно отредактировать настройки php-fpm по умолчанию, предназначенные для веб-сервера Apache: Ubuntu и Debian (данный пример на Debian 10):
nano /etc/php/7.3/fpm/pool.d/www.conf
CentOS:
nano /etc/php-fpm.d/www.conf
В файле ищем блок кода Unix user/group of processes и меняем apache на www-data для Debian и Ubuntu и nginx для CentOS. Открываем для редактирования конфигурационный файл PHP: Ubuntu и Debian (данный пример на Debian 10):
nano /etc/php/7.3/fpm/php.ini
CentOS:
vim /etc/php.ini
В файле ищем раздел Paths and Directories (он почти в самом конце файла), внутри находим параметр cgi.fix_pathinfo. Нужно раскомментировать его (удалить «;» в начале строки) и изменить значение с «1» на «0». После этого сохраняем файл и перезапускаем веб-сервер, чтобы новые настройки применились: Ubuntu и Debian (данный пример на Debian 10):
systemctl reload nginx && systemctl reload php7.3-fpm
CentOS:
systemctl reload nginx && systemctl reload php-fpm
Удаляем конфигурационный файл default, использующийся по умолчанию, и создаём его замену, default.conf: Ubuntu и Debian:
unlink /etc/nginx/sites-enabled/default touch /etc/nginx/sites-available/default.conf ln /etc/nginx/sites-available/default.conf /etc/nginx/sites-enabled/default.conf
CentOS:
touch /etc/nginx/conf.d/default.conf
Откроем новый файл в консольном текстовом редакторе и добавим туда содержимое: Ubuntu и Debian:
nano /etc/nginx/sites-available/default.conf
CentOS:
nano /etc/nginx/conf.d/default.conf
Скопируйте в файл следующий блок настроек: Ubuntu и Debian:
server {
listen 80;
server_name _;
root /var/www/html/;
index index.php index.html index.htm;
location / {
try_files $uri $uri/ =404;
}
location ~ \.php$ {
fastcgi_pass unix:/run/php/php7.3-fpm.sock;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
include snippets/fastcgi-php.conf;
}
location ~ /\.ht {
access_log off;
log_not_found off;
deny all;
}
}
CentOS:
server {
listen 80;
server_name _;
root /var/www/html/;
index index.php index.html index.htm;
location / {
try_files $uri $uri/ =404;
}
location ~ \.php$ {
fastcgi_pass unix:/var/run/php-fpm/php-fpm.sock;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
location ~ /\.ht {
access_log off;
log_not_found off;
deny all;
}
}
Осталось проверить, что в конфигурационном файле отсутствуют ошибки, и перезапустить nginx для применения настроек:
nginx -t systemctl reload nginx
Проверим работу веб-сервера и php-обработчика, создав файл с php info. Для начала перейдите в корневую директорию вашего сайта. Если сайта ещё нет, по умолчанию это каталог /var/www/html. Создайте файл с именем info.php и откройте его в любом консольном текстовом редакторе:
nano /var/www/html/info.php
В файл вставьте следующую конструкцию:
<?php phpinfo(); ?>
Теперь при переходе по ссылке типа http://IP-адрес-сервера/info.php вы увидите полный список параметров PHP на вашем сервере. Не забудьте удалить этот файл после того, как полноценно развернете сайт и убедитесь, что сайт работает. Если оставить его в открытом доступе, информация из него может быть использована злоумышленниками для атак на ваш сайт.
rm /var/www/html/info.php
Читайте также: Что такое default_server в Nginx
Настройка nginx на Debian и Ubuntu Перед настройкой нужно отключить старый конфигурационный файл по умолчанию, который был создан для проверки работы веб-сервера:
unlink /etc/nginx/sites-enabled/default.conf
Создаем конфигурационный файл нашего нового сайта, взяв за основу стандартный конфигурационный файл:
cp /etc/nginx/sites-enabled/default.conf /etc/nginx/sites-available/example.com.conf nano /etc/nginx/sites-available/example.com.conf
Сверяем, чтобы там были следующие данные:
server {
listen 80;
server_name www.example.com example.com;
root /var/www/example.com;
index index.php index.html index.htm;
location / {
try_files $uri $uri/ =404;
}
location ~ \.php$ {
fastcgi_pass unix:/run/php/php7.3-fpm.sock;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
include snippets/fastcgi-php.conf;
}
location ~ /\.ht {
access_log off;
log_not_found off;
deny all;
}
}
Создаем символьную ссылку в директорию с конфигурационными файлами активных сайтов:
ln /etc/nginx/sites-available/example.com.conf /etc/nginx/sites-enabled/example.com.conf
Проверяем отсутствие ошибок и перезапускаем nginx для применения изменений:
nginx -t
Если всё в порядке, перезагружаем веб-сервер для применения изменений:
systemctl reload nginx
Настройка nginx на CentOS
Создаём директорию, где будут храниться конфигурационные файлы наших сайтов:
mkdir /etc/nginx/sites-enabled
Отключаем в конфигурационном файле nginx виртуальный хост по умолчанию и включаем нашу директорию с конфигурационными файлами. Для этого: Делаем копию конфигурационного файла на случай ошибок и сбоев:
cp /etc/nginx/nginx.conf /etc/nginx/nginx.conf.copy
Открываем оригинальный конфигурационный файл в консольном редакторе:
nano /etc/nginx/nginx.conf
В блоке http { … } находим блок server { … }, и в начале каждой строки этого блока ставим символ # (комментируем строки). В пределах блока http { … } добавляем запись:
include /etc/nginx/sites-enabled/*;
И сохраняем файл. Переименовываем файл с конфигурацией по умолчанию, чтобы он не мешал работе нашего нового сайта:
mv /etc/nginx/conf.d/default.conf /etc/nginx/conf.d/default.conf.copy
Создаём конфигурационный файл нашего сайта example.com и открываем в консольном редакторе:
nano /etc/nginx/sites-enabled/example.com.conf
И копируем в файл базовые настройки:
server {
listen 80;
server_name www.example.com example.com;
root /var/www/example.com;
index index.php index.html index.htm;
location / {
try_files $uri $uri/ =404;
}
location ~ \.php$ {
fastcgi_pass unix:/var/run/php-fpm/www.sock;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
location ~ /\.ht {
access_log off;
log_not_found off;
deny all;
}
}
Сохраняем файл и проверяем наличие ошибок: nginx -t Если всё в порядке, перезагружаем веб-сервер для применения изменений: systemctl reload nginx
Чтобы создать базу для нового сайта, подключитесь к серверу баз данных MySQL:
mysql -u root -p
После ввода пароля создадим новую базу данных exampledb:
create database exampledb;
Далее добавим нового пользователя сервера баз данных (exampledb-user) и предоставим ему доступы для работы с базой сайта:
GRANT ALL privileges ON exampledb.* TO 'exampledb-user'@'localhost' IDENTIFIED BY 'p@ssw0rd' WITH GRANT OPTION; FLUSH privileges;
Выходим из консоли сервера баз данных:
exit;
Установим CMS WordPress. Переходим в папку нужного сайта и скачиваем туда архив CMS:
cd /var/www/example.com wget https://wordpress.org/latest.tar.gz
Распаковываем скачанный архив и проверяем содержимое:
tar -xzf latest.tar.gz ls -al
Архив содержал папку wordpress — она нам не нужна, поэтому переместим все файлы оттуда в корневую директорию сайта:
mv ./wordpress/* ./
После этого нужно проверить, что в лишней папке ничего не осталось, и удалить её вместе с архивом.
rmdir wordpress rm latest.tar.gz
По инструкции установки меняем название конфигурационного файла и добавляем туда данные нашей тестовой базы данных:
cp wp-config-sample.php wp-config.php
Ubuntu, Debian CentOS:
nano wp-config.php
Теперь нужно обеспечить доступ веб-сервера к файлам загруженного сайта. Для этого настроим их владельцем системного пользователя веб-сервера. В зависимости от операционной систему он может называться по-разному: Ubuntu и Debian:
chown -R www-data:www-data /var/www/example.com
CentOS:
chown -R nginx:nginx /var/www/example.com
Перед изменением сохраним копию исходного конфигурационного файла:
mv /etc/nginx/nginx.conf /etc/nginx/nginx.conf.copy
Wordpress рекомендует следующую структуру:
/etc/nginx/nginx.conf — главный конфигурационный файл Nginx /etc/nginx/global/restrictions.conf (для CentOS /etc/nginx/conf.d/global/restrictions.conf) — содержит ограничения на несанкционированный доступ к скрытым и системным файлам, настройки robots.txt /etc/nginx/global/wordpress.conf (для CentOS /etc/nginx/conf.d/global/wordpress.conf) — содержит глобальные настройки для работы сайтов /etc/nginx/sites-available/example.com.conf — конфигурационный файл для сайта example.com
Для нашего примера достаточно приведенных далее настроек. Откройте в консольном редакторе соответствующий файл: Ubuntu и Debian:
nano /etc/nginx/nginx.conf
И скопируйте туда следующее содержимое:
user www-data;
worker_processes auto;
worker_cpu_affinity auto;
error_log /var/log/nginx/error.log;
pid /run/nginx.pid;
include /etc/nginx/modules-enabled/*.conf;
#daemon off;
events {
worker_connections 1024;
}
http {
# rewrite_log on;
include mime.types;
default_type application/octet-stream;
access_log /var/log/nginx/access.log;
sendfile on;
# tcp_nopush on;
keepalive_timeout 3;
# tcp_nodelay on;
# gzip on;
#php max upload limit cannot be larger than this
client_max_body_size 13m;
index index.php index.html index.htm;
include sites-enabled/*;
}
Затем откройте файл
nano /etc/nginx/sites-available/example.com.conf
И приведите содержимое файла в соответствие со следующими данными
server {
server_name example.com www.example.com;
root /var/www/example.com;
location = /favicon.ico {
log_not_found off;
access_log off;
}
location = /robots.txt {
allow all;
log_not_found off;
access_log off;
}
location ~ /\. {
deny all;
}
location ~* /(?:uploads|files)/.*\.php$ {
deny all;
}
location / {
try_files $uri $uri/ /index.php?$args;
}
location ~ \.php$ {
include fastcgi.conf;
fastcgi_intercept_errors on;
fastcgi_pass unix:/run/php/php7.3-fpm.sock;
include snippets/fastcgi-php.conf;
}
location ~* \.(js|css|png|jpg|jpeg|gif|ico)$ {
expires max;
log_not_found off;
}
}
CentOS: Откройте конфигурационный файл:
nano /etc/nginx/nginx.conf
И разместите в нем следующее содержимое:
user nginx;
worker_processes auto;
worker_cpu_affinity auto;
error_log /var/log/nginx/error.log;
pid /var/run/nginx.pid;
#daemon off;
events {
worker_connections 1024;
}
http {
# rewrite_log on;
include mime.types;
default_type application/octet-stream;
access_log /var/log/nginx/access.log;
sendfile on;
# tcp_nopush on;
keepalive_timeout 3;
# tcp_nodelay on;
# gzip on;
#php max upload limit cannot be larger than this
client_max_body_size 13m;
index index.php index.html index.htm;
include /etc/nginx/conf.d/*.conf;
include sites-enabled/*;
}
Затем откройте файл:
/etc/nginx/sites-enabled/example.com.conf
И приведите содержимое файла в соответствие со следующими данными:
server {
server_name example.com www.example.com;
root /var/www/example.com;
location = /favicon.ico {
log_not_found off;
access_log off;
}
location = /robots.txt {
allow all;
log_not_found off;
access_log off;
}
location ~ /\. {
deny all;
}
location ~* /(?:uploads|files)/.*\.php$ {
deny all;
}
location / {
try_files $uri $uri/ /index.php?$args;
}
location ~ \.php$ {
fastcgi_pass unix:/var/run/php-fpm/www.sock;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
location ~* \.(js|css|png|jpg|jpeg|gif|ico)$ {
expires max;
log_not_found off;
}
}
После изменения конфигурационных файлов нужно обязательно проверить наличие ошибок:
nginx -t
Если всё в порядке, нужно перезапустить веб-сервер для применения изменений:
systemctl reload nginx
После этого нужно открыть ваш домен или IP-адрес сервера в браузере — должен открыться установщик WordPress.
При наличии ошибок проверьте логи /var/log/nginx/error.log, запущена ли служба php-fpm:
tail -f /var/log/nginx/error.log systemctl status php7.3-fpm