Установка (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 |
|
На этом установка завершена.