Как стать автором
Обновить

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

Уровень сложностиСредний
Время на прочтение10 мин
Количество просмотров6.2K

В этой статье я расскажу как установить на 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)

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

service nginx start

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

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

Настройка Nginx

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

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

cat /proc/cpuinfo | grep processor

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

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

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

service nginx restart

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

PHP-FPM (от англ. FastCGI Process Manager — «Менеджер процессов FastCGI») —это альтернативная реализация FastCGI режима в PHP с несколь­кими допол­ни­тель­ными воз­мож­но­стя­ми, обычно исполь­зу­емыми для высо­ко­на­гру­жен­ных сайтов.

Устанавливаем 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  phpinfo(); ?>

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

Настройка 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

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

SHOW VARIABLES LIKE 'validate_password%';

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

Установим новый пароль на 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

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

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

Теперь что бы можно было через 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*;

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

service nginx restart

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

УНа этом все, переходим к установке 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

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

rm –r wordpress latest.tar.gz

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

chown -R www-data: .

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

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

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

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

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

На этом можно было бы уже завершить нашу минимальную настройку сервера но бонусом решил показать еще установку 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?

Отвечаем “y

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

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

apt-get install --install-recommends webmin

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

Запуск Webmin

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Итоги

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

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

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

Теги:
Хабы:
Всего голосов 10: ↑8 и ↓2+9
Комментарии22

Публикации

Работа

PHP программист
101 вакансия

Ближайшие события