В этой статье я расскажу как установить на 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. Это круто и удобно. Всем Добра и интересных творческих задач и проектов.