Как установить Nginx с PHP и MariaDB (стек LEMP) с Opcache, Redis и Lets Encrypt на Fedora 32
Это руководство существует для этих версий ОС
- Fedora 32
- Fedora 17
На этой странице
- Предпосылки
- Настройка брандмауэра
- Установить PHP
- Установить MariaDB
- Установить Redis
- Настройка сервера Redis
- Установите Nginx
- Настройка Nginx
- Настройка PHP-FPM
- Установите phpMyAdmin
- Настройка phpMyAdmin
- Настройка Opcache
- Установите SSL через Lets Encrypt
- Настройка автоматического продления SSL
- Заключение
Программный стек 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://
в своем веб-браузере, и вы должны увидеть следующее.
Установите 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 завершена, и вы можете приступить к созданию и размещению своих веб-сайтов и приложений.