Настраиваем минимальный WEB-сервер на Repka Pi 3. NGINX+PFP-FPM+MySQL и ставим Wordpress

7abccfdc45a05d6ec8c0483e36bf9ae3.jpg

В этой статье я расскажу как установить на Repka Pi 3 полноценный WEB сервер на Nginx с php-fpm и MySQL для того, чтоб в конечном счете установить WordPress на данную платформу. Ставить будем на родную ОС Repka Pi от 11.12.23 (последняя актуальна прошивка на момент написания статьи).

В данной статье будет рассмотрена минимальная установка и настройка Web-сервера для личного использования и в целях обучения. В моем же случае данный Web-сервер был отдан стажеру в целях обучения работы с Linux и внесения правок сайта на Wordpress. Сам проект требует доступа к командной строке Linux и работы с потоковым видео на стороне сервера в связи с этим хостинг нам не подходил, а на VPS тратиться не хотелось и дать доступ к боевому DEV серверу стажеру не имели право, да и зачем когда под рукой есть несколько мини компьютеров Repka Pi. Которые в нашем случае успешно используются в мелких задачах и всегда под рукой.

Ну и в связи с этим я не преследовал цели показать какую то углубленную настройку безопасности сервера или оптимизированную настройку ПО. Наша цель была быстро настроить и отдать доступы к данному серверу.

Первым делом обновим нашу систему

apt update && apt upgrade

Установка веб-сервера Nginx

Nginx — это популярный легковесный web-сервер.

Установка nginx

apt install nginx

Сразу после установка Nginx должен начать работать. Проверим командой:

service nginx status

Если Nginx запущен то Active должен быть active (running)

1261466fe80112be59ea1f4cc9581374.png

Если не запущен, то выполняем команду

service nginx start

Для проверки работоспособности web-сервера попробуем зайти по ip-адресу нашей Repka Pi.

8703d2d2c24eed0726ac01dc6a28b999.png

По умолчанию рабочая директория Web-сервера /var/www/html

Настройка Nginx

Nginx имеет хорошо оптимизированные настройки из коробки, но все же есть некоторые важные настройки, изменив которые можно улучшить производительность

Для начала узнаем количество ядер в нашей системе

cat /proc/cpuinfo | grep processor

f939768e0d9db2bf048ebacbfe4a3279.png

По данному выводу видно что в системе процессор с четырьмя ядрами на борту.

ulimit -n

данная команда выведет максимальное количество одновременно обрабатываемых соединений. Вывод будет 1024

Теперь открываем конфигурационный файл nginx

nano /etc/nginx/nginx.conf

Внесите следующие изменения для повышения потенциальной производительности. Устанавливаем значение worker_processes по количеству ядер в системе:

worker_processes       4;

Меняем количество одновременных подключений, значение worker_connections:

worker_connections     1024;

Отключить вывод номера версии Nginx в сообщениях об ошибках и заголовках ответов, что в свою очередь улучшает безопасность, снимаем комментарий (символ # в начале строки) с параметра server_tokens:

server_tokens off;

Теперь установим комментарий (символ # в начале строки) на keepalive_timeout:

# keepalive_timeout 65;

и на gzip:

# gzip on;

Данные настройки мы вынесли в отдельные конфигурационные файлы.

Нажмите Control+X и Y для сохранения конфигурации. Запомните эту комбинацию, далее в статье будет как «Сохраняем»

Буфер обмена

Размер буфера — следующий невероятно важный аспект, который требует тонкой настройки. Если размер буфера слишком мал, то Nginx придется писать во временный файл, из-за чего диску придется постоянно считывать и записывать. Прежде чем принимать какое-либо решение, нужно учесть некоторые директивы.

  • client_body_buffer_size: данная директива обрабатывает размер буфера клиента, то есть любые POST-запросы, отправленные на Nginx.

  • client_header_buffer_size: эта директива подобна предыдущей, только вместо размера буфера она обрабатывает размер заголовка клиента. Для всех целей 1K, как правило, достаточно.

  • client_max_body_size: максимально допустимый размер запроса клиента. Если максимальный размер превышен, то Nginx выведет ошибку 413 (Request Entity Too Large).

  • large_client_header_buffers: максимальное количество и размер буферов больших заголовков клиентов.

Настройки буфера обмена мы вынесем в отдельный файл выполнив команду:

nano /etc/nginx/conf.d/buffer.conf

У нас откроется пустой файл, куда вставим следующий настройки:

client_body_buffer_size        10K;
client_header_buffer_size      1k;
client_max_body_size           8m;
large_client_header_buffers 2  1k;

Тут вы можете уже самостоятельно сделать более тонкую настройку по необходимости.

Сохраняем файл.

Время ожидания

Лимит времени ожидания может также резко повысить производительность.

  • client_body_timeout и client_header_timeout: отвечают за интервал времени, на протяжении которого сервер будет ждать тело запроса или заголовок запроса от клиента. Если ни тело или заголовок не были получены, сервер выдаст ошибку 408 (Request time out).

  • keepalive_timeout: устанавливает лимит времени ожидания Keep-Alive соединения с клиентом. Проще говоря, Nginx закроет соединения с клиентом по истечении этого периода времени.

  • send_timeout: ограничивает время ответа клиенту. Она устанавливается не на всю передачу ответа, а только на две операции чтения; если по истечении этого времени клиент ничего не примет, то Nginx прервет соединение.

Время ожидание так же выносим в отдельный файл:

nano /etc/nginx/conf.d/timeout.conf

Вставляем следующие настройки:

client_body_timeout             12;
client_header_timeout           12;
keepalive_timeout               15;
send_timeout                    10;

Данные параметры можно настроить по собственному усмотрению и потребностям.

Выше в nginx.conf мы установили комментарий на параметр keepalive_timeout, если вы этого не сделали, то nginx не запустится.

Сохраняем файл

Gzip сжатие

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

  • gzip_comp_level: установим значение 5. Данный уровень сжатия приблизительно на 75% уменьшает размер файлов ASCII любого типа без существенного потребления процессора.

  • gzip_min_length 256: файл, не превышающий 256 байт, не будет разархивирован.

Настройки сжатия тоже вынеси в отдельный файл:

nano /etc/nginx/conf.d/gzip.conf

Вставляем следующий текст:

gzip on;
gzip_disable "msie6";
gzip_vary on;
gzip_proxied any;
gzip_comp_level 5;
gzip_buffers 16 8k;
gzip_http_version 1.1;
gzip_min_length 256;
gzip_types text/plain text/css application/json application/javascript text/xml application/xml application/xml+rss text/javascript;

Выше в nginx.conf мы установили комментарий на параметр gzip, если вы этого не сделали, то nginx не запустится.

Сохраняем файл.

Проверка nginx

Теперь давайте проверим наши изменения, выполнив команду:

nginx -t

a132349d7a16e4f2b69692a2cd30243c.png

Если Nginx не ругается на ошибки, перегружаем его:

service nginx restart

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

Устанавливаем php-fpm выполним следующую команду:

apt install php php7.4-fpm php7.4-mysql php7.4-curl php7.4-gd php7.4-zip php7.4-bz2 php7.4-cgi

Включить выполнение php в nginx

Отредактируем конфигурационный файл:

nano /etc/nginx/sites-available/default

Найдем строку

index index.html index.htm index.nginx-debian.html;

и приведем ее к такому виду:

index index.php index.html index.htm;

Пролистаем вниз и найдем такую секцию:

# pass PHP scripts to FastCGI server     #

Снимаем комментарий (символ #) с некоторых строк чтобы получить вот такое:

# pass PHP scripts to FastCGI server     #
location ~ \.php$ {
        include snippets/fastcgi-php.conf;
#
#   	# With php-fpm (or other unix sockets):
        fastcgi_pass unix:/var/run/php/php7.4-fpm.sock;
#   	# With php-cgi (or other tcp sockets):
#   	fastcgi_pass 127.0.0.1:9000;
}

# deny access to .htaccess files, if Apache's document root
# concurs with nginx's one
#
location ~ /\.ht {
       deny all;
}

Сохраняем файл и перезагружаем nginx

service nginx reload

Тест PHP

Проверим, работает ли php. Для этого создадим файл index.php

nano /var/www/html/index.php

и добавим в него такой текст:

Сохраните файл и заходим на сайт. Если все хорошо, то отобразятся информация PHP.

e4dc093c5d013673f81c35a00794530d.png

Настройка PHP

Открываем конфигурационный файл php

nano /etc/php/7.4/fpm/php.ini

Необходимо найти строку upload_max_filesize и установить значение, одинаковое значению client_max_body_size в файле nginx.conf

Для поиска можно воспользоваться поиском по файлу. Нажмите Control+W

upload_max_filesize = 8M

Также необходимо найти параметр  cgi.fix_pathinfo=1 и поменять его значение с »1» на »0» и снять комментарий, убрав ; в начале строки:

cgi.fix_pathinfo=0

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

date.timezone = Europe/Moscow

Также с данной строки нам необходимо снять комментарий.

Сохраняем файл и перезагружаем nginx

service nginx reload

Установка MySQL

Ставим необходимые пакеты:

apt install mysql-server mysql-client

Настройка MySQL

Теперь нам нужно усилить параметры безопасности MySQL:

mysql_secure_installation

Теперь установим пароль на пользователя root в MySQL. Заходим в консоль MySQL под root:

mysql -u root

d12cebe0131794ecbdfed140c7ac6a88.png

Смотрим правила валидации пароля:

SHOW VARIABLES LIKE 'validate_password%';

Нам вернется таблица с переменными или Empty set если у нас нет правил валидации

0066f9eb16b07812e1b22d895aef32b7.png

Установим новый пароль на root:

ALTER USER 'root'@'localhost' IDENTIFIED WITH caching_sha2_password BY 'new_password';

Где new_password ваш новый пароль

При успешных выполнения команд вы должны в ответ получать примерно такие сообщения

Query OK, 0 rows affected (0,02 sec)

Если все успешно сменилось то выходим из консоли mysql, вводим:

exit

Теперь перезагрузим сервер MySQL:

systemctl restart mysql

Установка phpmyadmin

phpMyAdmin — веб-инструмент для управления базами данных MySQL с помощью фронтенда на PHP

apt install phpmyadmin

При установке не ставим галочки на вопрос для какого сервера требуется настроить наш phpmyadmin

7440d1a18edae332e64b04ce580420fb.png

Далее установщик нам откроет окно настройки phpmyadmin.

На вопрос «Настроить базу данных для phpmyadmin с помощью dbconfig-common?», отвечаем «Нет»

fb1dce7b46d0b37c98c4ca4d558f1aaa.png

Теперь что бы можно было через web интерфейс подключиться к БД, давайте создадим конфигурационный файл для phpmyadmin:

nano /etc/nginx/conf.d/phpmyadmin.inc

И внесем в него следующие строки:

location /phpmyadmin {
        alias /usr/share/phpmyadmin/;
  location ~ /(libraries|setup) {
        return 404;
  }
  location ~ ^/phpmyadmin/(.*\.php)$ {    
        alias /usr/share/phpmyadmin/$1;    
        fastcgi_pass unix:/var/run/php/php7.4-fpm.sock;    
        fastcgi_index index.php;    
        include fastcgi_params;    
        fastcgi_param SCRIPT_FILENAME $request_filename;
  }
  location ~* ^/phpmyadmin/(.+\.(jpg|jpeg|gif|css|png|js|ico|html|xml|txt))$ {    
        root /usr/share/;
  }
}

Сохраним файл.

Откроем конфигурационный файл домена :

nano /etc/nginx/sites-available/default

И добавим следующую строчку:

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

83accb54f4736ba8f8f255bbc780d30e.png

Сохраняем изменения и перезагружаем nginx

service nginx restart

И зайти по IP адресу типа: http://192.168.8.174/phpmyadmin/. Замените 192.168.8.174 на ваш IP

e2810ede1908727f2c830668cece296f.png

Вводим пользователя root и ваш пароль что установили после установки MySQL и подключаемся к БД mysql.

Тут вы теперь можете управлять базами данных, пользователями и привилегиями.

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

Добавления пользователя и базу данных MySQL

Теперь подготовим пользователя и базу данных для нашего сайта на WordPress.

Открываем вкладку «Учетные записи пользователя»

cfd9362f9b3dacaa85d4fe613c1ff6a3.png

На открывшейся странице нажимаем на ссылку «Добавить учетную запись пользователя»

83da8d58f0ccd3002f269724982df235.png

Тут заполняем форму

Имя пользователя: wordpress

Имя хоста: Локальный

Пароль и подтверждение вводим свой или нажимаем в создать пароль кнопку «Генерировать» и запоминаем123 или записываем его.

Теперь добавим привилегии пользователю

5a450f04f162cc869319b911c2d1cd15.png

Спускаемся вниз страницы и нажимаем «Вперед»

Теперь переходим к созданию базы данных, ссылка в на левой панели «Создать БД»

99dc8db488b01b6af2f7ce6ab3939bc8.png

На открывшейся странице

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

218f4fb70a0faacc07e3433bd25ece30.png

После создания откроется страница нашей новой базы.

Наш созданный пользователь wordpress уже должен иметь права к нашей базе, но давайте проверим это, для этого переходим в раздел «Привилегии» нашей базы

1560ea9fefbcb2ea9b2806e1b0cf94d8.png

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

98544aaf7d58a4a6f8fafee7ce893bda.png

УНа этом все, переходим к установке WorldPress

Установка и настройка WordPress

Подготовим первым делом директорию для нашего сайта, удалим все лишнее из папки /var/www/html:

cd /var/www/html
rm *

Скачаем последнюю версию WordPress с его официального сайта:

wget http://wordpress.org/latest.tar.gz

Извлеките файлы из скачанного архива:

tar xzf latest.tar.gz

Переместите содержимое каталога wordpress в текущий каталог с помощью команды:

mv wordpress/* .

Проверим что все переместилось командой:

ls

6b1b6b1e95e201de674a737ab7876329.png

Затем удалите архив с WordPress чтобы освободить свободное пространство на плате — он нам больше не понадобится.

rm –r wordpress latest.tar.gz

И изменим пользователя на все файлы, на пользователя указанного в nginx.conf:

chown -R www-data: .

Подготовка завершена. Переходим к установки WP. Переходим по IP-адресу нашей Repka Pi

41f9d0e22444498b3b286db1044b440b.png

Тут я не буду описывать все по шагам, установка ничем не отличается от установки на хостинг.

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

cf41eb6c6fa470a17705bc2023b1e5d2.png

Установка достаточна простая, буквально в 3 шага

Теперь по IP-адресу Repka Pi доступен сайт на WordPress

ad4cda4fef8c49d4b6a5d156bd71ac11.png

На этом можно было бы уже завершить нашу минимальную настройку сервера, но бонусом решил показать еще установку Webmin

Что такое Webmin?

Webmin — это веб-инструмент системного администрирования для Unix-подобных серверов и сервисов, который ежегодно устанавливается около 1 000 000 по всему миру. С его помощью можно настраивать внутренние параметры операционной системы, такие как пользователи, дисковые квоты, службы или файлы конфигурации, а также изменять и контролировать приложения с открытым исходным кодом, такие как DNS- сервер BIND, HTTP-сервер Apache, PHP, MySQL, и многое другое.

Установка Webmin

Подключаемся к Нашей Repka Pi удаленно по SSH или VNC, можно также установку выполнив без удаленного подключения непосредственно работая в Repka OS

Для установки Webmin нужно добавить в систему нужные репозитории, скачиваем скрипт-установщик

wget https://raw.githubusercontent.com/webmin/webmin/master/setup-repos.sh
sh setup-repos.sh

На запрос »Setup repository? »

c2ad8c7543ad35ab4d772860310825d7.png

Отвечаем »y»

После установки репозитория мы увидим такое окно

010f193e205e1ab1ceebf64988e7cac8.png

Выполняем предложенную команду установки

apt-get install --install-recommends webmin

20864a87dc2ac2b7e33eef8f2f0faf97.png

Распаковка пакета идет весьма долго, так что придется запастись терпением.

Запуск Webmin

Для доступа к Webmin нужно ввести https://ip-адрес-raspberry-pi:10000 в браузере.

Webmin работает только по https-протоколу, поэтому браузер начнет ругаться на отсутствие SSL-сертификата. Выглядит это примерно так:

9798942451a43c87f98ddd961d7b0fb1.png

Принимаем риск и открывается окно входа в веб-интерфейс Webmin:

9e98aac84cb3a51a5c854d769df52e69.png

Нужно залогиниться под root с тем же паролем, который назначен пользователю root на Repka Pi. По-умолчанию пароль: 123

bf21347573f649283c4cf252263f7f6d.png

Главная страница Webmin выглядит так. Тут в реальном времени отображается загрузка процессора и оперативной памяти, а также объем занятого пространства на всех подключенных дисковых накопителях.

Тут же демонстрируется количество доступных обновлений для установленных пакетов (строчка Packages updates) и парой кликов мыши можно запустить установку всех этих обновлений.

a9f8bc09e2df2b40ac0b44670698e530.png

Блок со статистикой загрузки системы

497fda6e563b5530c311b846806086e2.png

История входов в систему

cecc131b4c2de50db28d0334774781d9.png

Информация по сетевым интерфейсам

f2d43b26d8a68dd22df8a64b3853564a.png

Информация по подключенным дискам

3fc09fa09d7c83588a09d0f9d816e4d5.png

Тут же можно открыть терминал (стилизованный значок >_ в нижней части меню) .

4ef98d5af5b20f2b85c6e39f89b2301d.png

Выполнить в нем какие-то команды и закрыть его нажатием на крест в правом верхнем углу экрана.

fd3a3416385e6262139a7f31469bcb0d.png

Можно открыть файловый менеджер.

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

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

Переключаем язык интерфейса

c9cad2c6304a1cccb50ea863586934a2.png

В левом меню переходим в пункт меню «Webmin→Change Language and Theme» и в разделе «Language» выбираем пункт «Personal choice … », выбираем из списка языков «русский», применяем настройки кнопкой «Make Chenges»

0b18d2be4660a8b8c4e8c5bf8e744854.png

Теперь интерфейс на русском языке.

Так как этот сервер настраивался для стажера без опыта работы в Linux то такая панель будет полезна для работы непосредственно с настройками сервера

daaa30df89b1fb413898756e21752583.png

Есть достаточно удобный менеджер пакетов

e09fb6f708e461c68fea9ea5c17d7041.png

Есть менеджер обновления

d746b8141f565fc449d2272adfcb5552.png

Базой MySQL можно управлять и в этой панели, но тут конечно привычней будет phpMyAdmin

a7e1fdcafb2b67b56f17b03d0188ac9f.png

Это одно из основных что мы используем в данной панели так это планировщик заданий Cron

59fb794ccd4676e4f2c97f4d21312e03.png

Ну и управление процессами, что тоже не мало важно и достаточно удобно.

b7e64f8a335ad77e9bde8285d1beb06a.png

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

Webmin это многофункциональная панель управления серверов и быстро про нее не рассказать. Это очень хороший оптимизатор работы с сервером!

Итоги

Если у вас где-то задействовано Linux-устройство в headless-конфигурации (без монитора), то настоятельно рекомендую установить на него Webmin. Это круто и удобно.

Если кому то интересно стало поднять свой собственный Web-сервер с сайтом на Репке и вообще следить за проектом данного одноплатника, то вот ссылка канал проекта Repka Pi в Телеграм.

Всем Добра и интересных творческих задач и проектов!

© Habrahabr.ru