Простая установка LEMP (LNMP) сервера (Linux Nginx PHP MySQL)
Что такое LEMP? LEMP (LNMP) — это акроним, обозначающий набор (комплекс) серверного программного обеспечения. LEMP назван по первым буквам входящих в его состав компонентов: Linux — операционная система Linux; Nginx — веб-сервер; MariaDB / MySQL — СУБД; PHP — язык программирования.
LEMP - это аналог популярного стека LAMP, используемого для разработки и развертывания веб-приложений. Традиционно LAMP состоит из Linux, Apache, MySQL и PHP. Благодаря своей модульной природе компоненты легко могут быть заменены. В LEMP Apache заменяется легким, но мощным Nginx, который может обеспечить более предсказуемую производительность при высоких нагрузках.
Шаг 1 - Установка 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
Шаг 2 - Установка менеджера процессов PHP-fpm
Установка 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
Читайте также
Шаг 3 - Настройка базового конфигурационного файла для сайта
Удаляем конфигурационный файл 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
Шаг 4 - Настройка nginx на Debian и Ubuntu
Настройка 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
Шаг 5 - Создание базы данных
Чтобы создать базу для нового сайта, подключитесь к серверу баз данных 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;
Шаг 6 - Установка CMS и проверка работы сайта
Установим 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
Читайте также
📌 Для тестирования скриптов, установщиков VPN, Python ботов рекомендуем использовать надежные VPS на короткий срок. Если вам нужна помощь с более сложными задачами, вы можете найти фрилансера, который поможет с настройкой. Узнайте больше о быстрой аренде VPS для экспериментов и о фриланс-бирже для настройки VPS, WordPress. 📌
💥 Подпишись в Телеграм 💥 и задай вопрос по сайтам и хостингам бесплатно!7 Самых Популярных Статей
- Как запустить скрипты и веб-приложения на Python
- Что такое страны TIER 1,2,3
- 7 способов сравнения файлов по содержимому в Windows или Linux
- Установка и тестирование веб-панели HestiaCP
- Китайский VPN Shadowsocks простая установка и настройка
- top, htop, atop определение загрузки ОС (Load average, LA)
- Использование rsync в примерах