Настроим веб-сервер LEMP использующий службы Nginx, MariaDB и PHP на сборке CSS от Calculate Linux (Gentoo). Давно успешно использую версии Calculate Linux на рабочих компьютерах и прошло время применения на рабочих серверах.
Содержание:
Введение
На своем рабочем компьютере я уже давно использую дистрибутивы Calculate Linux и вот добрались руки до внедрения этого дистрибутива на рабочие сервера. Работать с системой Gentoo без большого опыта в системах Linux очень сложно, но разработчики Calculate Linux сильно упростили установку и работу с системой и постоянно ведут работы по улучшению своих утилит. Пакеты как правило используются свежие что не может не радовать. Настроим первый рабочий сервер на сборке CSS на котором будут работать интернет ресурсы. СSS это самый минимальный набор очень похожий на то как выглядит дистрибутивы c понятием minimall в CentOS или netinst в Debian.
Настройка времени на LEMP сервере
За правильность времени отвечает локализация в системе. Смена локализации в дистрибутивах Calculate Linux выполняется командой:
cl-setup-locale --timezone Europe/Moscow = вывод команды = * Настройка локализации и времени ... [ ok ] * Система настроена!
Проверим время на сервере lepm:
date =вывод команды = Пн ноя 13 19:14:56 MSK 2017
Время отстаёт на 3 часа. Посмотрим время UTC:
date -u = вывод команды = Пн ноя 13 16:15:04 UTC 2017
Видим что разница в 3 часа а значит локализация работает правильно остается только правильно настроить время UTC.
Установим пакет с помощью которого мы исправим время на правильное:
emerge -av net-misc/ntp
При установке любого пакета на lepm сервер добавляйте команду —ask! Команда выведет всю информацию перед установкой и ознакомившись с ней вам надо будет принять решение.
Произведем синхронизацию с сервером времени:
ntpdate pool.ntp.org
При желании можно более детально настроить сервис ntp на lemp сервере по инструкции на сервере wiki Gentoo.
Настройка Iptables скриптом
По умолчанию iptables работает и полностью открыт в чем можно убедиться выполнив команду:
iptables -L -v -n = вывод команды = Chain INPUT (policy ACCEPT 0 packets, 0 bytes) pkts bytes target prot opt in out source destination Chain FORWARD (policy ACCEPT 0 packets, 0 bytes) pkts bytes target prot opt in out source destination Chain OUTPUT (policy ACCEPT 0 packets, 0 bytes) pkts bytes target prot opt in out source destination
Добавим скрипт в котором укажем правила для lemp сервреа и сохраним их чтобы после перезагрузки они остались:
vim /root/iptables.sh = необходимые добавления = #!/bin/bash # Очистка всех цепочек iptables iptables -F iptables -X iptables -Z # Политики для трафика, не соответствующего ни одному правилу iptables -P INPUT DROP iptables -P FORWARD DROP iptables -P OUTPUT ACCEPT # Разрешаем Ping iptables -A INPUT -p icmp --icmp-type echo-reply -j ACCEPT iptables -A INPUT -p icmp --icmp-type destination-unreachable -j ACCEPT iptables -A INPUT -p icmp --icmp-type time-exceeded -j ACCEPT iptables -A INPUT -p icmp --icmp-type echo-request -j ACCEPT # Прочие настройки iptables -A INPUT -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT iptables -A INPUT -i lo -j ACCEPT iptables -A INPUT -p icmp --icmp-type 3 -j ACCEPT iptables -A INPUT -p icmp --icmp-type 11 -j ACCEPT iptables -A INPUT -p icmp --icmp-type 12 -j ACCEPT iptables -A INPUT -p tcp --syn --dport 113 -j REJECT --reject-with tcp-reset # Доступ по ssh iptables -A INPUT -p TCP --dport 22 -j ACCEPT # Доступ к webserver по http и https iptables -A INPUT -p TCP --dport 80 -j ACCEPT iptables -A INPUT -p TCP --dport 443 -j ACCEPT # Сохраняем правила #Calculate/Gentoo хранит в /var/lib/iptables/rules-save rc-service iptables save
Сохраняем и даем скрипту права на запуск:
chmod +x /root/iptables.sh
Осталось выполнить скрипт для внесения правил:
Будьте очень внимательны при составлении скрипта дабы не потерять доступ к серверу! Убедитесь что порт для доступа к ssh в скрипте соответствует работающему на сервере!
sh /root/iptables.sh = вывод команды = iptables | * Saving iptables state ... [ ok ]
Просмотр правил iptables
Посмотрим правильность применения правил:
iptables -L -v -n = вывод команды = Chain INPUT (policy DROP 31 packets, 2260 bytes) pkts bytes target prot opt in out source destination 0 0 ACCEPT icmp -- * * 0.0.0.0/0 0.0.0.0/0 icmptype 0 0 0 ACCEPT icmp -- * * 0.0.0.0/0 0.0.0.0/0 icmptype 3 0 0 ACCEPT icmp -- * * 0.0.0.0/0 0.0.0.0/0 icmptype 11 6 504 ACCEPT icmp -- * * 0.0.0.0/0 0.0.0.0/0 icmptype 8 91 8220 ACCEPT all -- * * 0.0.0.0/0 0.0.0.0/0 ctstate RELATED,ESTABLISHED 0 0 ACCEPT all -- lo * 0.0.0.0/0 0.0.0.0/0 0 0 ACCEPT icmp -- * * 0.0.0.0/0 0.0.0.0/0 icmptype 3 0 0 ACCEPT icmp -- * * 0.0.0.0/0 0.0.0.0/0 icmptype 11 0 0 ACCEPT icmp -- * * 0.0.0.0/0 0.0.0.0/0 icmptype 12 0 0 REJECT tcp -- * * 0.0.0.0/0 0.0.0.0/0 tcp dpt:113 flags:0x17/0x02 reject-with tcp-reset 0 0 ACCEPT tcp -- * * 0.0.0.0/0 0.0.0.0/0 tcp dpt:22 0 0 ACCEPT tcp -- * * 0.0.0.0/0 0.0.0.0/0 tcp dpt:80 0 0 ACCEPT tcp -- * * 0.0.0.0/0 0.0.0.0/0 tcp dpt:443 Chain FORWARD (policy DROP 0 packets, 0 bytes) pkts bytes target prot opt in out source destination Chain OUTPUT (policy ACCEPT 80 packets, 9864 bytes) pkts bytes target prot opt in out source destination
Видим что все правила что нам надо выполнились.
Смена порта SSH сервера
Один из лучших вариантов защиты lemp сервера это смена порта службы которая делается в два этапа.
- Меняется порт в файле настройки
vim /etc/ssh/sshd_config
= вывод команды с необходимыми изменениями =
#Port 22
Port 20000
- Перезапускается сервис SSH
/etc/init.d/sshd restart = вывод команды = sshd | * Caching service dependencies ... [ ok ] sshd | * Stopping sshd ... [ ok ] sshd | * Starting sshd ... [ ok ]
Для доступа в команде необходимо добавить указанный порт
ssh -p 20000 root@192.168.0.100
Установка и настройка Nginx на Calculate Linux
Хорошую альтернативу Apach придумал Игорь Сысоев. Работать одно удовольствие, а главное все быстро и идеально подходит для высоко нагруженных сайтов. Для мало нагруженных увеличение скорости тоже очень важно. После перехода с Apach на Nginx скорость работы ресурсов приятно радует. Стараюсь везде использовать Lemp сервер в замену старому Lamp работающему на Apach.
За основу взяли инструкция с Wiki Gentoo. Всё на русском и очень подробно описано.
Установка Nginx
Установим главный компонент Lemp сервера:
emerge -av www-servers/nginx = вывод команды = Local copy of remote index is up-to-date and will be used. * IMPORTANT: 2 news items need reading for repository 'gentoo'. * Use eselect news read to view new items. These are the packages that would be merged, in order: Calculating dependencies... done! [binary N ] www-servers/nginx-1.12.1 USE="http http-cache http2 ipv6 pcre ssl threads -aio -debug -libatomic (-libressl) -luajit -pcre-jit -rtmp (-selinux) -vim-syntax" NGINX_MODULES_HTTP="access auth_basic autoindex browser charset empty_gif fastcgi geo gzip limit_conn limit_req map memcached proxy referer rewrite scgi split_clients ssi upstream_hash upstream_ip_hash upstream_keepalive upstream_least_conn upstream_zone userid uwsgi -addition -auth_ldap -auth_pam -auth_request -cache_purge -dav -dav_ext -degradation -echo -fancyindex -flv -geoip -gunzip -gzip_static -headers_more -image_filter -lua -memc -metrics -mogilefs -mp4 -naxsi -perl -push_stream -random_index -realip -secure_link -security -slice -slowfs_cache -spdy -sticky -stub_status -sub -upload_progress -upstream_check -xslt" NGINX_MODULES_MAIL="-imap -pop3 -smtp" NGINX_MODULES_STREAM="-access -geo -geoip -limit_conn -map -realip -return -split_clients -ssl_preread -upstream_hash -upstream_least_conn -upstream_zone" Would you like to merge these packages? [Yes/No] yes >>> Emerging binary (1 of 1) www-servers/nginx-1.12.1::gentoo >>> Installing (1 of 1) www-servers/nginx-1.12.1::gentoo >>> Recording www-servers/nginx in "world" favorites file... >>> Jobs: 1 of 1 complete Load avg: 0.49, 0.16, 0.06 * Messages for package www-servers/nginx-1.12.1: * * This nginx installation comes with a mitigation for the HTTPoxy * vulnerability for FastCGI, SCGI and uWSGI applications by setting * the HTTP_PROXY parameter to an empty string per default when you * are sourcing one of the default * * - 'fastcgi_params' or 'fastcgi.conf' * - 'scgi_params' * - 'uwsgi_params' * * files in your server block(s). * * If this is causing any problems for you make sure that you are sourcing the * default parameters _before_ you set your own values. * If you are relying on user-supplied proxy values you have to remove the * correlating lines from the file(s) mentioned above. * >>> Auto-cleaning packages... >>> No outdated packages were found on your system. * IMPORTANT: 2 news items need reading for repository 'gentoo'. * Use eselect news read to view new items.
Запуск и проверка работы
Стандартная конфигурация nginx предполагает работу с корневым каталогом в /var/www/localhost/htdocs. Установка создаёт только каталог /var/www/localhost, без папки htdocs и индексного файла.
Тут вам решать или сделать свои пути или использовать стандарт разработчика на своем сервере lemp. В моем случае я оставляю стандарт разработчика с небольшими изменениями касающиеся размещения логом виртуальных ресурсов.
mkdir /var/www/localhost/htdocs echo 'Hello, sevo44!' > /var/www/localhost/htdocs/index.html
Пакет nginx включает в себя init-скрипт, позволяющий останавливать, запуска и перезапускать службу веб-сервера. Для запуска службы nginx выполним следующую команду:
/etc/init.d/nginx start = вывод команды = nginx | * Checking nginx' configuration ... [ ok ] nginx | * Starting nginx ... [ ok ]
Добавим nginx в автозагрузку:
rc-update add nginx default
Чтобы проверить, что nginx работает и есть доступ, в консоли сервера выполним команду которая откроет страницу сайта воспользовавшись консольным веб-клиентом curl:
curl http://localhost = вывод команды = Hello, sevo44!
На сервере все работает, но если мы захотим соединиться с машины в локальной сети то ip адресу то получим ошибку:
curl: (7) Failed to connect to 192.168.0.141 port 80: В соединении отказано
Чтобы исправить ошибку необходимо внести исправления параметра listen для сайта. Вместо 127.0.0.1 указать порт 80 на котором работает ресурс.
Конечно лучше в сети иметь DNS сервер куда прописать пути для всех ресурсов работающих на lemp сервере. Если этого нет, то достаточно добавить код в нужный файл на локальном компьютере и доступ будет осуществлять по требуемому имени. Вот пример как будет выглядеть строка для моего PhpMyAdmin который будет работать по адресу pmalempcss.sevo44.loc на машине с ip адресов 192.168.0.141:
vim /etc/hosts = необходимое добавление = 192.168.0.141 pmalempcss.sevo44.loc
Главный конфигурационный файл NGINX
Все настройки как самого Nginx так и ресурсов которые на нем работают прописываются в файле /etc/nginx/nginx.conf.
Перед редактированием любых файлов настройки я рекомендую всегда делать копии оригинальных настроек.
Скопируем оригинал и откроем его для изменения необходимых параметров параметры:
cp /etc/nginx/nginx.conf /etc/nginx/nginx.conf_orig vim /etc/nginx/nginx.conf = часть вывода команды с пояснениями = user nginx nginx; worker_processes 4; --- выставляем по количеству процессоров
Варианты конфигурации для сайтов
Дальше надо определится как будем работать с настройкой сайтов.
Существует два пути:
- редактирование всё в одном файле,
- для каждого сайта сделать свой файл настроек.
По умолчанию после усатновке настрока сделана для настройки в одном файле. Мне не удобно работать с одним файлом я разобью настройку по ресурсам.
Для этого в файле /etc/nginx/nginx.conf в блоке http добавим в конце нужную строку и удалим блоки server. В результате получим такой код:
cat /etc/nginx/nginx.conf = вывод команды с информацией он необходимых изменениях = user nginx nginx; worker_processes 4; error_log /var/log/nginx/error_log info; events { worker_connections 1024; use epoll; } http { include /etc/nginx/mime.types; default_type application/octet-stream; log_format main '$remote_addr - $remote_user [$time_local] ' '"$request" $status $bytes_sent ' '"$http_referer" "$http_user_agent" ' '"$gzip_ratio"'; client_header_timeout 10m; client_body_timeout 10m; send_timeout 10m; connection_pool_size 256; client_header_buffer_size 1k; large_client_header_buffers 4 2k; request_pool_size 4k; gzip off; # Скрываем версию nginx server_tokens off; output_buffers 1 32k; postpone_output 1460; sendfile on; tcp_nopush on; tcp_nodelay on; keepalive_timeout 75 20; ignore_invalid_headers on; index index.html; include /etc/nginx/conf.d/*.conf; }
Создадим папку где будет лежать файлы настройки для сайтов:
mkdir /etc/nginx/conf.d
Создадим файл настроек для localhost:
vim /etc/nginx/conf.d/local.conf = необходимые добавления c комментариями = server { # Порт на котором работает ресурс listen 80; # Название ресурса по которому будет осуществляться доступ server_name localhost; # Пути куда будут писаться логи access_log /var/log/nginx/localhost.access_log main; error_log /var/log/nginx/localhost.error_log info; # Корневая папка ресурса root /var/www/localhost/htdocs; }
Перед тем как перезапускать службу nginx всегда выполняйте проверку правильности сделанных изменений в настройках выполнив команду nginx -t.
Проверим и произведем применение изменений:
nginx -t = вывод команды = nginx: the configuration file /etc/nginx/nginx.conf syntax is ok nginx: configuration file /etc/nginx/nginx.conf test is successful /etc/init.d/nginx reload = вывод команды = nginx | * Checking nginx' configuration ... [ ok ] nginx | * Refreshing nginx' configuration ... [ ok ]
Команды управления Nginx
/etc/init.d/nginx stop - остановка /etc/init.d/nginx start - запуск /etc/init.d/nginx restart - перезагрузка nginx -t - проверка изменений в файлах настройки /etc/init.d/nginx reload - применение изменений
Предпочтительней использовать команду reload после изменения файлов настройки, так как в отличии от restart не обрывается доступ к ресурсам которые находятся в работе.
Установка PHP для NGINX
Для поддержки php в конфигурацию сайта работающего под nginx необходимо добавить определенный код. В данном примере nginx обменивается информацией с процессом PHP через UNIX-сокет. В блок server надо добавить блок location в котором и будут описаны правила работы с php.
http { ... server { ... location ~ \.php$ { try_files $uri =404; include /etc/nginx/fastcgi.conf; fastcgi_pass unix:/run/php-fpm.socket; } } }
Установка PHP
Перед установкой посмотрим какие версии PHP могут быть установлены:
eix dev-lang/php = вывод команды = * dev-lang/php Доступные версии: (5.6) 5.6.33 5.6.34 ~5.6.35 (7.0) 7.0.27 7.0.28 ~7.0.29 (7.1) 7.1.13 ~7.1.14 7.1.15 ~7.1.16 (7.2) ~7.2.4
Зелёным цветом помечены версии которые могут быть установлены и являются стабильными. Версии с тильдой являются не стабильными и замаскированы.
Версия PHP очень важна и лучше сделать так что бы при обновлениях вы не получили неожиданных проблем от установки новой версии.
Добавим в необходимый файл параметр который запретит установку новых версий:
vim /etc/portage/package.mask/custom = необходимые данные = >dev-lang/php-7.1
Согласно этого параметра установка версий выше 7.1 запрещена.
Для такой конфигурации Lepm сервера необходимо собрать PHP с поддержкой менеджера процессов FastCGI (dev-lang/php), включив USE-флаг fpm. Для дистрибутива Calculate Linux необходимо выполнить команду:
echo "dev-lang/php fpm" >> /etc/portage/package.use/custom
Советую сразу добавить флаг dev-lang/php mysqli иначе не будет работать PhpMyAdmin из за ошибки «Расширение mysqli не найдено. Пожалуйста, проверьте ваши настройки PHP.» и флагdev-lang/php postgres если планируйте работать с базами PostresQL. Сборка PHP не быстрая имейте это ввиду.
echo "dev-lang/php mysqli postgres" » /etc/portage/package.use/custom
В случае если нам необходимо исключить какой то параметр достаточно добавить его с тире:
echo "dev-lang/php mysqli -postgres" » /etc/portage/package.use/custom
Состояние флагов может меняться и поэтому вначале необходимо запустить установку и посмотреть какие параметры будут использованы при установке и только после этого принимать решение об добавлении или удалении параметров.
Установим PHP с включенными USE-флагоми:
emerge -av dev-lang/php = вывод части команды = [binary N ] dev-lang/php-7.0.28:7.1::gentoo USE="acl berkdb bzip2 cgi cli crypt ctype curl exif fileinfo filter fpm ftp gd gdbm hash iconv intl ipv6 json mysql mysqli nls opcache pdo phar posix postgres readline session simplexml sockets ssl threads tokenizer truetype unicode webp xml xmlreader xmlwriter zip zlib -apache2 -bcmath -calendar -cdb -cjk -coverage -debug -embed -enchant (-firebird) -flatfile -gmp -imap -inifile -iodbc -kerberos -ldap -ldap-sasl -libedit -libressl -mhash -mssql -oci8-instant-client -odbc -pcntl -phpdbg -qdbm -recode (-selinux) -session-mm -sharedmem -snmp -soap -spell -sqlite (-systemd) -sysvipc {-test} -tidy -wddx -xmlrpc -xpm -xslt" Проверяем усатнавливаемую версию и правильность устанавливаемых параметров и если все верно запускам усатновку. Процесс долгий! У меня длится в районе 1 часа!
Использование UNIX-сокета для взаимодействия Nginx c PHP является предпочтительным и рекомендуемым вариантом!
Информации о версии PHP
php -v = вывод команды = PHP 7.2.2 (cli) (built: Feb 19 2018 03:15:04) ( ZTS ) Copyright (c) 1997-2018 The PHP Group Zend Engine v3.2.0, Copyright (c) 1998-2018 Zend Technologies with Zend OPcache v7.2.2, Copyright (c) 1999-2018, by Zend Technologies
Информация о расширениях PHP
Вывод информации о всех имеющихся и работающих расширениях можно командой:
php -m
= вывод команды =
[PHP Modules]
bz2
Core
ctype
curl
date
dba
dom
exif
fileinfo
filter
ftp
gd
gettext
hash
iconv
json
libxml
mbstring
mcrypt
mysqli
mysqlnd
openssl
pcre
PDO
pdo_mysql
pdo_sqlite
Phar
posix
pspell
readline
Reflection
session
SimpleXML
sockets
SPL
sqlite3
standard
tokenizer
xml
xmlreader
xmlwriter
Zend OPcache
zip
zlib
[Zend Modules]
Zend OPcache
Настройка php-fpm для Nginx
Главные настройки находятся в файле php-fpm.conf нам необходимо проверить только наличие необходимой строки:
cat /etc/php/fpm-php7.0/php-fpm.conf = необходимый параметр = include=/etc/php/fpm-php7.0/fpm.d/*.conf
Скопируем и внесем изменения в файл настроек php.ini:
cp /etc/php/fpm-php7.0/php.ini /etc/php/fpm-php7.0/php.ini_orig vim /etc/php/fpm-php7.0/php.ini = необходимые изменения = # Запрет на исполнение произвольного кода на сервере с правами php процесса при загрузке файла. cgi.fix_pathinfo=0 # Необходимая временная зона date.timezone = "Europe/Moscow"
Перед запуском php-fpm на lemp сервере нам осталось скопировать оригинал и провести редактирование пула (pool) который будет обслуживать все сайты:
cp /etc/php/fpm-php7.0/fpm.d/www.conf /etc/php/fpm-php7.0/fpm.d/www.conf_orig vim /etc/php/fpm-php7.0/fpm.d/www.conf = результат после редактирования = [www] user = nginx group = nginx ;Запуск PHP с поддержкой UNIX-сокета listen = /run/php-fpm.socket listen.owner = nginx listen.group = nginx pm = dynamic pm.max_children = 20 pm.start_servers = 2 pm.min_spare_servers = 1 pm.max_spare_servers = 3
Параметры для работы с сокетом добавляем в пулы так как в последствии нам будет проще работать с необходимыми параметрами для работы разных ресурсов.
Запустим службу php-fpm:
/etc/init.d/php-fpm start = вывод команды = php-fpm | * Testing PHP FastCGI Process Manager configuration ... [ ok ] php-fpm | * Starting PHP FastCGI Process Manager ... [ ok ]
Добавим php-fpm в автозагрузку:
rc-update add php-fpm default
Перезагрузим nginx с измененной конфигурацией:
/etc/init.d/nginx reload
Проверка работы php-fpm для Nginx
Самый простой способ это добавить файл с кодом который будет выводить информацию о php и запустить его. Добавим файл с кодом:
vim /var/www/localhost/htdocs/info.php = необходимый код для добавления = <?php phpinfo(); ?>
Теперь в браузере наберем нужный путь http://localhost/info.php и в случае успешной настройки увидим страницу с выводом обо всех параметрах php.
Установка и настройка MariaDB
За основу взята инструкция с Wiki Gentoo.
Обычно я маскирую версию MariaDB по аналогии с версией PHP. У каждого ресурса использующего PHP и базу данных MySQL есть требования к версиям. Чтобы избежать проблемы после обновления лучше обновлять эти версии вручную.
Установим на Lemp сервер MariaDB командой:
emerge -av mariadb
После установки сервиса необходимо произвести начальную настройку выполнив команду:
emerge --config dev-db/mariadb = вывод команды с пояснениями = Configuring pkg... * Trying to get password for mysql 'root' user from 'mysql' section ... * Trying to get password for mysql 'root' user from 'client' section ... * Please provide a password for the mysql 'root' user now * or through the /root/.my.cnf file. * Avoid ["'\_%] characters in the password > вводим пароль для root * Retype the password > повторяем пароль * Creating the mysql database and setting proper permissions on it ... = часть вывода не показана =
Добавим в автозагрузку:
rc-update add mysql default = вывод команды = * service mysql added to runlevel default
Запустим:
rc-service mysql start = вывод команды = mysql | * Checking mysqld configuration for mysql ... [ ok ] mysql | * Starting mysql ... [ ok ]
Правила доступа к серверу MariaDB
Обычно в настройках стоит параметр который блокирует подключение к базе кроме локального. Изменим необходимый параметр для доступа:
vim /etc/mysql/my.cnf = необходимое изминение = # Доступ со всех компьютеров bind-address = 0.0.0.0 # Доступ только с определеного компьютера #bind-address = 10.10.0.2
Удаление бинарных лог-файлов MySQL
Очень быстро вы заметите что размер папки /var/lib/mysql с базами будет сильно увеликиватся. Увеличение размера дают бинарные лог-файлы MySQL (mysql-bin.000001, mysql-bin.000002 и тд.) для организации репликации, когда несколько баз данных и для восстановления данных в случае сбоя.
Решим эту проблемму очисткой данных свыше 5 дней добавив в секцию [mysqld] конфигурационного файла /etc/mysql/my.cnf, следующие параметры:
vim /etc/mysql/my.cnf = необходимые параметры = # Активируем бинарные логи. log-bin # Время хранения логов 5 дней expire_logs_days = 5
После внесения всех изминений перезагрузим MariaDB выполнив команду:
rc-service mysql restart
Варианты работы с базами MariaDB
Возможно несколько вариантов работы с базами на сервере Lemp. Рассмотрим вариант работы с базами с помощью программы PhpMyAdmin работающую в любом браузере и работу с базами в консоли.
Установка и настройка PhpMyAdmin
Ранее я описывал установку PhpMyAdmin для дистрибутива CentOS. Статья подойдет и для установки на любой другой дистрибутив.
Вначале я произвел установку командой emerge phpmyadmin но мне не понравился этот вариант и я установил всё руками.
Причины по которым я не стал устанавливать используя emerge:
- Папка с файлами устанавливается без папки setup в которой лежат файлы для создания конфигурационного файла PhpMyAdmin,
- Инструкция описывает настройку для Apach,
- Файл настройки для Nginx не создается.
Создадим необходимые папки:
mkdir -p /var/www/pma/{logs,backup}
Перейдем в нужную папку и скачаем архив с последней версией PhpMyAdmin с сайта разработчика:
cd /var/www/pma wget https://files.phpmyadmin.net/phpMyAdmin/4.7.5/phpMyAdmin-4.7.5-all-languages.zip
Установим пакет необходимый для распаковки zip архивов:
emerge -av unzip
Распакуем архив zip:
unzip /var/www/pma/phpMyAdmin-4.7.5-all-languages.zip -d /var/www/pma
Переименуем папку phpMyAdmin-4.7.5-all-languages в www:
mv /var/www/pma/phpMyAdmin-4.7.5-all-languages /var/www/pma/www
Дадим необходимые права на папку pma и все файлы и папки внутри:
chown -R nginx:nginx /var/www/pma
Создадим файл настроек для ресурса под управлением Nginx:
vim /etc/nginx/conf.d/pma.conf = вывод команды = # pmalempcss.sevo44.loc server { listen 80; server_name pmalempcss.sevo44.loc; access_log /var/www/pma/logs/pma.access_log main; error_log /var/www/pma/logs/pma.error_log info; root /var/www/pma/www/; index index.php index.html index.htm; location ~ \.php$ { try_files $uri =404; include /etc/nginx/fastcgi.conf; fastcgi_pass unix:/run/php-fpm.socket; } }
Запустим http://pmalempcss.sevo44.loc/setup откроется страница с выбором параметров и последующим сохранением файла настроек phpmyadmin.
После того как файл настроек config.inc.php будет добавлен в корень сайта доступ к этой папке будет закрыт!
Создадим файл с необходимыми нам настройками PhpMyAdmin:
vim /var/www/pma/www/config.inc.php = необходимый код для добавления = <?php /* * Generated configuration file * Generated by: phpMyAdmin 4.7.5 setup script * Date: Sat, 18 Nov 2017 15:51:14 +0000 */ /* Servers configuration */ $i = 0; /* Server: localhost [1] */ $i++; $cfg['Servers'][$i]['verbose'] = ''; $cfg['Servers'][$i]['host'] = 'localhost'; $cfg['Servers'][$i]['port'] = ''; $cfg['Servers'][$i]['socket'] = ''; $cfg['Servers'][$i]['auth_type'] = 'cookie'; $cfg['Servers'][$i]['user'] = ''; $cfg['Servers'][$i]['password'] = ''; /* End of servers configuration */ $cfg['DefaultLang'] = 'ru'; $cfg['blowfish_secret'] = '5"+y<2TqP+qrobW`%c!!9"BRYdIVZGIL'; $cfg['ServerDefault'] = 1; $cfg['UploadDir'] = '/var/www/pma/backup'; $cfg['SaveDir'] = '/var/www/pma/backup'; ?>
Дадим необходимые права для файла настроек:
chown nginx:nginx /var/www/pma/www/config.inc.php
Подключение к удаленному MariaDB серверу
PhpMyAdmin c легкостью позволяет подключатся к другим серверам баз данных. Необходимо добавить необходимые настройки в конфигурационный файл и не забыть дать доступ на сервере к которому подключемся. Добавим необходимый блок:
vim /var/www/pma/www/config.inc.php = необходимый код для добавления = /* Server: glpi [2] */ $i++; $cfg['Servers'][$i]['verbose'] = 'glpi'; $cfg['Servers'][$i]['host'] = '10.10.0.6'; $cfg['Servers'][$i]['port'] = ''; #$cfg['Servers'][$i]['connect_type'] = 'tcp'; $cfg['Servers'][$i]['socket'] = ''; #$cfg['Servers'][$i]['extension'] = 'mysqli'; $cfg['Servers'][$i]['auth_type'] = 'cookie'; $cfg['Servers'][$i]['user'] = ''; $cfg['Servers'][$i]['password'] = '';
Колличество блоков может быть не ограниченно.
Работа с базами в консоли
Ранее я писал статью как работать с базами в консоли. Материал подойдет для любой версии дистрибутива.
Ротация логов сайтов
Перед настройкой убедитесь что установлен пакет app-admin/logrotate отвечающий за ротацию!
Проверка наличия
eix app-admin/logrotate eix logrotate * app-admin/logrotate Доступные версии: 3.9.1 3.12.3-r1 ~3.12.3-r2 3.13.0 {acl +cron selinux} Домашняя страница: https://github.com/logrotate/logrotate Описание: Rotates, compresses, and mails system logs Найдено 1 совпадение.
Видим что в версии CSS его нет. Установим:
emerge -av app-admin/logrotate
Настроим ротацию логов PhpMyAdmin раз в сутки и будем хранить 60 дней. По аналогии я настраиваю так же ротацию и для других веб ресурсов.
vim /etc/logrotate.d/sites = необходимые параметры = # Указываем в каждой строчке необходимый сайт /var/www/pma/logs/*log { create 0644 nginx nginx daily rotate 60 missingok notifempty compress sharedscripts postrotate test -r /run/nginx.pid && kill -USR1 `cat /run/nginx.pid` endscript }
Для проверки можно запустить ротацию руками выполнив команду:
logrotate -f /etc/logrotate.conf
После выполнения команды смотрите необходимые вам лог файлы.
Настройка Cron
После установки app-admin/logrotate для работы устанавливается cronie работу которого можно проверить выполнив команду:
/etc/init.d/cronie status = вывод команды = * status: started
Посмотрев папку с логами я не обнаружил папки с логами крон. Выяснилось что необходимый пакет был установлен но не запускался.
Определили выполнив несколько действий. Определим что у нас установлено и отвечает за логи ротации:
eix -Ic app-admin/ = вывод команды = [I] app-admin/apache-tools (2.4.27{tbz2}@10.08.2017): Useful Apache tools - htdigest, htpasswd, ab, htdbm [I] app-admin/eselect (1.4.8@23.03.2017): Gentoo's multi-purpose configuration and management tool [I] app-admin/logrotate (3.13.0{tbz2}@22.11.2017): Rotates, compresses, and mails system logs [I] app-admin/metalog (3-r2{tbz2}@21.11.2017): A highly configurable replacement for syslogd/klogd [I] app-admin/perl-cleaner (2.25@06.04.2017): User land tool for cleaning up old perl installs Найдено 5 совпадение.
Выясняется что установлен app-admin/metalog. Проверим его состояние:
/etc/init.d/metalog status = вывод команды = * status: stopped
Добавим его в автозагрузку и запустим:
rc-update add metalog default /etc/init.d/metalog start
Теперь мы увидели папку /var/log/cron в которой находится файл где пишутся логи заданий cron. В моем случае файл выглядит так:
cat /var/log/cron/current = часть вывода команды = Nov 30 23:00:01 [CROND] (root) CMD (test -x /usr/sbin/run-crons && /usr/sbin/run-crons) Nov 30 23:00:01 [CROND] (nginx) CMD (php -f /var/www/nextcloud/htdocs/cron.php ) Nov 30 23:00:01 [run-crons] (root) CMD (/etc/cron.hourly/clocksync) Nov 30 23:10:01 [CROND] (root) CMD (test -x /usr/sbin/run-crons && /usr/sbin/run-crons) Nov 30 23:10:01 [CROND] (nginx) CMD (php -f /var/www/nextcloud/htdocs/cron.php ) Nov 30 23:20:01 [CROND] (root) CMD (test -x /usr/sbin/run-crons && /usr/sbin/run-crons) Nov 30 23:20:01 [CROND] (nginx) CMD (php -f /var/www/nextcloud/htdocs/cron.php ) Nov 30 23:23:01 [CROND] (root) CMD (/usr/bin/nice -n19 /usr/bin/ionice -c3 /usr/sbin/cl-core --method update --schedule -p --wait-another-update off &>/dev/null) Nov 30 23:30:01 [CROND] (root) CMD (test -x /usr/sbin/run-crons && /usr/sbin/run-crons) Nov 30 23:30:01 [CROND] (nginx) CMD (php -f /var/www/nextcloud/htdocs/cron.php ) Nov 30 23:40:01 [CROND] (root) CMD (test -x /usr/sbin/run-crons && /usr/sbin/run-crons) Nov 30 23:40:01 [CROND] (nginx) CMD (php -f /var/www/nextcloud/htdocs/cron.php ) - Last output repeated twice - Nov 30 23:50:01 [CROND] (root) CMD (test -x /usr/sbin/run-crons && /usr/sbin/run-crons)
Лог быстро будет расти поэтому сразу сделаем ему ротацию создав необходимый файл с параметрами:
vim /etc/logrotate.d/cron = необходимый код = /var/log/cron/current { daily rotate 60 missingok notifempty compress }
Результат
Базовая настройка lemp сервера произведена без особых сложностей в системе Calculate Linux полностью совместимой с Gentoo . Основная задача настройки сводилась к тому чтобы в будущем установить облачное хранилище NextCloud на этом веб-сервере. В следующей статье NextCloud установка на Nginx будет рассказано про установку NextCloud. Расскажу как подключить бесплатный сертификат SSL. Настроим работу облачного хранилища как в локальной сети так и с интернета. Настроим дополнительные расширения которые сильно улучшают функционал облачного хранилища.
Hi! I could have sworn I’ve been to this blog before but after looking at
a few of the posts I realized it’s new to me. Regardless,
I’m definitely happy I came across it and I’ll be bookmarking it and checking back frequently!