Установка (LEMP) NGINX, MariaDB, PHP в ArchLinux
Установка и настройка популярной связки LEMP для работы веб-сервера.
LEMP это акроним от Linux, NGINX (с англ. Engine X), MySQL и PHP. Набор открытого программного обеспечения, который в связке помогает развернуть веб-сервер.
Установка MariaDB (MySQL)
Убедимся что система обновлена и установим пакет MariaDB.
1 | # pacman -S mysql |
Подтверждаем выбор репозитория extra вводом 1 или по умолчанию Enter. Будут установлены необходимые пакеты и их зависимости.
По завершении будет предложено инициализировать каталог данных MariaDB:
1 | :: You need to initialize the MariaDB data directory prior to starting |
По умолчанию MySQL работает от пользователя, который запустил сервис. Для того, чтобы изменить это используем ключ --user=mysql.
1 | mysql_install_db --user=mysql --basedir=/usr --datadir=/var/lib/mysql |
Запускаем сервис.
1 | systemctl start mysqld |
Добавляем в автозапуск.
1 | systemctl enable mysqld |
Базовая конфигурация MySQL
Запускаем скрипт базовой настройки.
1 | mysql_secure_installation |
Или так:
1 | /usr/bin/mysql_secure_installation |
Выполняем все шаги настройки.
1 | Enter current password for root (enter for none): |
Подключаемся к базе для проверки работоспособности.
1 | # mysql -uroot -p |
Теперь внесем некоторые изменения в конфигурационный файл /etc/mysql/my.cnf
В секции [mysqld] раскомментируем опцию skip-external-locking и bind-address:
skip-external-locking - опция указывает MySQL-серверу не использовать внешние блокировки при работе с базой. Внешние блокировки необходимы в ситуациях, когда несколько серверов работают с одними и теми же файлами данных, т.е. имеют одинаковую datadir, что на практике не используется.
bind-address - интерфейс, который будет слушать сервер. В целях безопасности рекомендуется установить здесь 127.0.0.1, если не планируется использовать внешние соединения с сервером. Если требуется доступ из внешней сети, то указываем соответствующие значения и не забываем настроить фильтры.
Установка NGINX
Выполняем установку NGINX.
1 | pacman -S nginx |
Создаем директорию где будет храниться контент сайта.
1 | mkdir -p /srv/http/example.com/public |
Я использую пользователя и группу http, потому что php-fpm по-умолчанию их использует. Можно изменить это в настройках.
Создаем и настраиваем каталог под виртуальные хосты
1 | mkdir /etc/nginx/sites-available |
sites-available - в каталоге хранятся конфигурационные файлы сайтов.sites-enabled - в каталоге создаются симлинки на файлы в директории sites-available для удобного включения/отключения сайтов.
В конфигурационном файле /etc/nginx/nginx.conf подключаем чтение настроек сайта из созданной директории. Будьте внимательны, данную строку необходимо поместить в секцию http.
1 | ## Load virtual host conf files. ## |
Создаем файл в директории /etc/nginx/sites-available/ с названием хоста, в нашем случае example.com и добавим туда следующие настройки:
1 | server { |
Подключаем наш виртуальный хост.
1 | cd /etc/nginx/sites-enabled/ |
Установка PHP-FPM
Выполняем установку PHP-FPM
1 | pacman -S php-fpm |
Запускаем.
1 | systemctl start php-fpm |
Добавляем в автозагрузку.
1 | systemctl enable php-fpm |
PHP модули можно установить по своему усмотрению, например:
1 | pacman -S php-gd php-mcrypt php-apc |
Базовая настройка PHP
Производим базовую настройку PHP в конфигурационном файле /etc/php/php.ini
cgi.fix_pathinfo - раскоментируем и выставим значение 0. Необходимо для исправления уязвимости NGINX + PHP-FPM.date.timezone - установим часовой пояс. В PHP>=5.3 обязательная, директива иначе в скриптах появится Warning.open_basedir - разрешенные пути для подключения php-скриптов. В ArchLinux по умолчанию включен, так что редактируем на свой вкус или комментируем.expose_php - устанавливаем в Off и тем самым скрываем версию PHP от посторонних глаз.error_reporting - устанавливаем в значение E_ALL. Показываем все ошибки.display_errors - устанавливаем в On. Тоже самое.
Проверим выполненные действия. Создадим PHP скрипт в корневой директории сайта /srv/http/example.com/public/info.php.
1 |
|

На этом установка завершена.