Поиск по сайту:

Как установить Nginx с PHP и MariaDB (стек LEMP) с Opcache, Redis и Lets Encrypt на Fedora 32


Это руководство существует для этих версий ОС

  • Fedora 32
  • Fedora 17

На этой странице

  1. Предпосылки
  2. Настройка брандмауэра
  3. Установить PHP
  4. Установить MariaDB
  5. Установить Redis
  6. Настройка сервера Redis
  7. Установите Nginx
  8. Настройка Nginx
  9. Настройка PHP-FPM
  10. Установите phpMyAdmin
  11. Настройка phpMyAdmin
  12. Настройка Opcache
  13. Установите SSL через Lets Encrypt
  14. Настройка автоматического продления SSL
  15. Заключение

Программный стек LEMP — это группа программного обеспечения с открытым исходным кодом, которое устанавливается вместе, чтобы сервер мог размещать веб-сайты и приложения. Это аббревиатура от Linux, сервера ENginx, MySQL (с использованием MariaDB) и PHP.

В этом руководстве вы установите стек LEMP на сервер на базе Fedora 32. Мы также установим phpMyAdmin, Redis, Opcache и Lets Encrypt SSL.

Предпосылки

Сервер под управлением Fedora 32.

Пользователь sudo без полномочий root.

Убедитесь, что все обновлено.

$ sudo dnf upgrade

Несколько пакетов, которые нужны вашей системе.

$ sudo dnf install wget curl nano -y

Некоторые из этих пакетов уже могут быть установлены в вашей системе.

Отключите SELinux.

$ sudo setenforce 0

Настроить брандмауэр

Первым шагом является настройка брандмауэра. Сервер Fedora поставляется с предустановленным брандмауэром Firewalld.

Проверьте, работает ли брандмауэр.

$ sudo firewall-cmd --state

Вы должны получить следующий вывод.

running

Установите общедоступную зону брандмауэра по умолчанию.

$ sudo firewall-cmd --set-default-zone=public

Проверьте текущие разрешенные службы/порты.

$ sudo firewall-cmd --zone=public --permanent --list-services

Он должен показать следующий вывод.

dhcpv6-client mdns ssh

Разрешить порты HTTP и HTTPS.

$ sudo firewall-cmd --zone=public --permanent --add-service=http
$ sudo firewall-cmd --zone=public --permanent --add-service=https

Еще раз проверьте состояние брандмауэра.

$ sudo firewall-cmd --zone=public --permanent --list-services

Вы должны увидеть аналогичный вывод.

dhcpv6-client http https mdns ssh

Перезагрузите брандмауэр.

$ sudo systemctl reload firewalld

Установить PHP

Fedora 32 по умолчанию поставляется с PHP 7.4, но чтобы иметь обновленный репозиторий PHP, мы добавим репозиторий REMI.

Установите репозиторий REMI, который является официальным репозиторием Fedora для установки пакетов PHP.

$ sudo dnf -y install https://rpms.remirepo.net/fedora/remi-release-32.rpm

Включите репозиторий remi и отключите репозиторий remi-modular. Это включает репозиторий, необходимый для установки пакетов PHP 7.4.

$ sudo dnf config-manager --set-enabled remi
$ sudo dnf config-manager --set-disabled remi-modular

Установите PHP 7.4 вместе с некоторыми дополнительными пакетами.

$ sudo dnf install -y php-cli php-fpm php-mysqlnd

Проверьте, правильно ли работает PHP.

$ php --version

Вы должны увидеть аналогичный вывод.

PHP 7.4.6 (cli) (built: May 12 2020 08:09:15) ( NTS ) 
Copyright (c) The PHP Group
Zend Engine v3.4.0, Copyright (c) Zend Technologies

Установить MariaDB

MariaDB является заменой MySQL, что означает, что команды для запуска и работы с MariaDB такие же, как и для MySQL.

Fedora 32 по умолчанию поставляется с MariaDB 10.4, которая является последней стабильной версией, доступной на данный момент, поэтому мы будем использовать ее.

Чтобы установить MariaDB, введите следующую команду.

$ sudo dnf install mariadb-server -y

Проверьте правильность установки MariaDB.

$ mysql --version

Вы должны увидеть следующий вывод.

mysql  Ver 15.1 Distrib 10.4.12-MariaDB, for Linux (x86_64) using  EditLine wrapper

Включите и запустите службу MariaDB.

$ sudo systemctl enable mariadb
$ sudo systemctl start mariadb

Выполните следующую команду, чтобы выполнить настройку по умолчанию, например задать пароль root, удалить анонимных пользователей, запретить удаленный вход в систему root и удалить тестовые таблицы.

$ sudo mysql_secure_installation

В MariaDB 10.4 вам будет предложено использовать пароль root или плагин unix_socket. Плагин unix_socket позволяет вам войти в MariaDB с вашими учетными данными пользователя Linux. Это считается более безопасным, хотя вам потребуется традиционное имя пользователя/пароль для использования сторонних приложений, таких как phpMyAdmin. В этом руководстве мы будем использовать плагин unix_socket. Вы по-прежнему можете использовать phpMyAdmin через любого пользователя, которого вы создаете для своих баз данных.

Нажатие Enter выбирает вариант по умолчанию (тот, который пишется с большой буквы, в данном случае Y).

NOTE: RUNNING ALL PARTS OF THIS SCRIPT IS RECOMMENDED FOR ALL MariaDB
      SERVERS IN PRODUCTION USE!  PLEASE READ EACH STEP CAREFULLY!

In order to log into MariaDB to secure it, we'll need the current
password for the root user. If you've just installed MariaDB, and
haven't set the root password yet, you should just press enter here.

Enter current password for root (enter for none): [PRESS ENTER]
OK, successfully used password, moving on...

Setting the root password or using the unix_socket ensures that nobody
can log into the MariaDB root user without the proper authorisation.

You already have your root account protected, so you can safely answer 'n'.

Switch to unix_socket authentication [Y/n] [PRESS ENTER]
Enabled successfully!
Reloading privilege tables..
 ... Success!

You already have your root account protected, so you can safely answer 'n'.

Change the root password? [Y/n] [ANSWER n]
... skipping.

By default, a MariaDB installation has an anonymous user, allowing anyone
to log into MariaDB without having to have a user account created for
them.  This is intended only for testing, and to make the installation
go a bit smoother.  You should remove them before moving into a
production environment.

Remove anonymous users? [Y/n] [PRESS ENTER]
 ... Success!

Normally, root should only be allowed to connect from 'localhost'.  This
ensures that someone cannot guess at the root password from the network.

Disallow root login remotely? [Y/n] [PRESS ENTER]
 ... Success!

By default, MariaDB comes with a database named 'test' that anyone can
access.  This is also intended only for testing, and should be removed
before moving into a production environment.

Remove test database and access to it? [Y/n] [PRESS ENTER]
 \- Dropping test database...
 ... Success!
 \- Removing privileges on test database...
 ... Success!

Reloading the privilege tables will ensure that all changes made so far
will take effect immediately.

Reload privilege tables now? [Y/n] [PRESS ENTER]
 ... Success!

Cleaning up...

All done!  If you've completed all of the above steps, your MariaDB
installation should now be secure.

Thanks for using MariaDB!

Вот и все. В следующий раз, когда вы захотите войти в MySQL, используйте следующую команду

$ sudo mysql

Введите пароль root при появлении запроса.

Установить Redis

Fedora 32 содержит пакет Redis v5.0.8, но репозиторий Remi, который мы установили ранее для PHP, содержит последнюю версию Redis (v6.0.1) на момент написания этого руководства.

Используйте следующую команду для установки Redis и соответствующего расширения PHP Redis.

$ sudo dnf install redis php-redis

Включите службу Redis.

$ sudo systemctl enable --now redis

Настроить сервер Redis

Давайте выполним некоторые базовые настройки на сервере Redis.

Откройте файл /etc/redis.conf в редакторе Nano.

$ sudo nano /etc/redis.conf

Если вы хотите, чтобы удаленные клиенты подключались к вашему экземпляру Redis, найдите строку bind 127.0.0.1 и измените ее на следующую.

bind 0.0.0.0

Вы также можете изменить порт по умолчанию, который Redis прослушивает, с 6379 на значение по вашему выбору.

port 3458

Чтобы настроить Redis в качестве сервера кэширования, установите указанные ниже значения.

maxmemory 256mb
maxmemory-policy allkeys-lru

Это говорит Redis удалить любой ключ с использованием алгоритма LRU, когда будет достигнут максимальный объем памяти в 256 МБ. Вы можете установить значение памяти в соответствии с вашими требованиями и сервером, который вы используете.

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

requirepass  <AuthPassword>

Вы можете найти больше директив для изменения в файле конфигурации. Когда вы закончите, нажмите Ctrl + X и введите Y, когда будет предложено сохранить файл.

Перезапустите сервер Redis, чтобы применить изменения.

$ sudo systemctl restart redis

Нам также нужно будет добавить правило в наш брандмауэр, чтобы разрешить работу Redis.

$ sudo firewall-cmd --zone=public --permanent --add-port=6379/tcp
$ sudo firewall-cmd --reload

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

Установите Nginx

Fedora 32 по умолчанию поставляется с последней стабильной версией Nginx. (1.18.0).

Установите Нгинкс.

$ sudo dnf install nginx -y

Проверьте, правильно ли он работает.

$ nginx -v

Вы должны увидеть следующий вывод в зависимости от версии Nginx, которую вы выбрали для установки.

nginx version: nginx/1.18.0

Запустите и включите Nginx.

$ sudo systemctl start nginx
$ sudo systemctl enable nginx

Откройте IP-адрес вашего сервера в браузере, чтобы увидеть следующую страницу. Это означает, что Nginx работает правильно.

Настроить Nginx

Настройте каталоги, в которых будут храниться серверные блоки.

$ sudo mkdir /etc/nginx/sites-available
$ sudo mkdir /etc/nginx/sites-enabled

Создайте каталог, в котором будет жить ваш сайт.

$ sudo mkdir /var/www/example.com/html -p

Использование директивы -p создает родительские каталоги, которых раньше не было.

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

$ sudo nano /etc/nginx/sites-available/example.com.conf

Вставьте следующий код в редактор.

server {
  listen          *:80;
  server_name     example.com;
  root            /var/www/example.com/html;
  index           index.php index.html;

  location / {
    try_files   $uri $uri/ =404;
  }
    
  access_log /var/log/nginx/example.com.access.log;
  error_log /var/log/nginx/example.com.error.log;

  location ~ \.php$ {
    try_files $uri =404;
    fastcgi_pass  unix:/run/php-fpm/www.sock;
    fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
    fastcgi_index index.php;
    include  fastcgi_params;
  }
}

Нажмите Ctrl + X, чтобы закрыть редактор, и нажмите Y, когда будет предложено сохранить файл.

Этот файл предполагает, что мы будем размещать example.com в каталоге /var/www/html. Если вы не собираетесь использовать какой-либо домен и настраиваете свой сервер так, чтобы он был доступен только через IP-адрес/локальный хост, вам нужно будет удалить соответствующие настройки блока сервера из файла nginx.conf, иначе это приведет к беспорядку. с блоком сервера, который вы создадите.

Активируйте этот файл конфигурации, связав его с каталогом sites-enabled.

$ sudo ln -s /etc/nginx/sites-available/example.com.conf /etc/nginx/sites-enabled/

Откройте файл /etc/nginx/nginx.conf для редактирования.

$ sudo nano /etc/nginx/nginx.conf	

Вставьте следующие строки после строки include /etc/nginx/conf.d/*.conf.

include /etc/nginx/sites-enabled/*.conf;
server_names_hash_bucket_size 64;

Измените значение types_hash_max_size с 2048 на 4096.

types_hash_max_size 4096;

Нажмите Ctrl + X, чтобы закрыть редактор, и нажмите Y, когда будет предложено сохранить файл. Протестируйте конфигурацию Nginx.

$ sudo nginx -t

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

nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful

Перезагрузите службу Nginx.

$ sudo systemctl reload nginx

Настроить PHP-FPM

Откройте файл /etc/php-fpm.d/www.conf.

$ sudo nano /etc/php-fpm.d/www.conf

Нам нужно установить для пользователя/группы Unix процессов PHP значение nginx. Найдите в файле строки user=apache и group=apache и измените их на nginx.

...
; Unix user/group of processes
; Note: The user is mandatory. If the group is not set, the default user's group
;       will be used.
; RPM: apache user chosen to provide access to the same directories as httpd
user = nginx
; RPM: Keep a group allowed to write in log dir.
group = nginx
...

Сохраните файл, нажав Ctrl + X и введя Y при появлении запроса.

Перезапустите процесс PHP-fpm.

$ sudo systemctl restart php-fpm

Чтобы проверить настройку PHP, создайте файл test.php в папке html.

$ sudo nano /var/www/example.com/html/test.php

Добавьте в него следующее содержимое и сохраните файл, нажав Ctrl + X и введя Y при появлении запроса.

<?php phpinfo();

Запустите http:///test.php в своем веб-браузере, и вы должны увидеть следующее.

Установите phpMyAdmin

Репозиторий Remi содержит последнюю версию phpMyAdmin, поэтому мы можем просто установить его с помощью следующей команды.

$ sudo dnf install phpmyadmin

Он устанавливается в каталог /usr/share/phpMyAdmin.

Настроить phpMyAdmin

Чтобы веб-сервер Nginx правильно находил и обслуживал файлы phpMyAdmin, нам нужно будет создать символическую ссылку из его фактического местоположения в корневой каталог документов Nginx.

Для этого выполните следующую команду.

$ sudo ln -s /usr/share/phpmyadmin /var/www/example.com/html/phpmyadmin

Ваша установка phpMyAdmin работает. Чтобы получить к нему доступ, просто откройте http://example.com/phpmyadmin.

Если вы получаете ошибки сеанса php, выполните следующую команду, чтобы предоставить правильные разрешения для каталога сеанса PHP. Проверьте путь сеанса из файла test.php, который мы создали ранее. Для нас это /var/lib/php/session.

$ sudo chown -R nginx:nginx /var/lib/php/session

По умолчанию это местоположение по умолчанию должно быть изменено, так как это наиболее распространенное место, где любой хакер может найти вашу установку phpMyAdmin. Для этого выполните следующую команду.

$ sudo mv phpmyadmin sm123

По сути, мы переместили наше местоположение phpMyAdmin в папку sm123. Чтобы получить к нему доступ, теперь вам нужно открыть http://example.com/sm123 в вашем браузере.

Поскольку здесь мы используем unix_authentication с MySQL, нет пользователя root для входа через phpMyAdmin. Сначала вам нужно будет создать пользователя MySQL и предоставить ему права доступа к базам данных, чтобы иметь возможность использовать phpMyAdmin.

Настроить Opcache

Установка phpMyAdmin из репозитория Remis также устанавливает Opcache. Если вы не установили phpMyAdmin и не хотите этого делать, вы можете просто установить Opcache с помощью следующей команды.

$ sudo dnf install php-opcache	

Убедитесь, что он был установлен.

$ php -v
PHP 7.4.5 (cli) (built: Apr 14 2020 12:54:33) ( NTS )
Copyright (c) The PHP Group
Zend Engine v3.4.0, Copyright (c) Zend Technologies
    with Zend OPcache v7.4.5, Copyright (c), by Zend Technologies

Чтобы изменить настройки Opcache, откройте файл /etc/php.d/10-opcache.ini.

$ sudo nano /etc/php.d/10-opcache.ini

Следующие настройки должны помочь вам начать работу с Opcache и обычно рекомендуются для обеспечения хорошей производительности. Вы можете включить конфигурацию, раскомментировав ее, удалив перед ней ;.

opcache.enable_cli=1
opcache.memory_consumption=128
opcache.interned_strings_buffer=8
opcache.max_accelerated_files=4000
opcache.revalidate_freq=60

Сохраните файл, нажав Ctrl + X и введя Y при появлении запроса.

Перезапустите сервер, чтобы применить настройки.

$ sudo systemctl reload nginx

Установите SSL через Lets Encrypt

SSL стал неотъемлемой частью любого веб-сайта. Здесь мы будем устанавливать SSL с помощью сервиса Lets Encrypt.

Для этого сначала установите инструмент Certbot.

$ sudo dnf install certbot-nginx

Сгенерируйте сертификаты.

$ sudo certbot --nginx -d example.com -d www.example.com -d phpmyadmin.example.com

Мы создаем сертификаты как для нашего основного сайта, так и для домена phpMyAdmin.

Если вы впервые запускаете certbot в своей системе, вам будет предложено указать адрес электронной почты и согласиться с условиями обслуживания. Вас также спросят, согласны ли вы делиться данными с фондом EFF, на что вы можете ответить отрицательно. После этого certbot свяжется с серверами Lets Encrypt и запустит проверку ваших доменов.

Если это удастся, вас спросят, как обрабатывать перенаправления HTTPS.

Please choose whether HTTPS access is required or optional.
-------------------------------------------------------------------------------
1: Easy - Allow both HTTP and HTTPS access to these sites
2: Secure - Make all requests redirect to secure HTTPS access
-------------------------------------------------------------------------------
Select the appropriate number [1-2] then [enter] (press 'c' to cancel):

Выберите свой вариант и нажмите Enter. Ваши сертификаты будут созданы, и ваша конфигурация Nginx будет обновлена настройками SSL.

Ваши сертификаты готовы, и теперь вы можете открыть свой сайт, перейдя по адресу https://example.com.

Настройка автоматического продления SSL

Это последний шаг, прежде чем мы закончим этот урок. Чтобы обновить SSL, мы будем использовать cron.

Нам нужно добавить запись в Cron с помощью редактора Crontab. Чтобы открыть редактор crontab, выполните следующую команду.

$ EDITOR=nano sudo crontab -e

EDITOR=nano перед командой гарантирует, что crontab откроет для нас редактор Nano, потому что Fedora по умолчанию предпочитает редактор VIM.

Вставьте следующую строку внизу.

. . .
25 2 * * * /usr/bin/certbot renew --quiet

Часть 25 2 * * * в этой строке означает «выполнять следующую команду в 2:25 каждый день». Вы можете выбрать любое время.

Сохраните файл, нажав Ctrl + X и введя Y при появлении запроса.

Команда renew для Certbot проверит все сертификаты, установленные в системе, и обновит те, срок действия которых истекает менее чем за тридцать дней. --quiet указывает Certbot не выводить информацию и не ждать ввода данных пользователем.

Эта команда будет выполняться ежедневно.

Заключение

Вот и все в этом уроке. Настройка LEMP завершена, и вы можете приступить к созданию и размещению своих веб-сайтов и приложений.