Найти тему
Alvig.ru

Web server Nginx + php-fpm + MariaDB + WordPress

Оглавление
LEMP
LEMP

Полный вариант статьи находится тут. Алгоритм установки проверен пошагово на железе.

Рассмотрим вариант LEMP (Linux + Nginx + MariaDB + PHP) + WP установки веб-сервера на некий сайт site.ru. На момент написания данного текста последовательность действий проверена на «железном» сервере и должна работать у вас тоже. Исключения возможны по множеству причин, но в 90% случаев алгоритм и для вас будет верным. Конфиги не идеальны, получив рабочий вариант сервера вы можете его оптимизировать сколько вам будет угодно, главное делайте бэкап конфигов и бд.

1. Установка OS Debian 10

Скачиваем:

  • Debian дистрибутив Live текущий релиз.
  • Программу Rufus текущая версия 3.4 (Программа не требует установки).
  • Сами non-free пакеты
  • Крайне необходим SSH клиент, лучший это PuTTY
  • Кому то потребуется FTP файл-менеджер, например FileZilla

ISO файл записываем его на флэшку (или иной носитель), после чего не вынимая его открываем корень в проводнике. Находим папку firmware.
В нее распаковываем содержимое заранее скачанного архива с non-free пакетами. Заходим в папку, внимательно изучая содержимое. Наша задача оставить пакеты, которые могут подойти к нашему железу, остальной можно выкинуть. Те пакеты, название которых вам ничего не говорит лучше оставить, будет меньше проблем с драйверами.
Устанавливаем систему, сам процесс установки прост, русифицирован и интуитивно понятен. Разметку диска ставим авто:

Разметка диска Debian
Разметка диска Debian

При выборе пакетов убираем все, оставляя только SSH-server и системные утилиты. В этом случае не будет установлена графическая оболочка. Если вам без нее сложно, добавьте LXDE, она самая легкая и близка дизайном к привычной и всеми горячо любимой ОС.

Выбор конфигурации сервера Debian
Выбор конфигурации сервера Debian

Добавление любого окружения рабочего стола автоматически потащит за собой установку большого количества (около 1,5 Гб) ненужных серверу пакетов (Office, Firefox, и проч.), что повлечет потерю ресурсов, потребление электроэнергии и кучу мелких неприятностей.
Но решать конечно вам, лично я не рекомендую ставить иксы и графические оболочки.
GRUB в главную загрузочную запись — ok., выбираете устройство — ваш диск (флэшку случайно не отметьте!).
Убираем флэшку. Завершение установки и перезагрузка.

Заходим в систему под root пользователем, лучше сразу посредством ssh терминала PuTTY .

После установки

Проводим небольшие манипуляции, построчно вводя команды. Часть из них избыточна, потому что мы ставим свежую систему. Но на всякий случай.

Shell

su

apt-get update

apt-get upgrade

apt-get install mc

apt-get install wget

apt-get install sudo

sudo adduser USER sudo (вместо USER имя пользователя)

sudo apt-get install software-properties-common dirmngr

sudo reboot

Переходим к следующему этапу.

-4

Что делать если что то не получилось:

  • Проверьте в биосе с какого устройства вы загружаетесь.
  • Если не получается загрузиться с флэшки, попробуйте выбрать в Rufus схему раздела GPT и целевую систему UEFI (non-CSM).
  • Перезапишите папку с non-free пакетами, не редактируя содержимого.

2. Установка web сервера Nginx + PHP-fpm + Maria DB.

Установка Nginx

По умолчанию оказываемся в своей папке /home/(пользователь)

Скачаем, установим PGP-ключ для репозитория Nginx:

Shell

wget https://nginx.org/keys/nginx_signing.key

sudo apt-key add nginx_signing.key

Shell

sudo add-apt-repository 'deb http://nginx.org/packages/debian/ buster nginx'

Или вручную правим файл . На вопрос выбора текстового редактора по умолчанию я рекомендую выбрать mcedit

Shell

sudo mcedit /etc/apt/sources.list

и добавляем в конец файла строки:

Shell

deb http://nginx.org/packages/debian/ buster nginx

deb-src http://nginx.org/packages/debian/ buster nginx

сохраняем и выходим. Далее:

Shell

sudo apt-get update

sudo apt-get install nginx

убедиться, что все прошло нормально можно набрав команду:

Shell

sudo nginx -v

На экране будет отображена текущая версия nginx. Вариант просто «nginx -v» работать не будет.

Установка PHP-fpm

Изначально с Debian 10 устанавливается PHP 7.3

Для установки php-fpm установщик должен предложить еще установить пакеты —

php-common php7.3-cli php7.3-common php7.3-fpm php7.3-json php7.3-opcache php7.3-readline, но и это не все нужные нам пакеты.

поэтому сразу пишем:

Shell

sudo apt-get install php-common php7.3-cli php7.3-common php7.3-fpm php7.3-json php7.3-opcache php7.3-readline php7.3-gd javascript-common php7.3-mysql libphp-phpmailer php7.3-mbstring php-common php7.3-curl

узнать какая у вас версия можно набрав команду:

Shell

php -v

получим ответ типа

Shell

PHP 7.3.11-1~deb10u1 (cli) (built: Oct 26 2019 14:14:18) ( NTS )

Copyright (c) 1997-2018 The PHP Group

Zend Engine v3.3.11, Copyright (c) 1998-2018 Zend Technologies

with Zend OPcache v7.3.11-1~deb10u1, Copyright (c) 1999-2018, by Zend Technologies

Текущие версии PHP можно увидеть на сайте https://php.net. Версии упакованы в архивы с исходными файлами, установку из исходников мы пока рассматривать не будем.

Выбор версии PHP
Выбор версии PHP

Но есть одно но. Это Debian, стабильность прежде всего. Раз уж команда разработчиков не включает в релизы последние версии, потому что с ними может быть не всё так хорошо. Вот проверят, тогда… Впрочем решайте сами 🙂
Можно конечно подключить репозиторий 
https://packages.sury.org/php/dists/, но я не знаю того парня, и вообще «оно таки вам надо ?» 🙂
Что они туда завтра положат и чем все это кончится? По мне так пусть будет чуть помедленнее, но стабильно.

Установка MariaDB

Ситуация с сервером баз данных аналогична ситуации с PHP. В стандартных репозиториях

Shell

sudo apt-cache policy mariadb-server

mariadb-server:
Установлен: (отсутствует)
Кандидат: 1:10.3.22-0+deb10u1
Таблица версий:
1:10.3.22-0+deb10u1 500
500 http://deb.debian.org/debian buster/main amd64 Packages

Следуя философии Debian нужно просто выполнить:

Shell

sudo apt-get install mariadb-server

Но. На всякий случай, есть на официальном сайте MariaDB конфигуратор для основных версий Linux, в том числе и для Debian.
Разработчики MariaDB утверждают, что предлагаемые ими для установки пакеты стабильны. Доверять им или нет, дело каждого. Лично я считаю, что большой разницы в скорости работы не будет, и оставляю версию из официального репозитория, доверяя разработчикам Debian.
Потому что стабильность прежде всего, не так ли ? 🙂

Настройка сервера

Самое важное это настройка конфигурационных файлов. Для начала проверяем настройки nginx

Shell

sudo nginx -t -v

Система скажет, что все ок, заодно показав установленную версию «nginx version: nginx/1.16.1»
Нужно завести папку для версий конфигов где нибудь в /home/user/configs и туда скидывать файлы, которые мы меняем, чередуя версии. Своего рода бэкап, но дело каждого.

Остановим сервер nginx:

Shell

sudo service nginx stop

Для справки, структура конфига nginx http://nginx.org/ru/docs/beginners_guide.html#conf_structure

создаем папки для резервных конфигов и будущего сайта

Shell

sudo mkdir /var/configs

sudo mkdir /var/www

sudo mkdir /var/www/site.ru

сохраняем всегда изменяемые конфиги на всякий случай в эту папку.

Настраиваем nginx

Shell

sudo mcedit /etc/nginx/nginx.conf

удаляем все, и вставляем следующее содержимое, внося необходимые корректировки:

Nginx

user www-data;

worker_processes auto;

error_log /var/log/nginx/error.log warn;

pid /var/run/nginx.pid;

events {

worker_connections 1024;

}

http {

include /etc/nginx/mime.types;

default_type application/octet-stream;

log_format main '$remote_addr - $remote_user [$time_local] "$request" '

'$status $body_bytes_sent "$http_referer" '

'"$http_user_agent" "$http_x_forwarded_for"';

access_log /var/log/nginx/access.log main;

sendfile on;

#tcp_nopush on;

keepalive_timeout 65;

#gzip on;

include /etc/nginx/conf.d/*.conf;

}

Убираем все файлы в директории /etc/nginx/conf.d/
Создаем новый файл в директории, заменив site.ru на свой вариант

Shell

sudo mcedit /etc/nginx/conf.d/site.ru.conf

Nginx

server {

listen 80; # порт который слушает nginx

server_name localhost; # имя сайтa

charset utf-8; # кодировка принятая по умолчанию

root /var/www/site.ru; # расположение сайта

index index.php index.html; # начальный документ, загрузит тот, кто первый в списке

client_max_body_size 40m;

client_body_buffer_size 256k;

client_header_timeout 2m;

client_body_timeout 2m;

send_timeout 2m;

client_header_buffer_size 1k;

large_client_header_buffers 4 16k;

# Сжатие

gzip on;

gzip_disable "msie6";

gzip_comp_level 6;

gzip_min_length 1100;

gzip_buffers 16 8k;

gzip_proxied any;

gzip_types text/plain application/xml application/javascript text/css text/js text/xml application/x-javascript text/javascript application/json application/xml+rss;

############################### static #############################################

location ~* .(jpg|jpeg|gif|css|png|js|ico|html)$ {

access_log off;

expires max;

log_not_found off;

}

############################### php ################################################

location / {

# add_header Access-Control-Allow-Origin *;

try_files $uri $uri/ /index.php?$query_string;

}

location ~* .php$ {

try_files $uri = 404;

fastcgi_split_path_info ^(.+.php)(/.+)$;

fastcgi_pass unix:/var/run/php/php7.3-fpm.sock; # подключаем сокет php-fpm

fastcgi_index index.php;

fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;

include fastcgi_params;

}

location ~ /.ht {

deny all;

}

}

############################################################################

сохраняем, выходим, проверяем

Shell

sudo nginx -t

Если все ок, то создаем папку сайта по ранее указанному адресу и запускаем nginx:

Shell

sudo systemctl start nginx

Нужно создать первую страницу, заодно проверить работу php-fpm:

Shell

mcedit /var/www/site.ru/index.php

Добавляем содержимое:

PHP

<?php

phpinfo();

?>

Убираем наш файл index.php из директории сайта из соображений безопасности, на память можно сделать скриншот.

Что делать если что то не получилось:

  • Проверьте настройки провайдера/роутера. Доходит до вас пинг вообще или нет.
  • Проверьте порты, настройки фаерволов и проч.

php

Мы же будем потом WordPress ставить? Измените /etc/php/7.3/fpm/php.ini и установите:

PHP

upload_max_filesize = 20M

Сохраняемся и выходим. Перезапускаем PHP.

Shell

sudo service php7.3-fpm reload

Настройка HTTPS

В целом вроде бы все хорошо, кому не нужен SSL могут пропустить эту часть. В общем не было бы проблем, но сертификат SSL стоит денег. Непонятно почему, но это так. Но пока есть и бесплатные варианты. Установка и настройка HTTPS в следующей статье.

Настройка MariaDB

Shell

mariadb -u root -p

Не забудьте, что вместо значений wp, user и password нужно вставить свои значения. Лучше заранее скопировать все в текстовый редактор, отредактировать и построчно ввести команды. Иначе придется потом удалять юзера «user» со сверхнадежным паролем.:)

CREATE DATABASE wp DEFAULT CHARACTER SET utf8 DEFAULT COLLATE utf8_general_ci;
GRANT ALL PRIVILEGES ON wp.* TO user@localhost IDENTIFIED BY 'password' WITH GRANT OPTION;
FLUSH PRIVILEGES;EXIT;

Запустим скрипт безопасности, введем пароль и на все остальные вопросы ответим положительно.

Shell

/usr/bin/mysql_secure_installation

Для настройки базы данных есть отличная программа phpmyadmin. Есть вариант и полегче, например, phpadminer. Оба варианта избыточны для текущей задачи, поскольку хватает и консоли. Например, ради интереса, рассмотрим установку и работу с phpadminer. Уточняем текущую версию программы, на момент написания это https://github.com/vrana/adminer/releases/download/v4.7.6/adminer-4.7.6.php

Для этого заходим в папку нашего сайта

Shell

cd /var/www/site.ru

wget https://github.com/vrana/adminer/releases/download/v4.7.6/adminer-4.7.6.php

mv adminer-4.7.6.php adminer.php

systemctl restart mariadb

И заходим по адресу localhost/adminer.php

Входим под root или user, Заходим

выбираем слева вверху русский язык, «Создать базу данных» придумываем название базе, режим сопоставления выбираем utf8_general_ci, жмем «Сохранить»

далее «Полномочия», «Создать пользователя», выбираем имя, сервер «localhost».

Отмечаем галочки All privileges и Grant option, далее жмем «Сохранить»

-6

Что делать если что то не получилось:

  • Если что то не получается и SQL выдает ошибку то можно попробовать выполнить процедуру создания базы данных, Пользователя и настройки привилегий из консоли. Неправильно созданную базу проще удалить из консоли и сделать новую.
  • Хорошо запомните введенные данные и проверьте правильность их ввода. Сервер должен быть обязательно «localhost».

3. Установка WordPress.

4 шага для wordpress

  • Переходим в директорию нашего сайта и скачиваем WordPress

Shell

wget https://ru.wordpress.org/latest-ru_RU.zip

unzip latest-ru_RU.zip -d /var/www/site.ru

rm /var/www/site.ru/latest-ru_RU.zip

переносим содержимое папки wordpress в корень сайта var/www/site.ru и удаляем саму папку wordpress“, файл wp-config-sample.php переименовываем в wp-config.php. Открываем его в mcedit, затем вносим изменения в строки (вводим название базы данных, имя пользователя, его пароль, кодировка ‘utf8’):

  • в конце файла вписываем еще строку, поскольку другие методы закачки используют намного реже.

PHP

define('FS_METHOD', 'direct');

  • сохраняемся и выходим в консоль, устанавливаем права

Shell

chown -R www-data:www-data /var/www/html

chmod -R 755 /var/www/html

входим на сайт http://localhost

заполняем поля уже введенными ранее данными в файл wp-config.php, отвечаем на несколько вопросов и дело сделано.

Полный вариант статьи находится тут.