Архив рубрики: Системы

Fail2ban защита сайта от взлома

Применим удобное и эффективное средство для защиты сайта от подбора паролей с помощью популярного сервиса Fail2ban. Помогает для защиты от ботов и очень любопытных товарищей. Заблокируем назойливых роботов на уровне VDS хостинга.

Введение

Рано или поздно ваш сайт будут пробовать на прочность всякие роботы. Если движок сайта свободный, то роботы начинают проверять вас на прочность сразу.

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

Меня начали проверять почти сразу. Пользуясь случаем хочу передать привет товарищу Токарчуку Александру Степановичу с IP адреса которого упорно хотели попасть в админку моего сайта. Почему то пытаются войти, в моем случае, как правило с Украины.

Советую сразу смените путь к админке сайта с помощью iThemes Security. По умолчанию путь в WordPress домен/wp-admin и именно сюда все боты и лезут… Поленился я сразу сменить и боты стали ломится каждую минуту и причем в своем большинстве используя Российские ip адреса. Путь сменил, но они всё равно ломятся по стандартному пути…

Ошибка входа в админку

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

Посмотрим как выглядит лог неудачной попытки авторизации на популярном движке WordPress:

91.200.12.91 - - [10/Apr/2017:10:02:22 +0300] "POST /wp-login.php HTTP/1.1" 200 2884 "https://sevo44.ru/wp-login.php" "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/31.0.1650.57 Safari/537.36" "2.79"
91.200.12.91 - - [10/Apr/2017:10:02:23 +0300] "POST /wp-login.php HTTP/1.1" 200 2884 "https://sevo44.ru/wp-login.php" "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/31.0.1650.57 Safari/537.36" "2.79"

Согласно этим строчкам 2 раза неудачно авторизовались.

iThemes Security для WordPress

Для популярного движка WordPress существует свободный плагин iThemes Security для защиты сайта. Не буду останавливаться на рассмотрении настройки, покажу лишь как он показывает ошибки авторизации.

Согласно этих данных видим что регулярно производится по 2 попытки авторизации к административной панели сайта.

При нажатии на ip мы увидим информацию о координатах этого адреса:

У меня как обычно Украина. Нажмем на ISP: PP SKS-Lugan и увидим более детальную информацию:

Можно делать с этой информацией всё что угодно и тут всё в вашей власти.

Моя задача сделать так чтобы данные пользователи блокировались для всего моего VDS хостинга, а не только для сайта работающего на WordPress c защитой iThemes Security. Для этого и надо настроить Fail2ban.

Настройка Fail2ban

Установка

Устанавливать и настраивать будем для системы CentOS 7, хотя и для других систем, с учетом специфики операционной системы, данное описание подойдёт.

Установим:

yum install fail2ban

Конфигурационный файл настройки находится здесь — /etc/fail2ban/jail.conf, но, как сказано в комментариях файла, данный файл рекомендуется не изменять.

Чтобы при обновлении Fail2ban не удалялись наши настройки создадим локальную копию файла, именно с него и будет работать наша система защиты.

Отправка почты на внешний e-mail адрес

Настроим чтобы письма root пересылались на нужную нам внешнюю e-mail почту.

Открываем файл /etc/aliases и внесем изменения:

mcedit /etc/aliases
=необходимые изменения=
# Person who should get root's mail
root:info@sevo44.ru

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

newaliases

Отправим тестовое сообщение выполнив команду:

echo «test» | mail -s Testmail root

Если в выводе будет -bash: mail: команда не найдена то надо установить пакет:

= Для CentOS = 
yum install mailx
= Для Debian =
apt-get install mailutils

Если на указанную почту пришло сообщение где в теле письма «test», то значит всё хорошо и теперь все сообщения что система создает для root будут переправлены на вашу почту.

Обязательно проверьте спам почты. Если в спаме нет то смотрите логи отправки почты. Всегда использую почтовый сервис yandex.ru и проблем с ними нет.

В случае если письмо не пришло то надо идти в файл лога и смотреть что там не так. В моем случае лог выглядит так:

cat /var/log/maillog
= вывод команды с необходимыми значениями =
Apr 10 22:57:03 ih378645 postfix/smtp[29844]: D56B64957: to=<info@sevo44.ru>, orig_to=<root>, relay=mx.yandex.ru[87.250.250.89]:25, delay=0.57, delays=0.02/0/0.03/0.52, dsn=2.0.0, status=sent (250 2.0.0 Ok: queued on mxfront10g.mail.yandex.net as 1491854223-b3qP5cuV0Mf-v2CaUBlk)

Работа с почтой Postfix

Перестала приходить почта от f2b о блокировке желающих войти в админку сайта.

Вот количество ip которое стремительно увеличивалось:

fail2ban-client status sites-sevo44ru
= вывод команды =
Status for the jail: sites-sevo44ru
|- Filter
| |- Currently failed: 0
| |- Total failed: 11
| `- File list: /web/sites/sevo44.ru/log/access.log
`- Actions
 |- Currently banned: 207
 |- Total banned: 207
 `- Banned IP list: 109.105.190.219 109.124.100.250 109.126.225.137 109.162.93.73 109.171.22.62 109.172.55.2 109.188.64.73 109.188.85.234 109.195.183.85 109.198.171.226 109.60.155.212 109.75.193.0 109.75.202.103 128.74.71.66 145.255.3.225 145.255.3.243 145.255.3.39 159.224.11.242 173.232.219.176 173.236.184.110 173.236.184.142 173.236.184.143 176.49.40.127 176.59.41.30 176.62.69.118 177.204.153.95 177.207.148.119 178.122.111.64 178.129.238.101 178.155.4.80 178.161.237.69 178.205.188.253 178.207.227.23 178.252.205.27 178.57.63.25 178.65.133.157 178.67.130.123 178.68.173.206 178.72.91.190 185.180.229.142 185.25.19.134 185.3.35.46 185.30.88.107 185.30.88.76 185.41.212.207 185.71.82.158 188.0.188.181 188.115.138.206 188.123.230.206 188.126.38.199 188.134.15.152 188.16.110.197 188.162.229.113 188.162.40.42 188.232.43.178 188.235.141.43 188.254.110.230 188.254.43.218 188.255.13.56 188.32.71.98 188.43.36.22 188.52.174.121 193.107.0.34 193.107.151.221 193.169.32.59 194.135.247.146 194.15.117.19 195.191.83.66 195.3.245.253 195.93.144.120 2.36.191.127 2.60.185.142 212.116.102.42 212.164.46.108 212.175.77.165 212.20.45.184 213.138.90.164 213.155.204.122 213.87.137.135 213.87.224.201 213.87.224.214 213.87.96.210 216.185.103.189 217.118.91.62 217.150.50.69 217.23.186.38 222.149.235.211 31.130.91.37 31.131.85.19 31.132.160.196 31.132.183.250 31.47.116.134 31.6.119.56 31.7.224.10 31.7.237.76 36.73.140.126 37.113.130.68 42.145.226.174 46.0.106.28 46.164.199.44 46.172.208.41 46.236.129.182 46.242.14.3 46.36.18.111 46.39.230.246 46.39.244.115 46.39.49.133 46.47.7.2 46.99.3.32 5.18.172.193 5.206.236.28 5.228.255.64 5.76.127.100 62.109.179.58 62.112.118.38 62.183.86.39 64.111.127.38 64.34.217.217 67.234.216.197 69.163.216.123 77.222.100.87 77.246.225.66 77.34.10.29 77.40.56.179 77.51.62.109 77.66.146.104 77.72.121.70 78.106.172.62 78.107.234.199 78.153.25.244 78.159.238.91 78.24.5.142 78.36.120.180 79.122.230.190 79.165.123.222 80.251.112.200 80.67.249.55 80.80.162.44 81.1.212.101 81.20.199.41 81.28.176.111 82.114.68.235 83.167.101.207 83.174.223.180 84.22.36.50 84.234.50.77 85.175.143.185 85.95.191.186 86.62.123.82 87.117.26.218 88.147.152.131 88.147.152.7 88.147.231.208 88.205.217.250 89.106.198.59 89.188.124.197 89.237.29.174 90.188.6.161 90.189.223.253 91.144.149.126 91.205.46.26 91.207.245.253 91.229.204.2 93.157.168.19 93.185.17.122 93.185.30.26 93.78.108.179 93.94.234.110 94.180.44.52 94.228.207.139 94.233.62.22 94.24.244.182 94.25.176.210 94.25.177.184 94.25.179.100 94.29.124.183 94.29.124.189 94.50.197.139 94.75.60.240 95.106.193.177 95.137.159.251 95.141.233.82 95.152.4.216 95.153.132.246 95.159.138.245 95.159.164.155 95.188.128.213 95.190.112.163 95.24.6.152 95.30.25.120 95.32.12.236 95.32.123.249 95.71.51.84 95.72.22.198 95.78.113.238 95.78.19.212 5.138.196.107 176.8.76.170 178.75.42.126 83.149.44.111 46.61.76.189 5.76.199.41 82.138.49.236 85.234.6.34 178.205.122.253 79.120.80.50 77.222.99.126

В логах обнаружил сообщение о превышении лимита на отправку сообщений:

cat /var/log/maillog
= вывод команды с необходимыми значениями =
May 5 12:48:32 ih378656 postfix/smtp[12576]: 3111D5EE9: to=<dolotov44@yandex.ru>, orig_to=<root@localhost>, relay=mx.yandex.ru[93.158.134.89]:25, conn_use=23, delay=12862, delays=12859/3.1/0.07/0.06, dsn=4.5.1, status=deferred (host mx.yandex.ru[93.158.134.89] said: 451 4.5.1 The recipient <dolotov44@yandex.ru> has exceeded their message rate limit. Try again later. 1493977712-W6SydoLQur-mWE8thiK (in reply to end of DATA command))
May 5 12:48:32 ih378656 postfix/smtp[12563]: 2E9A05F20: host mx.yandex.ru[87.250.250.89] said: 451 4.5.1 The recipient <dolotov44@yandex.ru> has exceeded their message rate limit. Try again later. 1493977712-LwxkdR0eGu-mWD4A8YU (in reply to end of DATA command)

Посмотрим количество сообщений в очереди postfix:

mailq | grep Request
= вывод команды =
-- 5811 Kbytes in 1888 Requests.

Видим что 1888 писем в очереди на отправку.

Посмотрим с каких почтовых ящиков очередь:

mailq|grep ^[A-F0-9] |cut -c 42-80| sort | uniq -c| sort -n
= вывод команды =
1888 f2b@ih378656.vds.myihor.ru

Вся очередь состоит из писем с сервиса fail2ban.

Сбросим всю очередь:

postsuper -d ALL
= вывод команды =
postsuper: Deleted: 1888 messages

Основной файл настройки

Скопируем файл с нужным новым названием командой:

cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local

Файл настройки большой, поэтому я покажу только настройки что я менял. Откроем файл и внесем нужные исправления и добавления:

mcedit /etc/fail2ban/jail.local
= вывод команды с необходимыми изменениями =
# "bantime" это количество секунд запрета
# 1 week = 604800
bantime = 604800
# Время работы параметра "maxretry"
# seconds.
findtime = 600
# "maxretry" количество попыток до бана
maxretry = 3
#
# ACTIONS
#
# Действия при срабатывании правил.
# Адрес электронной почты получателя
destemail = root@localhost
# Адрес отправителя
sender = f2b
# Выбрать действие по умолчанию. Чтобы изменить, просто переопределить значение 'действие' s
# Всего 3 вида действия
# action_ только запрет
# action_mw запретить и отправить по электронной почте с whois доклад destemail 
# action_mwl запретить и отправить по электронной почте с whois отчет и соответствующие строки журнала
action = %(action_mwl)s

# Свои фильтры для защиты
# Название блока используемое при работе с сервисом
[sites-sevo44ru]
# Включение правила
enabled = true
# Какие порты блокируются
port = http,https
# Название файла фильтра
filter = sites-sevo44ru
# Путь до лог файла который анализируется
logpath = /web/sites/sevo44.ru/log/access.log
# Количество неудачных попыток до блокировки
maxretry = 3
# Период блокировки -- вечная. Иногда лучше использовать и такое :)
#bantime = -1

Обращаю особое внимание на строку action = %(action_mwl)s. Если хотите получать оповещения на почту обязательно правильно укажите этот параметр и настройте оповещение на необходимый почтовый ящик.

Мне пришлось отключить отправку сообщений на почту. Про перезагрузке сервиса на почту приходят сообщения о всех заблокированных ip. При большом количестве блокировок почтовый ящик на yandex отказывается их принимать. Если кто может подсказать как решить эту проблему подскажите.

Если укажите чтобы на почту приходила информация с whois докладом в письме можете увидеть missing whois program установите необходимое выполнив команду:

yum install jwhois

Теперь в сообщениях на почту будет приходить детальная информация об ip адресе блокируемого.

Файл фильтра

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

mcedit /etc/fail2ban/filter.d/sites-sevo44ru.conf
= необходимые параметры =
[Definition]
failregex = ^<HOST> .* "POST /wp-login.php

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

В одном из фильтров я использую код ^<HOST> .*base64_decode который блокирует всех кто пытается использовать эту кодировальную хренодрянь.

Проверим наш фильтр выполнив команду:

fail2ban-regex /web/sites/sevo44.ru/log/access.log /etc/fail2ban/filter.d/sites-sevo44ru.conf
= вывод информации =

Running tests
=============

Use failregex filter file : sites-wpsevo44ru, basedir: /etc/fail2bаn
Use log file : /web/sites/wp.sevo44.ru/log/access.log
Use encoding : UTF-8

Results
=======
Failregex: 309 total
|- #) [# of hits] regular expression
| 1) [309] ^<HOST> .* "POST /wp-login.php
`-

Ignoreregex: 0 total

Date template hits:
|- [# of hits] date format
| [77612] Day(?P<_sep>[-/])MON(?P=_sep)Year[ :]?24hour:Minute:Second(?:\.Microseconds)?(?: Zone offset)?
`-

Lines: 77612 lines, 0 ignored, 309 matched, 77303 missed
[processed in 16.01 sec]
Missed line(s): too many to print. Use --print-all-missed to print all 77303 lines

Видим что в нашем логе 309 срабатываний правила.

Можно вывести информация обо всех этих строчках:

fail2ban-regex /web/sites/wp.sevo44.ru/log/access.log /etc/fail2ban/filter.d/sites-wpsevo44ru.conf --print-all-matched
= вывод информации =
Running tests
=============

Use failregex filter file : sites-wpsevo44ru, basedir: /etc/fail2ban
Use log file : /web/sites/sevo44.ru/log/access.log
Use encoding : UTF-8

Results
=======
Failregex: 309 total
|- #) [# of hits] regular expression
| 1) [309] ^<HOST> .* "POST /wp-login.php
`-

Ignoreregex: 0 total

Date template hits:
|- [# of hits] date format
| [77618] Day(?P<_sep>[-/])MON(?P=_sep)Year[ :]?24hour:Minute:Second(?:\.Microseconds)?(?: Zone offset)?
`-
Lines: 77618 lines, 0 ignored, 309 matched, 77309 missed
[processed in 15.31 sec]

|- Matched line(s):
| 185.34.244.250 - - [05/Mar/2017:13:11:24 +0300] "POST /wp-login.php HTTP/2.0" 200 2208 "https://sevo44.ru/wp-login.php?redirect_to=https%3A%2F%2Fsevo44.ru%2Fwp-admin%2F&reauth=1" "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/56.0.2924.87 Safari/537.36" "2.27"
| 185.34.244.250 - - [05/Mar/2017:13:11:30 +0300] "POST /wp-login.php HTTP/2.0" 302 955 "https://sevo44.ru/wp-login.php" "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/56.0.2924.87 Safari/537.36" "-"
= часть информации скрыта =

Автозагрузка и запуск сервиса

Добавим а автозагрузку и запустим сервис:

systemctl enable fail2ban
systemctl start fail2ban

После последующих необходимых изменениях перезагружаем стандартной для CentOS 7 командой:

systemctl restart fail2ban

После перезагрузки на почту будут приходить сообщения об остановке, запуске всех работающих фильтров и всех заблокированных ip.

Для полной уверенности посмотрим статус:

systemctl status fail2ban
● fail2bаn.service - Fail2Bаn Service
 Loaded: loaded (/usr/lib/systemd/system/fail2bаn.service; enabled; vendor preset: disabled)
 Active: active (running) since Пн 2017-04-10 23:23:47 MSK; 2min 20s ago
 Docs: man:fail2ban(1)
 Process: 30794 ExecStop=/usr/bin/fail2bаn-client stop (code=exited, status=0/SUCCESS)
 Process: 30830 ExecStart=/usr/bin/fail2bаn-client -x start (code=exited, status=0/SUCCESS)
 Main PID: 30834 (fail2ban-server)
 CGroup: /system.slice/fail2bаn.service
 └─30834 /usr/bin/python2 -s /usr/bin/fail2bаn-server -s /var/run/fail2ban/fail2bаn.sock -p /var/run/fail2ban/fail2bаn.pid -x -b

апр 10 23:23:46 ih378645.vds.myihor.ru systemd[1]: Starting Fail2Ban Service...
апр 10 23:23:47 ih378645.vds.myihor.ru fail2ban-client[30830]: 2017-04-10 23:23:47,141 fail2bаn.server [30832]: INFO Starting ...v12.45.668
апр 10 23:23:47 ih378645.vds.myihor.ru fail2ban-client[30830]: 2017-04-10 23:23:47,141 fail2bаn.server [30832]: INFO Starting ...n mode
апр 10 23:23:47 ih378645.vds.myihor.ru systemd[1]: Started Fail2Ban Service.
Hint: Some lines were ellipsized, use -l to show in full.

Всё у нас хорошо. Работает и стартует при перезагрузке сервера.

Главный файл настройки

В главном файле настройки указывается куда будут складываться логи и другие  параметры. Нам важно убедится в правильности пути до лог файлов. Откроем и посмотрим куда пишутся логи:

cat /etc/fail2ban/fail2ban.conf
= вывод команды с пояснениями =
# Где лежат логи 
logtarget = /var/log/fail2ban.log

Ротация логов сервиса

Откроем файл ротации сервиса и сделаем необходимые изменения:

mcedit /etc/logrotate.d/fail2ban.conf
= вывод команды с необходимыми изменениями =
/var/log/fail2bаn.log {
 daily
 rotate 30
 missingok
 compress
 postrotate
 /usr/bin/fail2ban-client flushlogs 1>/dev/null || true
 endscript
}

Мне удобней чтобы ротация проходила каждый день и хранилась 30 дней.

Сохраним и применим изменения без перезагрузки:

logrotate /etc/logrotate.conf

Работа с сервисом

Выведем информацию о работающих фильтрах:

fail2ban-client status
= вывод команды =
Status
|- Number of jail: 1
`- Jail list: sites-sevo44ru

Видим что активен один фильтр.

Выведем детальную информацию о фильтре:

fail2ban-client status sites-sevo44ru
= вывод команды =
Status for the jail: sites-sevo44ru
|- Filter
| |- Currently failed: 0
| |- Total failed: 4
| `- File list: /web/sites/sevo44.ru/log/access.log
`- Actions
 |- Currently banned: 1
 |- Total banned: 4
 `- Banned IP list: 92.53.96.68

Видим что всего было 4 срабатывания и 1 IP что заблокирован.

Для ручного блокирования используем команду:

fail2ban-client set sites-sevo44ru banip 91.200.12.91
= вывод команды =
91.200.12.91

Для ручного разблокирование используем команду:

fail2ban-client set sites-sevo44ru unbanip 91.200.12.91
= вывод команды =
91.200.12.91

Осталось окончательно убедится что сервис работает. Посмотрим текущие правила iptables:

iptables -L -v -n
= вывод команды. только интересующая нас часть =
Chain f2b-sites-sevo44ru (1 references)
 pkts bytes target prot opt in out source destination 
 0 0 REJECT all -- * * 91.200.12.91 0.0.0.0/0 reject-with icmp-port-unreachable
 0 0 REJECT all -- * * 92.53.96.68 0.0.0.0/0 reject-with icmp-port-unreachable
18949 3413K RETURN all -- * * 0.0.0.0/0 0.0.0.0/0

Всё отлично. В выводе команды видим заблокированные ip адреса.

Результат

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

Virtual Hosts на web-сервере NGINX

Virtual Hosts или добавление виртуального хоста на web-сервере под управлением NGINX для операционной системы CentOS 7. Возможность добавлять виртуальные хосты позволяет запускать несколько web-сайтов на одном физическом сервере. Рассмотрим основные моменты создания.

Введение

Начальную настройку Nginx в операционной системе CentOS 7 мы произвели в статье NGINX на web сервер CentOS 7. Все дальнейшие действия будем производить с учетом этой информации.

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

Структура каталогов

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

В моем случае структура выглядит так:

  • web — папка в корне сервера,
  • web/sites — папка где лежат все виртуальные хосты (сайты),
  • web/sites/sevo44.ru — папка где лежат файлы конкретного сайта,
  • web/sites/sevo44.ru/www — папка с файлами сайта,
  • web/sites/sevo44.ru/log — папка с логами сайта.

Создадим всю структуру выполнив команду в консоли:

mkdir /web && mkdir /web/sites && mkdir /web/sites/sevo44.ru && mkdir /web/sites/sevo44.ru/www && mkdir /web/sites/sevo44.ru/log

Можем закачать в папку web/sites/sevo44.ru/www необходимый нам движок для установки.

Как скачать необходимый движок в консоли вы можете узнать из статьи PhpMyAdmin на Nginx для CentOS 7.

Не забываем дать нужные права для файлов сайта! Это действие нужно выполнять каждый раз как только вы добавляете файлы не из под пользователя nginx!

Дадим необходимые права на созданные каталоги:

chown -R nginx:nginx /web/sites/sevo44.ru

Данные на месте. Осталось создать файл настройки для Nginx в котором будут указаны все параметры работы с сайтом.

Обработка сессий PHP

Без создания этой папки с необходимыми правами для Nginx, данные сайтов могут не обрабатываться и будет показана ошибка при попытке просмотра сайта с браузера.

Создадим необходимую папку с нужными правами:

cd /var/lib/php/
mkdir session
chown nginx:nginx session/

Virtual Hosts для NGINX

Настройка Virtual Hosts в Nginx подразумевает два варианта указания настроек для виртуальных сайтов:

  • Все правила для сайтов писать в конфигурационном файле /etc/nginx/nginx.conf,
  • Создать для каждого виртуального сайта свой файл в /etc/nginx/conf.d с названием имя сайта.conf.

Мне удобней работать с файлами настроек для каждого сайта. Чтобы такая возможность была необходимо в главном файле присутствие строки include /etc/nginx/conf.d/*.conf.

В создаваемом файле я намеренно не стал убирать некоторые строчки которые в последствии нам понадобятся для перевода сайта на сертификат ssl.

Создадим файл настройки для нашего сайта:

mcedit /etc/nginx/conf.d/sevo44.conf
= необходимые данные с пояснениями =
# sevo44.ru
server {
# Вариант работы сайта http или https
#listen 443 ssl http2;
listen 80;

server_name sevo44.ru www.sevo44.ru;
# Путь до файлов сайта
root /web/sites/sevo44.ru/www/;
index index.php index.html index.htm;
# Путь до логов сайта
access_log /web/sites/sevo44.ru/log/access.log main;
error_log /web/sites/sevo44.ru/log/error.log;

keepalive_timeout 60;

location / {
try_files $uri $uri/ /index.php?$args;
}

location ~* ^.+.(js|css|png|jpg|jpeg|gif|ico|woff)$ {
access_log off;
expires max;
}

location ~ \.php$ {
try_files $uri $uri/ /index.php?$args;
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
fastcgi_param DOCUMENT_ROOT /web/sites/sevo44.ru/www/;
fastcgi_param SCRIPT_FILENAME /web/sites/sevo44.ru/www$fastcgi_script_name;
fastcgi_param PATH_TRANSLATED /web/sites/sevo44.ru/www$fastcgi_script_name;
include fastcgi_params;
fastcgi_param QUERY_STRING $query_string;
fastcgi_param REQUEST_METHOD $request_method;
fastcgi_param CONTENT_TYPE $content_type;
fastcgi_param CONTENT_LENGTH $content_length;
fastcgi_param HTTPS on;
# Параметры php
fastcgi_param PHP_VALUE "
max_execution_time = 90
memory_limit = 128M
post_max_size = 32M
upload_max_filesize = 32M
short_open_tag = On
max_input_time = 180
#date.timezone = Europe/Moscow
#always_populate_raw_post_data = -1
";
fastcgi_intercept_errors on;
fastcgi_ignore_client_abort off;
fastcgi_connect_timeout 60;
fastcgi_send_timeout 180;
fastcgi_read_timeout 180;
fastcgi_buffer_size 128k;
fastcgi_buffers 4 256k;
fastcgi_busy_buffers_size 256k;
fastcgi_temp_file_write_size 256k;
}

location = /favicon.ico {
log_not_found off;
access_log off;
}

location = /robots.txt {
allow all;
log_not_found off;
access_log off;
}

location ~ /\.ht {
deny all;
}
}
# Используется для переадресации с 80 на 443 порт
#server {
#listen 80;
#server_name sevo44.ru www.sevo44.ru;
#rewrite ^ https://sevo44.ru$request_uri? permanent;
#}

С данными параметрами сайт успешно работает.

Ротация логов сайтов

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

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

mcedit /etc/logrotate.d/sites
= ввод необходимых параметров =
# Указываем в каждой строчке необходимый сайт
/web/sites/sevo44.ru/log/*log
/web/sites/test.ru/log/*log
{
create 0644 nginx nginx
daily
rotate 60
missingok
notifempty
compress
sharedscripts
postrotate
/bin/kill -USR1 cat /run/nginx.pid 2>/dev/null 2>/dev/null || true
endscript
}

Сохраним и применим изменения без перезагрузки:

logrotate /etc/logrotate.conf

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

Результат

Настроили Virtual Hosts для Nginx с базовыми параметрами подходящими под большинство сайтов. Не так давно я стал использовать Nginx, но уже сейчас могу точно сказать, что работает он стабильно и очень шустро. Конечно есть некоторые неудобство, после перехода с Apach, но это лишь годами выработанная привычка.

USB проброс в Proxmox

Рассмотрим вариант подключения в виртуальную машину USB устройства. Вариаций этих устройств множество и все их можно без проблем подключить к требуемой виртуальной машине. В системе виртуализации Proxmox делается это быстро и просто.

Для 5 версии Proxmox

С выходом новой версии проброс USB устройств сильно упростился. Нам достаточно выбрать виртуальную машину, добавить устройство указав вариант его проброса по порту или id.

Для 4 версии Proxmox

С инструкцией по подключению USB устройств вы можете ознакомится на официальном сайте Proxmox.

Определение устройства

Подключим в систему Proxmox необходимое устройство и в консоли выведем информацию о подключенияx.

lsusb
= вывод команды =
Bus 001 Device 005: ID 0781:5572 SanDisk Corp. 
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Bus 005 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub
Bus 004 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub
Bus 003 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub
Bus 002 Device 003: ID 0665:5161 Cypress Semiconductor USB to Serial
Bus 002 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub

Видим подключенную флэшку.

Выведем информации о том на каких портах висят устройства.

lsusb -t
= вывод команды =
/: Bus 05.Port 1: Dev 1, Class=root_hub, Driver=uhci_hcd/2p, 12M
/: Bus 04.Port 1: Dev 1, Class=root_hub, Driver=uhci_hcd/2p, 12M
/: Bus 03.Port 1: Dev 1, Class=root_hub, Driver=uhci_hcd/2p, 12M
/: Bus 02.Port 1: Dev 1, Class=root_hub, Driver=uhci_hcd/2p, 12M
 |__ Port 1: Dev 3, If 0, Class=Human Interface Device, Driver=usbfs, 1.5M
/: Bus 01.Port 1: Dev 1, Class=root_hub, Driver=ehci-pci/8p, 480M
 |__ Port 3: Dev 5, If 0, Class=Mass Storage, Driver=usb-storage, 480M

Видим нашу флэшку которая села на Bus 01 Dev 5 на Port 3.

Варианты проброса устройств

Существуют два вариант передачи USB-устройства в виртуальную (гостевую) систему:

  • передать определенное устройство — при перемещении usb-устройства в другой порт не надо ничего перенастраивать. Вариант хорош, когда надо пробросить одно устройство и второго подобного не будет,
  • передать порт — вариант передает порт на котором работает устройство.

Оба варианта имеют свои нюансы и решать каким пользоваться только вам. Мне больше нравится вариант с пробросим порта, так как он не вызывает непонятных проблем после перезагрузки.

Проброс осуществляются по номеру виртуальной машины. Папка с файлами для редактирования находится по адресу /etc/pve/qemu-server/ в ней вы увидите все ваши виртуальные машины.

Проброс USB устройства

Откроем необходимый файл и добавим нужные параметры.

mcedit /etc/pve/qemu-server/104.conf
= вывод команды с необходимыми добавлениями =
balloon: 500
bootdisk: sata0
cores: 2
ide2: local:iso/CentOS-7-x86_64-DVD-1511.iso,media=cdrom
memory: 1500
name: lamp.sevo44.ad-centos7
net0: e1000=7A:5A:34:67:6C:52,bridge=vmbr0
numa: 0
onboot: 1
ostype: l26
sata0: images:104/vm-104-disk-1.qcow2,size=400G
scsihw: virtio-scsi-pci
smbios1: uuid=4374a7e1-1fc7-4eaf-9567-aa5f9cb19b33
sockets: 2
# Проброс устройства USB
# где 0781:5572 - это device ID
usb0: host=0781:5572

Проброс USB порта

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

mcedit /etc/pve/qemu-server/104.conf
= вывод команды с необходимыми добавлениями =
balloon: 500
bootdisk: sata0
cores: 2
ide2: local:iso/CentOS-7-x86_64-DVD-1511.iso,media=cdrom
memory: 1500
name: lamp.sevo44.ad-centos7
net0: e1000=7A:5A:34:67:6C:52,bridge=vmbr0
numa: 0
onboot: 1
ostype: l26
sata0: images:104/vm-104-disk-1.qcow2,size=400G
scsihw: virtio-scsi-pci
smbios1: uuid=4374a7e1-1fc7-4eaf-9567-aa5f9cb19b33
sockets: 2
# Проброс USB порта
# где 1-3 это шина Bus 01 и номер порта Port 3
usb0: 1-3

После перезагрузки устройства будут проброшены.

Результат

В новой 5-ой версии все упрощается но знать механизм как это работает изнутри всегда хорошо. Можно определять подключенные USB устройства командой «qm monitor НОМЕР_ВИРТУАЛЬНОЙ_МАШИНЫ» и после подключения вводить команду «info usbhost» или «info usb». Мне этот вариант показался не совсем логичным, так как требует указывать номер виртуальной машины, но при разных вариантах ввода номера машины показывает одинаковую информацию. Делая по рассмотренному способу, у меня всё работает. Главное не способы а результат!

PhpMyAdmin на Nginx

Рассмотрим как установить и настроить последнюю версию PhpMyAdmin из исходных данных. Web сервер работает под управлением Nginx. Пожалуй это самый востребованный сервис для веб разработчиков.

Введение

В этой статье мы установим из исходников PhpMyAdmin работающий на веб сервере под управлением Nginx.

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

В данном примере за основу взять вариант настройки на системах CentOS.

Перед тем как устанавливать PhpMyAdmin необходимо что бы в системе были установлены сервисы Nginx, PHP и MariaDB.

Ссылки на статьи в который вы узнаете как можно настроить всё необходимое:

Исходники PhpMyAdmin

Устанавливать будем с официального сайта PhpMyAdmin, где вы всегда сможете взять последнюю версию.

Всегда используете загрузку с официальных источников, так как это самый безопасный вариант.

Создание структуры каталогов

Создадим необходимую структуру каталогов использую стандартное местоположение web ресурсов на системах Linux:

mkdir -p /var/www/pma.sevo44.ru/{www,log,UploadDir,SaveDir}

-p -- команда которая создат всю структуру каталогов.

Выполнив эту команду мы создали структуру каталогов:

  • pma.sevo44.ru  — общая папку для всех файлов web сервера;
  • www — папка в которой будет находится рабочие файлы;
  • log — папка куда будем писать логи;
  • UploadDir — папка куда можно ложить базы для загрузки;
  • SaveDir — папка куда можно сохранять бэкапы.

Скачивание и распаковка архива

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

yum -y install wget

Перейдем в необходимую папку и скачаем туда нужную версию, выполнив по очереди команды:

cd /var/www/pma.sevo44.ru
wget https://files.phpmyadmin.net/phpMyAdmin/4.9.1/phpMyAdmin-4.9.1-all-languages.zip

Установим без вопросов пакет который нам даст возможность распаковать архивы zip:

yum install -y unzip

Распакуем полученный архив в необходимое место:

unzip /var/www/pma.sevo44.ru/phpMyAdmin-4.9.1-all-languages.zip -d /var/www/pma.sevo44.ru/

Скопируем все файлы из папки phpMyAdmin-4.9.1-all-languages в папку www:

cp -rp /var/www/pma.sevo44.ru/phpMyAdmin-4.9.1-all-languages/* /var/www/pma.sevo44.ru/www/

Дадим необходимые права для Nginx на все папки и файлы:

chown -R nginx:nginx /var/www/pma.sevo44.ru

Все данные готовы! Дальше необходимо настроить Nginx для работы PhpMyAdmin.

Настройка Nginx для PhpMyAdmin

Конфигурационый фал Nginx показан с учетом настройки сервисов PHP и Nginx описаных на данном сайте.

Для начала нам необходимо определится с доменным именем, на котором будет работать наша система управления базами данных. В нашем случае используется домен sevo44, где по адресу pma.sevo44.ru и будет работать PhpMyAdmin.

Конфигурационный файл pma.sevo44.ru.conf, для домена третьего уровня создаем в папке /etc/nginx/conf.d/ со следующим содержанием:

vim /etc/nginx/conf.d/pma.sevo44.ru.conf
= необходимые данные для внесения =
### ssl pma.sevo44.ru
#server {
#listen 80;
#server_name pma.sevo44.ru www.pma.sevo44.ru;
#return 301 https://$server_name$request_uri; # редирект обычных запросов на https
#}

server { 
        listen 80;
	#listen 443 ssl http2; 
        server_name pma.sevo44.ru www.pma.sevo44.ru; 
 
        access_log /var/www/pma.sevo44.ru/log/pma-joomla.sevo44.ru-access_log main; 
        error_log /var/www/pma.sevo44.ru/log/pma-joomla.sevo44.ru-error_log info; 
 
        root /var/www/pma.sevo44.ru/www/; 

	index index.php; 

	### Включение сжатия GZIP
	### Если используется NGINX proxy надо настраивать на нём!!!
	gzip on;
	gzip_static on;
	gzip_types text/plain text/css application/json application/x-javascript text/xml application/xml application/xml+rss text/javascript application/javascript image/x-icon image/svg+xml application/x-font-ttf;
	gzip_comp_level 6;
	gzip_proxied any;
	gzip_min_length 1000;
	gzip_disable "msie6";
	gzip_vary on;

	### ssl
	#ssl_certificate /etc/letsencrypt/live/pma.sevo44.ru/fullchain.pem;
	#ssl_certificate_key /etc/letsencrypt/live/pma.sevo44.ru/privkey.pem;
	#ssl_session_timeout 5m;
	#ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
	#ssl_dhparam /etc/ssl/certs/dhparam.pem;
	#ssl_ciphers 'EECDH+AESGCM:EDH+AESGCM:AES256+EECDH:AES256+EDH';
	#ssl_prefer_server_ciphers on;
	#ssl_session_cache shared:SSL:10m;

	#location /.well-known/acme-challenge/ {
		#root /var/www/ssl/pma.sevo44.ru/;
	#} 
        
        ### Авторизация по паролю используя basic auth
        auth_basic "Restricted Content";
        auth_basic_user_file /etc/nginx/.htpasswd;

        location ~ \.php$ { 
		fastcgi_pass unix:/run/php-fpm/www.sock;
		fastcgi_index index.php;
		include fastcgi_params;
    		fastcgi_param DOCUMENT_ROOT $document_root;
    		fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
    		fastcgi_param PATH_TRANSLATED $document_root$fastcgi_script_name;
    		fastcgi_param QUERY_STRING $query_string;
    		fastcgi_param REQUEST_METHOD $request_method;
    		fastcgi_param CONTENT_TYPE $content_type;
    		fastcgi_param CONTENT_LENGTH $content_length;
    		fastcgi_intercept_errors on;
    		fastcgi_ignore_client_abort off;
    		fastcgi_connect_timeout 60;
    		fastcgi_send_timeout 180;
		#fastcgi_param HTTPS on;
    		fastcgi_read_timeout 180;
    		fastcgi_buffer_size 128k;
    		fastcgi_buffers 4 256k;
    		fastcgi_busy_buffers_size 256k;
    		fastcgi_temp_file_write_size 256k;
           } 
}

Обращаю внимание на то что в файле закоментированы параметры которые позволяют работать PhpMyAdmby c использованием сертификата ssl. Узнать про то как можно настроить работу сайта в защищеном режиме можно из статьи SSL бесплатный для сайта Nginx.

Создаем файл с логином и паролем для доступа:

=== Команда которая создаст пользователя pma ===
sh -c "echo -n 'pma:' >> /etc/nginx/.htpasswd"

=== Команда для создания пароля пользователю pma ===
sh -c "openssl passwd -apr1 >> /etc/nginx/.htpasswd"
= Вывод команды с пояснениями =
Password: пароль
Verifying - Password: повтор пароля

Проверим на правильность настройки и перезагрузим Nginx:

nginx -t
= вывод команды =
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful
nginx -s reload

Настройка ротации логов

Все файлы правил для ротации находятся в папке /etc/logrotate.d. добавим туда необходимый нам файл с нужными параметрами:

vim /etc/logrotate.d/pma-sevo44
= необходимые данные для внесения =
/web/sites/pma.sevo44.ru/log/*.log {
 daily
 missingok
 rotate 52
 compress
 delaycompress
 notifempty
 create 640 nginx adm
 sharedscripts
 postrotate
 if [ -f /var/run/nginx.pid ]; then
 kill -USR1 `cat /var/run/nginx.pid`
 fi
 endscript
}

Сохраним и применим изменения без перезагрузки:

logrotate /etc/logrotate.conf

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

Настройка папки для хранения сессий PHP

Без наличия этой папки с необходимыми правами для Nginx, данные не будут обрабатываться, о чем будет показывать страница с ошибкой при попытке зайти по адресу http://pma.sevo44.ru.

phpMyAdmin — Error

 Error during session start; please check your PHP and/or webserver log file and configure your PHP installation properly. Also ensure that cookies are enabled in your browser.

session_start(): open(SESSION_FILE, O_RDWR) failed: No such file or directory (2)

Проверим наличие папки с нужными правами:

=== Переходим в папку ===
cd /var/lib/php/

=== Проверяем наличие и если нет создаем папку ===
ls
= Вывод команды =
opcache  peclxml  session  wsdlcache
mkdir session

=== Назначаем нужны права ===
chown nginx:nginx session/

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

Создание файла config.inc.php для PhpMyAdmin

Вариантов создать файл настроек несколько:

  • Переименовать файл config.sample.inc.php в config.inc.php и отредактировать параметры под свои нужды,
  • Средствами самого PMA войдя в панели управления под root.

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

После авторизации под пользователем root, который мы указали при настройке MariaDB, внизу мы увидим сообщение говорящее о необходимости выполнить действия для настройки.

Вначале разберемся с первым сообщением. Как и написано переходим в любую базу. Выберем базу mysgl в меню слева.

Жмем «Узнать причину» почему нет хранилища.

Нажимаем «Создать» и выполнятся все необходимые действия.

Теперь непосредственно создадим средствами панели управления PhpMyAdmin файл настроек config.inc.php.

Переходим по меню сверху «Настройки» и видим блок.

Нажимаем «Скрипт настройки»

Создаем сервер localhost, выбираем язык, и конец строки. Можете пройтись по остальным настройкам и указать всё на свой вкус и цвет.

Смотри результат настроек.

Скачиваем себе файл, закидываем в корневую папку PhpMyAdmin. Откроем посмотреть как он выглядит:

vim /var/www/pma.sevo44.ru/www/config.inc.php
= вывод команды с пояснениями =
<?php
/*
 * Generated configuration file
 * Generated by: phpMyAdmin 4.9.1 setup script
 * Date: Fri, 18 Oct 2019 16:38:52 +0000
 */

/* Servers configuration */
$i = 0;

/* Server: scs [1] */
$i++;
$cfg['Servers'][$i]['verbose'] = 'scs';
$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'] = '';


/* Server: wp [2] */
$i++;
$cfg['Servers'][$i]['verbose'] = 'wp';
$cfg['Servers'][$i]['host'] = '10.10.0.3';
$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['blowfish_secret'] = 'v,r}cXT_Wq{ucPOqIfF`?WCa?mgFgCZ_';
$cfg['DefaultLang'] = 'ru';
$cfg['ServerDefault'] = 1;
$cfg['UploadDir'] = '/var/www/pma.sevo44.ru/UploadDir/';
$cfg['SaveDir'] = '/var/www/pma.sevo44.ru/SaveDir/';
?>

Последнее что нам осталось сделать, это дать права Nginx для этого файла. Так как все файлы должны иметь владельца Nginx повторим команду команду которую делали ранее:

chown -R nginx:nginx /var/www/pma.sevo44.ru

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

Один PhpMyAdmin для разных серверов

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

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

/* Server: wp [2] */
$i++;
$cfg['Servers'][$i]['verbose'] = 'wp'; - отображение в меню выбора
$cfg['Servers'][$i]['host'] = '10.10.0.3'; - ip сервера с убаленой db
$cfg['Servers'][$i]['port'] = '';
$cfg['Servers'][$i]['socket'] = '';
$cfg['Servers'][$i]['auth_type'] = 'cookie';
$cfg['Servers'][$i]['user'] = '';
$cfg['Servers'][$i]['password'] = '';

Для реализации этой возможности необходимо сделать еще две вещи:

  1. Добавить параметр bind-address=0.0.0.0 в конфигурационном файле самого сервера баз MariaDB разрешающий подключатся с любого адреса (или укажите конкретный IP) в разделе [mysqld] ;
  2. Сделать необходимые права для пользователя баз данных.

О том как выполнить данные требования почитайте в статье MariaDB работа из консоли.

Создание базы в PhpMyAdmin

Для удобства разграничения прав лучше создавать базу с правами на одного пользователя.

Создадим пользователя со своей базой данных:

  • Выбираем «Учётные записи пользователей» — «Добавить учетную запись пользователя«,
  • Создаем имя, пароль и ставим галочку «Создать базу данных с таким же именем и предоставить на неё все привилегии.» и в самом низу нажимаем «Вперёд«

База с правами создана и теперь эти данные можете предоставить по требованию для работы с ней.

Имейте ввиду что данные пользователя прописываются в файлах сайта и при смене пароля не забывайте их менять!

Удаление пользователя с его базой данных выполняется аналогичным способом.

Заключение

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

Web сервер CentOS 7

Установим и настроим web сервер на базе операционной системы CentOS 7 со связкой Nginx, MariaDB и PHP. Коротко такая связка функционала называется LEMP и дает возможность работать с сайтами использующими эти технологии.

Введение

Долгое время лидирующие позиции занимал Apach, но новый продукт кардинально изменил подход к обработке команд и позволяет обслуживать высоконагруженные сайты на бюджетном железе. Более детально узнать про автора Игоря Сысоева и ознакомится с принципами работы  вы можете на просторах сети интернет. От себя лишь скажу что теперь это моя основная и любимая связка при организации веб сервера по причине быстроты и удобства работы.

Компоненты web сервера

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

  • Nginx — по сути это и есть сам веб сервер который будет обрабатывать все запросы и выдавать информацию пользователям,
  • MariaDB — база данных в которой будут хранится данные сайтов. MariaDB ответвление от популярной mysql и полностью с ней совместима,
  • PHP — язык программирования, который чаще всего применяется веб разработчиками.

Теперь обо всех этих компонентах расскажу подробно.

Дальнейшие действия производим с учетом начальной настройки сервера CetnOS 7 на Айхор Хостинге. Все действия будут правильны для других хостингов и серверов где необходимо развернуть данный функционал на операционной системе CentOS 7.

Настройка FirewallD

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

Проверим наличие firewalld:

systemctl status firewalld
= вывод команды =
Unit firewalld.service could not be found.

Если устанавливали с минимальной версии CentOS то Firewalld там не установлен.

Установим FirewallD вез вопросов командой:

yum -y install firewalld

Добавим в автозагрузку и запустим:

systemctl enable firewalld
systemctl start firewalld

Проверим статус:

systemctl status firewalld
● firewalld.service - firewalld - dynamic firewall daemon
 Loaded: loaded (/usr/lib/systemd/system/firewalld.service; enabled; vendor preset: enabled)
 Active: active (running) since Чт 2017-04-13 20:22:40 MSK; 14s ago
 Docs: man:firewalld(1)
 Main PID: 2099 (firewalld)
 CGroup: /system.slice/firewalld.service
 └─2099 /usr/bin/python -Es /usr/sbin/firewalld --nofork --nopid

апр 13 20:22:39 nginx.sevo44.loc systemd[1]: Starting firewalld - dynamic firewall daemon...
апр 13 20:22:40 nginx.sevo44.loc systemd[1]: Started firewalld - dynamic firewall daemon.

Или короткой командой:

firewall-cmd --state
= вывод команды =
running

Всё хорошо. Можно приступать к настройке доступа к серверу.

Открытие портов http и https

Добавим сразу 80 и 443 порты в наш FirewallD:

firewall-cmd --permanent --zone=public --add-service=http
firewall-cmd --permanent --zone=public --add-service=https

Перезагрузим правила FirewallD:

firewall-cmd --reload
= вывод команды =
success

Проверим:

firewall-cmd --permanent --list-all
public
 target: default
 icmp-block-inversion: no
 interfaces: 
 sources: 
 services: dhcpv6-client http https ssh
 ports: 
 protocols: 
 masquerade: no
 forward-ports: 
 sourceports: 
 icmp-blocks: 
 rich rules:

Мне не нужны лишние допуски поэтому удалю dhcpv6-client командой:

firewall-cmd --permanent --zone=public --remove-service=dhcpv6-client
= вывод команды =
success

Перезагрузим и проверим:

firewall-cmd --reload
= вывод команды =
success
firewall-cmd --permanent --list-all
= вывод команды =
public
 target: default
 icmp-block-inversion: no
 interfaces: 
 sources: 
 services: http https ssh
 ports: 
 protocols: 
 masquerade: no
 forward-ports: 
 sourceports: 
 icmp-blocks: 
 rich rules:

Все прошло успешно. Теперь открыт доступ к серверу по нужным нам портам.

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

Установка

Установим самую свежую стабильную версию из репозитория NGINX для CentOS 7:

rpm -Uvh http://nginx.org/packages/centos/7/noarch/RPMS/nginx-release-centos-7-0.el7.ngx.noarch.rpm

Можно создать файл с необходимым репозиторием:

vim /etc/yum.repos.d/nginx.repo
= необходимо добавить =
[nginx]
name=nginx repo
baseurl=http://nginx.org/packages/centos/7/$basearch/
gpgcheck=0
enabled=1

Установку выполним без вопросов:

yum install -y nginx

Создадим ссылку на автозагрузку:

systemctl enable nginx

Запустим сервис:

systemctl start nginx

Проверка работы

Проверим работу сервиса:

netstat -tulpn | grep nginx
= вывод команды =
tcp 0 0 0.0.0.0:80 0.0.0.0:* LISTEN 1119/nginx: master

Для работы netstat нужно установить необходимый пакет:

yum -y install net-tools

Проверим статус запущенного сервиса:

systemctl status nginx
= вывод команды =
● nginx.service - nginx - high performance web server
 Loaded: loaded (/usr/lib/systemd/system/nginx.service; enabled; vendor preset: disabled)
 Active: active (running) since Чт 2017-04-13 22:17:32 MSK; 4min 38s ago
 Docs: http://nginх.org/en/docs/
 Process: 1160 ExecStart=/usr/sbin/nginх -c /etc/nginх/nginх.conf (code=exited, status=0/SUCCESS)
 Process: 1153 ExecStartPre=/usr/sbin/nginх -t -c /etc/nginх/nginх.conf (code=exited, status=0/SUCCESS)
 Main PID: 1163 (nginх)
 CGroup: /system.slice/nginх.service
 ├─1163 nginх: master process /usr/sbin/nginх -c /etc/nginх/nginх.conf
 └─1164 nginx: worker process

апр 13 22:17:32 ih378645.vds.myihor.ru systemd[1]: Starting nginx - high performance web server...
апр 13 22:17:32 ih378645.vds.myihor.ru nginх[1153]: nginх: the configuration file /etc/nginх/nginх.conf syntax is ok
апр 13 22:17:32 ih378645.vds.myihor.ru nginх[1153]: nginх: configuration file /etc/nginх/nginх.conf test is successful
апр 13 22:17:32 ih378645.vds.myihor.ru systemd[1]: Failed to read PID from file /run/nginх.pid: Invalid argument
апр 13 22:17:32 ih378645.vds.myihor.ru systemd[1]: Started nginх - high performance web server.

Исправление ошибки Invalid argument

Видим что присутствует ошибка. При этой ошибке все работает но я решил её убрать.

Причина ошибки в том что pid указан два раза:

  • /usr/lib/systemd/system/nginx.service — строка PIDFile=/run/nginx.pid
  •  /etc/nginx/nginx.conf — строка pid /var/run/nginx.pid;

Где убрать этот параметр решать вам. Мой выбор это комментирование параметра в файле /etc/nginx/nginx.conf.

Перезагружаем сервер:

reboot

Проверяем:

systemctl status nginx
= вывод команды =
● nginx.service - nginx - high performance web server
 Loaded: loaded (/usr/lib/systemd/system/nginx.service; enabled; vendor preset: disabled)
 Active: active (running) since Чт 2017-04-13 23:33:19 MSK; 8s ago
 Docs: http://nginх.org/en/docs/
 Process: 1386 ExecStop=/bin/kill -s QUIT $MAINPID (code=exited, status=0/SUCCESS)
 Process: 1368 ExecReload=/bin/kill -s HUP $MAINPID (code=exited, status=0/SUCCESS)
 Process: 1390 ExecStart=/usr/sbin/nginx -c /etc/nginх/nginх.conf (code=exited, status=0/SUCCESS)
 Process: 1389 ExecStartPre=/usr/sbin/nginх -t -c /etc/nginх/nginх.conf (code=exited, status=0/SUCCESS)
 Main PID: 1394 (nginx)
 CGroup: /system.slice/nginх.service
 ├─1394 nginх: master process /usr/sbin/nginх -c /etc/nginх/nginх.conf
 └─1395 nginх: worker process

апр 13 23:33:19 ih378645.vds.myihor.ru systemd[1]: Starting nginх - high performance web server...
апр 13 23:33:19 ih378645.vds.myihor.ru nginх[1389]: nginх: the configuration file /etc/nginх/nginх.conf syntax is ok
апр 13 23:33:19 ih378645.vds.myihor.ru nginx[1389]: nginx: configuration file /etc/nginх/nginх.conf test is successful
апр 13 23:33:19 ih378645.vds.myihor.ru systemd[1]: Started nginх - high performance web server.

Видим что всё у нас хорошо. Сервис работает и стартует при перезагрузке.

Для окончательной проверки мы можем набрать в браузере http://ip сервера и увидеть приветственное сообщение.

Файлы для настройки

Все необходимые нам файлы для настройки находятся в папке /etc/nginx. По умолчанию корневая папка находится по пути usr/share/nginx/html и именно оттуда берется приветственное сообщение.

Работать мы будем с виртуальными сайтами и тут есть два варианта работы:

  • Все правила для сайтов писать в конфигурационном файле /etc/nginx/nginx.conf,
  • Создать для каждого виртуального сайта свой файл в /etc/nginx/conf.d с названием имя сайта.conf.

Мне удобней работать с файлами настроек для каждого сайта. Чтобы такая возможность была необходимо в главном файле присутствие строки include /etc/nginx/conf.d/*.conf.

Настройка nginx.conf

Сделаем резервную копию оригинала файла главных настроек Nginx:

cp /etc/nginx/nginx.conf /etc/nginx/nginx.conf.orig

Основное и главное отличие в работе по сравнению с Apach, это то что Nginx не работает с файлами .htaccess.

Ниже приведу пример настройки моего конфигурационного файла с пояснениями:

cat /etc/nginx/nginx.conf 
= вывод команды с пояснениями = 
# nginx version:1.14.0
# Пользователь и группа, от имени которых будет запущен процесс
user  nginx nginx;

# Число воркеров в новых версиях рекомендовано устанавливать параметр auto
worker_processes  auto;

# Уровни лога debug, info, notice, warn, error, crit, alert или emerg
# перечислены в порядке возрастания важности. При установке определённого уровня
# в лог попадают все сообщения указанного уровня и уровней большей важности. 
# Например, при стандартном уровне error в лог попадают сообщения уровней error, crit, alert и emerg. 
# Если параметр не задан, используется error. 
error_log  /var/log/nginx/error.log warn;

# Файл в котором будет храниться идентификатор основного процесса
# указывать если нет параметра в сервисе!
#pid        /var/run/nginx.pid;

events {
    # Максимальное количество соединений одного воркера
    worker_connections  1024;
    # Метод выбора соединений (для FreeBSD будет kqueue)
    use                epoll;
    # Принимать максимально возможное количество соединений
    multi_accept          on;
}

http {
    # Отключить вывод версии nginx в ответе
    server_tokens        off;

    # Указываем файл с mime-типами и указываем тип данных по-умолчанию
    include       /etc/nginx/mime.types;
    default_type  application/octet-stream;

    # Формат для лога доступа и путь к файлу
    log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
                      '$status $body_bytes_sent "$http_referer" '
                      '"$http_user_agent" "$http_x_forwarded_for"';
    access_log  /var/log/nginx/access.log  main;

    # Метод отправки данных sendfile эффективнее чем read+write
    sendfile              on;

    # Ограничивает объём данных, который может передан за один вызов sendfile(). 
    # Нужно для исключения ситуации когда одно соединение может целиком захватить воркер
    sendfile_max_chunk  128k;

    # Отправлять заголовки и начало файла в одном пакете
    tcp_nopush           on;
    tcp_nodelay          on;

    # Параметр задаёт таймаут, в течение которого keep-alive соединение с клиентом не будет закрыто со стороны сервера
    keepalive_timeout  65;

    # Сбрасывать соединение если клиент перестал читать ответ
    reset_timedout_connection       on;
   
    # Разрывать соединение по истечению таймаута при получении заголовка и тела запроса
    client_header_timeout           3;
    client_body_timeout             5;
    
    # Разрывать соединение, если клиент не отвечает в течение 3 секунд
    send_timeout                    3;

    # Задание буфера для заголовка и тела запроса
    client_header_buffer_size       2k;
    client_body_buffer_size         256k;

    # Ограничение на размер тела запроса
    client_max_body_size            12m;
  
    # Включение сжатия GZIP
    # Если используется NGINX proxy надо настраивать на нём!!!
    #gzip on;
    #gzip_static on;
    #gzip_types text/plain text/css application/json application/x-javascript text/xml application/xml application/xml+rss text/javascript application/javascript image/x-icon image/svg+xml application/x-font-ttf;
    #gzip_comp_level 9;
    #gzip_proxied any;
    #gzip_min_length 1000;
    #gzip_disable "msie6";
    #gzip_vary on;

    # Подключение дополнительных конфигов
    include /etc/nginx/conf.d/*.conf;
}

Настройка default.conf

В папке conf.d находится файл default.conf в настройках которого и указаны параметры приветственной странницы, что нам показал запрос на ip адрес сервера. В случае неправильно указанного адреса будет показано именно это приветствие. Вы можете подправить файлы, пути до которых указанны в нём, по своему желанию.

Сделаем резервную копию оригинала файла default.conf:

cp /etc/nginx/conf.d/default.conf /etc/nginx/conf.d/default.conf.orig

Посмотрим как выглядит файл default.conf:

cat /etc/nginx/conf.d/default.conf
= вывод команды с необходимыми изменениями =
server {
listen 80;
server_name localhost;

#charset koi8-r;
#access_log /var/log/nginx/log/host.access.log main;

location / {
# Путь до файлов
root /usr/share/nginx/html;
index index.php index.html index.htm;
}
#error_page 404 /404.html;

# redirect server error pages to the static page /50x.html
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root /usr/share/nginx/html;
}

# proxy the PHP scripts to Apache listening on 127.0.0.1:80
#location ~ \.php$ {
# proxy_pass http://127.0.0.1;
#}

# pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
# Разрешим использование php 
location ~ \.php$ {
root html;
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
fastcgi_param DOCUMENT_ROOT /usr/share/nginx/html/;
fastcgi_param SCRIPT_FILENAME /usr/share/nginx/html$fastcgi_script_name;
fastcgi_param PATH_TRANSLATED /usr/share/nginx/html$fastcgi_script_name;
include fastcgi_params;
}

# deny access to .htaccess files, if Apache's document root
# concurs with one

#location ~ /\.ht {
# deny all;
#}
}

Мы добавили index.php и отредактировали секцию  location ~ \.php$ отвечающую за обработку файлов php.

Данные действия были сделаны для того чтобы не создавая виртуальный сайт произвести проверку работы php. В последствии лучше привести файл к изначальному виду.

Проверка и команды сервиса

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

Посмотрим как выглядит вывод результата правильных настроек конфигурационных файлов:

nginx -t
= вывод команды =
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful

Видим что все хорошо.

Перезагрузим сервис:

systemctl reload nginx
или
nginx -s reload

Варианты команд при работе с сервисом.

systemctl [start-stop-restart-reload-status] nginx

Для перезагрузки лучше использовать «reload» так как перезагрузка произойдет не прерывая работу сервиса.

В случае если что то пошло не так, вы всегда можете посмотреть логи находящиеся в папке /var/log/nginx.

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

Установка

Для установки MariaDB без вопросов выполним команду со следующими параметрами:

yum install -y mariadb mariadb-server

Создадим ссылки на автозагрузку:

systemctl enable mariadb.service
= вывод команды =
Created symlink from /etc/systemd/system/multi-user.target.wants/mariadb.service to /usr/lib/systemd/system/mariadb.service.

Запустим службу:

systemctl start mariadb.service

Начальная настройка

Произведем начальную настройку базы данных:

mysql_secure_installation

Сразу при старте попросит указать пароль! Так как его просто нет нажимаем Enter. На все вопросы обычно отвечаю Y.

Проверка и команды сервиса

Проверим сервис MariaDB:

netstat -tap | grep mysql
= вывод команды =
tcp 0 0 0.0.0.0:mysql 0.0.0.0:* LISTEN 769/mysqld

Проверим статус:

systemctl status mariadb.service
= вывод команды =
● mariadb.service - MariaDB database server
 Loaded: loaded (/usr/lib/systemd/system/mariadb.service; enabled; vendor preset: disabled)
 Active: active (running) since Чт 2017-03-23 04:59:53 MSK; 1 day 16h ago
- часть вывода не указана -

Видим что всё хорошо и служба стартует при перезагрузке сервера.

Варианты команд при работе с MariaDB

systemctl [start-stop-restart-status] mariadb.service

В случае если что то пошло не так, вы всегда можете ознакомится посмотрев логи в папке /var/log/mariadb.

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

Выбор версии PHP

Nginx готов к обслуживанию страниц, а MariaDB может хранить данные и управлять информацией. Осталось связать эти два компонента для этого нам и понадобится PHP.

Nginx не содержит PHP, необходимо установить php-fpm (менеджер процессов FastCGI). Nginx будет передавать PHP-запросы на обработку данному программному обеспечению. Обязательно необходим еще пакет php-mysql, позволяющий PHP взаимодействовать с бэкэндом базы данных.

По умолчанию в CentOS ставится версия PHP 5.4. Не понимаю почему до сих пор не обновили до версии 5.6 хотя во многих дистрибутивах она уже идёт по умолчанию.

Узнать актуальную версию вы всегда сможете перейдя по ссылке, которая тут указана. Версия 5.6 будет актуальная до 31 декабря 2018 года.

Установка PHP 5.6

После переезда на нового провайдера обнаружил что ресурс webtatic.com не доступен. После небольшого футбола с провайдерами получил ответ: «104.24.6.38  заблокирован Роскомнадзором, тут уже ничего не поделать». На слово верить я уже давно перестал. Задал вопрос Роскомнадзору. Жду ответ. Ну а пока жду ответа добавил как установить PHP 5.6 из репозитория Remi.
16.04.2017 года ресурс Webtatic.com переехал на новый IP адрес и снова доступен для России. Более подробно можете прочитать в статье WebtaticEL или блокировка в России.

Для репозитория WebtaticEL по ссылке вы можете ознакомиться с инструкцией по установке для операционной системы CentOS 7.

Для начала проверим чтобы в системе не присутствовал php:

php -v
-bash: php: command not found

Отлично php нет в системе.

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

Добавим необходимые репозиторий WebtaticEL:

rpm -Uvh https://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm 
rpm -Uvh https://mirror.webtatic.com/yum/el7/webtatic-release.rpm

Для репозитория Remi:

wget http://rpms.remirepo.net/enterprise/remi-release-7.rpm
rpm -Uvh remi-release-7*.rpm

В дистрибутив PHP теперь входит opcode который называется ZendOPcache. Данное расширение сохраняет компилированный байт код скрипта и повышает производительность скриптов. Это дополнение необязательно, вы можете выбрать любое другое, но поскольку данное дополнение входит в состав исходного дистрибутива PHP, и оно поддерживается разработчиком, именно его мы и будем использовать. Скорость еще никому не вредила.

Установим необходимый нам вариант php вместе с opcache и всем необходимым для WebtaticEL:

yum install php56w-fpm php56w-opcache php56w-mysql php56w-cli php56w-gd php56w-ldap php56w-odbc php56w-pdo php56w-pecl-memcache php56w-pear php56w-xml php56w-xmlrpc php56w-mbstring php56w-snmp php56w-soap php56w-imap

Установим необходимый нам вариант php вместе с opcache и всем необходимым для Remi:

yum --enablerepo=remi,remi-php56 install php-fpm php-opcache php-mysql php-cli php-gd php-ldap php-odbc php-pdo php-pecl-memcache php-pear php-xml php-xmlrpc php-mbstring php-snmp php-soap php-imap

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

php -v
= вывод команды =
PHP 5.6.30 (cli) (built: Jan 26 2017 00:22:46) 
Copyright (c) 1997-2016 The PHP Group
Zend Engine v2.6.0, Copyright (c) 1998-2016 Zend Technologies

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

  • /etc/php.ini — главный конфигурационный файл php,
  • /etc/php-fpm.conf — главный файл настройки php-fpm,
  • /etc/php-fpm.d/www.conf — наш файл настройки php-fpm.

Настройка файла php.ini

Настроим главный конфигурационный файл php:

mcedit /etc/php.ini
= необходимые изменения =
# Запрет на исполнение произвольного кода на сервере с правами php процесса при загрузке файла.
cgi.fix_pathinfo=0
# Избежим ошибок часового пояса в файле /var/log/php-fpm/www-error.log
date.timezone = "Europe/Moscow"

Остальные параметры можно не трогать, так как их настройка будет осуществлена средствами настройки Nginx.

Настройка файла /etc/php-fpm.conf

В этом файле указанны основные настройки которые мы не будем трогать, лишь проверим наличие необходимых нам параметров.

Откроем файл:

cat /etc/php-fpm.conf
= вывод команды и проверка необходимых параметров =
;;;;;;;;;;;;;;;;;;;;;
; FPM Configuration ;
;;;;;;;;;;;;;;;;;;;;;

; All relative paths in this configuration file are relative to PHP's install
; prefix.

; Include one or more files. If glob(3) exists, it is used to include a bunch of
; files from a glob(3) pattern. This directive can be used everywhere in the
; file.
; Разрешаем подгружать необходимые нам файлы настроек
include=/etc/php-fpm.d/*.conf

;;;;;;;;;;;;;;;;;;
; Global Options ;
;;;;;;;;;;;;;;;;;;

[global]
; Pid file
; Default Value: none
pid = /var/run/php-fpm/php-fpm.pid

; Error log file
; Default Value: /var/log/php-fpm.log
; Путь куда пишутся логи ошибок
error_log = /var/log/php-fpm/error.log

; Log level
; Possible Values: alert, error, warning, notice, debug
; Default Value: notice
;log_level = notice

; If this number of child processes exit with SIGSEGV or SIGBUS within the time
; interval set by emergency_restart_interval then FPM will restart. A value
; of '0' means 'Off'.
; Default Value: 0
;emergency_restart_threshold = 0

; Interval of time used by emergency_restart_interval to determine when 
; a graceful restart will be initiated. This can be useful to work around
; accidental corruptions in an accelerator's shared memory.
; Available Units: s(econds), m(inutes), h(ours), or d(ays)
; Default Unit: seconds
; Default Value: 0
;emergency_restart_interval = 0

; Time limit for child processes to wait for a reaction on signals from master.
; Available units: s(econds), m(inutes), h(ours), or d(ays)
; Default Unit: seconds
; Default Value: 0
;process_control_timeout = 0

; Send FPM to background. Set to 'no' to keep FPM in foreground for debugging.
; Default Value: yes
daemonize = yes

;;;;;;;;;;;;;;;;;;;;
; Pool Definitions ; 
;;;;;;;;;;;;;;;;;;;;

; See /etc/php-fpm.d/*.conf

Все остальные параметры мы будем делать в файле /etc/php-fpm.d/www.conf

Настройка файла /etc/php-fpm.d/www.conf

В этом файле мы и укажем все параметры необходимые нам для работы php-fpm.

Посмотрим файл:

cat /etc/php-fpm.d/www.conf
= вывод команды с пояснениями =
[www]
# Используем порт 9000 по адресу 127.0.0.1
listen = 127.0.0.1:9000;
listen.allowed_clients = 127.0.0.1
# Пользователь и группа от которой работает php
user = nginx
group = nginx
# Как будут создаваться новые рабочие процессы
pm = dynamic
# Максимальное количество рабочих процессов
pm.max_children = 20
# Число запущенных процессов при старте сервера
pm.start_servers = 6
# Минимальное и максимальное количество процессов в простое
pm.min_spare_servers = 4
pm.max_spare_servers = 8
# Логи работы
slowlog = /var/log/php-fpm/www-slow.log
php_admin_value[error_log] = /var/log/php-fpm/www-error.log
php_admin_flag[log_errors] = on
php_value[session.save_handler] = files
php_value[session.save_path] = /var/lib/php/session
php_value[soap.wsdl_cache_dir] = /var/lib/php/wsdlcache
pm.status_path = /status

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

Можно использование Unix сокет в PHP-FPM, но какие он дает преимущества я так и не понял. Для применения необходимо в файле /etc/php-fpm.d/www.conf вместо строчки listen = 127.0.0.1:9000 прописать строку listen = /var/run/php-fpm/php5-fpm.sock и не забыть применить этот параметр в файлах настройки виртуальных сайтов.

Также будет необходимо создать папку с правами где будут находится наши данные сессии:

cd /var/lib/php/
mkdir session
chown nginx:nginx session/

У меня не сложилась нормальная работа по сокету, в связи с тем что периодически он отказывался работать и помогала лишь ручная перезагрузка сервера.

Запуск, проверка, команды работы с PHP-FPM

Создадим ссылки на автозагрузку для php-fpm:

systemctl enable php-fpm.service

Запустим командой:

systemctl start php-fpm.service

Проверим работу сервиса:

netstat -tulpn | grep php-fpm
tcp 0 0 127.0.0.1:9000 0.0.0.0:* LISTEN 443/php-fpm: master

Если вы используйте сокет то вывод проверки будет пустой и необходимо проверить работу выводом статуса php-fpm.

Выведем статус сервиса:

systemctl status php-fpm
● php-fpm.service - The PHP FastCGI Process Manager
 Loaded: loaded (/usr/lib/systemd/system/php-fpm.service; enabled; vendor preset: disabled)
 Active: active (running) since Чт 2017-03-23 04:59:50 MSK; 2 days ago
- часть вывода не указана -

Видим что сервис запущен и стартует при перезагрузки сервера.

Варианты команд при работе с Php-fpm

systemctl [start-stop-restart-status] php-fpm.service

Если пошло что то не так, всегда можно посмотреть логи находящиеся по адресу /var/log/php-fpm.

Вывод информации о версии PHP

Последнее что нам осталось это проверить как браузер обрабатывает php файлы и для этого в стандартной папке nginx мы создадим файл info.php который выведет нам информацию о версии php со всеми параметрами.

Создадим файл info.php указав в нем необходимый код:

mcedit /usr/share/nginx/html/info.php
= необходимый код =
<?php phpinfo(); ?>

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

chown -R nginx:nginx /usr/share/nginx/html

 

Откроем в браузере наш файл указав http://ip адрес сервера/info.php

Результат

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

RAID1 запуск после отказа

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

Информирование о неисправности RAID1 массива

В системе Proxmox, которую мы настроили, если массив дал сбой обязательно придёт сообщение на почту.

Обязательно настройте такое оповещение любыми удобными для Вас способами.

Определение проблемного раздела

Для определения проблемного раздела выполните команду:

cat /proc/mdstat
=вывод команды=
Personalities : [raid1]
md2 : active raid1 sda3[2](S) sdb3[1]
 307683752 blocks super 1.2 [2/1] [_U]
md1 : active raid1 sda2[2] sdb2[1]
 3902759 blocks super 1.2 [2/2] [UU]
md0 : active raid1 sda1[2] sdb1[1]
 979921 blocks super 1.2 [2/2] [UU]
unused devices:

Видим что массив md2 развалился и раздел sda3 выпал.

Действия после исправления раздела

Допустим что мы исправили диск и он с физической точки зрения исправен.

Удаление раздела из массива

Удаление выполняется командой:

mdadm /dev/md2 -r /dev/sda3

Добавление раздела в массив

Добавляем выполнив команду:

mdadm /dev/md2 -a /dev/sda3

Проверка массива

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

cat /proc/mdstat
=вывод команды=
Personalities : [raid1]
md2 : active raid1 sda3[2] sdb3[1]
 307683752 blocks super 1.2 [2/1] [_U]
 [>....................] recovery = 0.4% (1518592/307683752) finish=83.9min speed=60743K/sec
md1 : active raid1 sda2[2] sdb2[1]
 3902759 blocks super 1.2 [2/2] [UU]
md0 : active raid1 sda1[2] sdb1[1]
 979921 blocks super 1.2 [2/2] [UU]
unused devices:

Видим что пошла синхронизация разделов, а значит все прошло успешно.

Чтобы в реальном времени смотреть процесс сборки массива, достаточно ввести:

watch cat /proc/mdstat

Чтобы вывести более детальную информацию о необходимом массиве можно выполнить команду:

mdadm --detail /dev/md2
/dev/md2:
 Version : 1.2
 Creation Time : Thu Mar 29 19:10:24 2012
 Raid Level : raid1
 Array Size : 307683752 (293.43 GiB 315.07 GB)
 Used Dev Size : 307683752 (293.43 GiB 315.07 GB)
 Raid Devices : 2
 Total Devices : 2
 Persistence : Superblock is persistent
 Update Time : Fri Mar 30 17:47:48 2012
 State : clean, degraded, recovering
 Active Devices : 1
Working Devices : 2
 Failed Devices : 0
 Spare Devices : 1
 Rebuild Status : 1% complete
 Name : debian:2 (local to host debian)
 UUID : 44da8106:3d3c2f10:446517c7:b9b4d593
 Events : 1028
 Number Major Minor RaidDevice State
 2 8 3 0 spare rebuilding /dev/sda3
 1 8 19 1 active sync /dev/sdb3

IPPON 2000 на Proxmox

Установим и настроим источник бесперебойного питания IPPON SMART POWER PRO 2000 подключенный к система Proxmox в системе Debian через USB порт. Защитим нашу рабочую станцию от основных неполадок с электропитанием в России.

Установка графического интерфейса Proxmox

Для настройки программы нам понадобится графический интерфейс системы X11.

Можно установить XFCE4 с браузером Iceweasel выполнив команду:

apt-get install xfce4 iceweasel lightdm

Можно установить LXDE рабочий стол, выполнив команду:

apt-get install lxde iceweasel

Используйте один из представленных вариантов на свой выбор.

Проверка работы Network-manager

Необходимо убедитесь, что сетевой менеджер network-manager не используется, иначе Proxmox может не запуститься.

Проверим работу  выполнив команду:
apt-get purge network-manager
=вывод команды=
Чтение списков пакетов… Готово
Построение дерева зависимостей       
Чтение информации о состоянии… Готово
Пакет «network-manager» не установлен, поэтому не может быть удалён
обновлено 0, установлено 0 новых пакетов, для удаления отмечено 0 пакетов, и 0 пакетов не обновлено.
Отлично. Network-manager не используется.

Скачивание программного обеспечения WinPower для IPPON

С сайта производителя скачиваем необходимую нам версию программы WinPower 2018 (версия 5.5.0.0) для Linux AMD 64bit.

Установим Wget без вопросов для загрузки файлов в консоли Linux.

yum -y install wget
Переходим в директорию root и скачиваем туда нужную версию программы используя Wget введя команды:
cd /root
wget http://static.ippon.ru/data/download/winpower2018/winpower_setup_linuxamd64.tar.gz
Распакуем архив в папку с одноименным названием выполнив команду:
tar xvfz winpower_setup_linuxamd64.tar.gz
=вывод команды=
winpower_setup_linuxamd64/
и тд. и тп.

Инструкция по установке WinPower

Инструкцию можно прочитать в файле install_linuxAMD64.txt выполнив команду:
cat /root/Winpower_setup_LinuxAMD64/install_linuxAMD64.txt
=вывод команды=
======================
System Requirements
======================  
        128 MB (recommended minimum) 
        256 MB (recommended) 
        160 MB hard disk space (depending on features installed) 
        Red Hat Linux 6.2 or later
        Intel Pentium II 233 MHz or compatible
        
==================
Install Winpower
==================
        1.  Enter /LinuxAMD64 directory. If system is running in GUI mode, double click setup.bin to start the installation. If system is running in Text mode, execute ./setup_console.bin to start the installation. 
        2.  Read the information provided, then press ENTER to continue .
        3.  When the installation program is completed,reboot the system to set enviroment variables for Winpower(which is set in /etc/profile).
        Note: The installation should be made as "root"!
================     
Run Winpower
================
        1.  Start Agent
            Winpower Agent will auto start when Linux system start.
            You can also start agent manually by open the terminal and execute command:
            cd /opt/MonitorSoftware/
            ./agent start
            
        2.  Start Monitor
            execute command:
            cd /opt/MonitorSoftware/
            ./monitor
        3.  Get Full Access
            In "System" menu, click "Act as Administrator" menu item to start the "Administrator" dialog, enter correct password to get full access.
            The default password is set to "Administrator".It can be changed in "Modify Administrator Password" dialog.
          
        4.  Communicate with UPS
            In "System" menu, click "Auto Search UPS" menu item to auto search the UPS connected with Computer.
==============        
Stop Winpower
==============
        1.  Close Manager.
        2.  Open the Terminal, enter install directory:
            and execute command:
            ./agent stop
====================
Uninstall Winpower
====================
        1.  Open the Terminal, enter install directory:
            and execute command:
            ./Uninstall
В инструкции указаны все необходимые команды и сказано что всё выполнять необходимо из под пользователя root.

Установка программы WinPower

Перейдем в необходимую директорию и запустим скрипт установки выполнив команды:

cd /root/Winpower_setup_LinuxAMD64/LinuxAMD64
./setup_console.bin
=вывод команды с необходимыми параметрами=
!указываем SN и жмем везде Enter!
Preparing CONSOLE Mode Installation...

====================================================================
Winpower 5.5.0.0                       (created with InstallAnywhere by Zero G)
--------------------------------------------------------------------

====================================================================
Introduction
------------

InstallAnywhere will guide you through the installation of Winpower 5.5.0.0.

It is strongly recommended that you quit all programs before continuing with 
this installation.

Respond to each prompt to proceed to the next step in the installation.  If you
want to change something on a previous step, type 'back'.

You may cancel this installation at any time by typing 'quit'.

PRESS <ENTER> TO CONTINUE: 

====================================================================
Enter Serial Number
-------------------

This installation requires a serial number to continue.

Please Enter the Serial Number:: 511C1-01220-0100-478DF2A

====================================================================
Choose Install Folder
---------------------

Where would you like to install?

  Default Install Folder: /opt/MonitorSoftware

ENTER AN ABSOLUTE PATH, OR PRESS <ENTER> TO ACCEPT THE DEFAULT
      : 

====================================================================
Pre-Installation Summary
------------------------

Please Review the Following Before Continuing:

Product Name:
    Winpower 5.5.0.0

Install Folder:
    /opt/MonitorSoftware

Disk Space Information (for Installation Target): 
    Required:  200 889 229 bytes
    Available: 3 535 523 840 bytes

PRESS <ENTER> TO CONTINUE: 

====================================================================
Installing...
-------------

 [==================|==================|==================]
 [------------------|------------------|------------------|---------]

====================================================================
Installation Complete
---------------------

Congratulations. Winpower 5.5.0.0 has been successfully installed to:

/opt/MonitorSoftware

Please restart your system before running the Winpower 5.5.0.0!

PRESS <ENTER> TO EXIT THE INSTALLER:

В конце установщик сообщил что для настройки необходима графическая оболочка системы X11 которую мы установили ранее.

Запуск агента программы WinPower

Перейдём в необходимую папку и запустим агента программы WinPower выполнив команду:

cd /opt/MonitorSoftware/
./agent start
=вывод команды=
 Starting Agent: 
 Done

Автозагрузка агента при старте системы Proxmox

Создадим файл agent.sh с необходимыми параметрами.

Создадим файл в нужной папке и укажем нужные параметры:

cd /opt/MonitorSoftware/
mcedit agent.sh
=необходимые параметры=
#!/bin/bash
cd /opt/MonitorSoftware
./agent start

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

chmod +x /opt/MonitorSoftware/agent.sh

Добавим необходимый параметр в файл отвечающий за автозагрузку необходимых скриптов выполнив команду:

mcedit /etc/rc.local
=вывод команды и необходимые параметры=
#!/bin/sh -e
#
# rc.local
#
# This script is executed at the end of each multiuser runlevel.
# Make sure that the script will "exit 0" on success or any other
# value on error.
#
# In order to enable or disable this script just change the execution
# bits.
#
# By default this script does nothing.
#Автозапуск агента ИПБ
/opt/MonitorSoftware/agent.sh
exit 0

Перезагрузите систему для уверенности в правильной настройки автозагрузки агента программы WinPower.

Запуск программы WinPower

Заходим обычным способом в систему Proxmox и вводим в консоли команды:

cd /opt/MonitorSoftware/
./monitor
=вывод команды=
Starting Manager:
Done

Мы увидим приветственное окно программы WinPower использущее Java.

Настройка программы WinPower

Выполним необходимый минимум настроек программы:

  • Изменим пароль администратора (по умолчанию Administrator),
  • Настроим smtp сервис отправки сообщений на почту,
  • Настроим отключение Proxmox при остатке заряда батареи меньше 40 %.

Вывод

В результате выполненных действий нам не страшны перебои с питанием и обо всех действиях мы будем получать уведомление на e-mail.

PROXMOX установка на Debian 8

Настроим лучшую свободную систему виртуализации Proxmox VE на Raid1 в операционной системе Debian 8. В качестве гипервизора система использует KVM и LXC, что позволяет виртуализировать все популярные операционные системы. Браузерная панель управления.

Вступление

Вышла новая 5 версия Proxmox и о ней я написал новую статью PROXMOX 5 установка и настройка. Принцип моего использования системой не поменялся. В новой статье вы узнаете некоторые нюансы c которыми я столкнулся при переходе на новую версию.

Первое что я стал изучать в Linux это была система виртуализации. По множественным рекомендациям администраторы Linux не советуют использовать все виды серверных служб на одной системе в виду сложности обслуживания и крайней нестабильности. В случае аппаратного выхода из строя компьютера придется устанавливать всё практически с нуля. Пользуясь системой виртуализации все можно восстановить очень быстро.

Основными моими требованиями было:

  • Простота установки,
  • Удобное управление,
  • Установка разных систем OC (Linux, Windows и тд.),
  • Удобная система архивирования,
  • Информирование на почту об ошибках системы,
  • Подключение ИБП с отключение системы при пропадании 220 вольт,
  • Проброс портов USB в виртуальную систему.

Все виды не свободных систем управления виртуализацией или всё что связанно с Microsoft я отбросил в сторону и искал только свободный вариант. Единственная система которая устроила меня по всем параметрам это была система Proxmox.

Система Proxmox не поддерживает установку из коробки на mdadm для использования программного raid1, хотя есть система zfs. Может эта файловая система и хороша но мне она пока не нужна.

Система Proxmox базируется на OC Debian. У разработчика есть инструкция по установке системы, которую мы возьмем за основу.

Проверка аппаратной поддержки виртуализации

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

egrep '(vmx|svm)' /proc/cpuinfo
=вывод команды=
flags : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush dts acpi mmx fxsr sse sse2 ss ht tm pbe syscall nx lm constant_tsc arch_perfmon pebs bts rep_good nopl aperfmperf pni dtes64 monitor ds_cpl vmx tm2 ssse3 cx16 xtpr pdcm dca lahf_lm tpr_shadow dtherm
flags : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush dts acpi mmx fxsr sse sse2 ss ht tm pbe syscall nx lm constant_tsc arch_perfmon pebs bts rep_good nopl aperfmperf pni dtes64 monitor ds_cpl vmx tm2 ssse3 cx16 xtpr pdcm dca lahf_lm tpr_shadow dtherm
flags : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush dts acpi mmx fxsr sse sse2 ss ht tm pbe syscall nx lm constant_tsc arch_perfmon pebs bts rep_good nopl aperfmperf pni dtes64 monitor ds_cpl vmx tm2 ssse3 cx16 xtpr pdcm dca lahf_lm tpr_shadow dtherm
flags : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush dts acpi mmx fxsr sse sse2 ss ht tm pbe syscall nx lm constant_tsc arch_perfmon pebs bts rep_good nopl aperfmperf pni dtes64 monitor ds_cpl vmx tm2 ssse3 cx16 xtpr pdcm dca lahf_lm tpr_shadow dtherm

Если в выводе присутствует параметр svm (Secure Virtual Machines) — значит процессор с поддержкой аппаратной виртуализации от AMD, если vmx (Virtual Machine eXtension) — значит процессор Intel.

Если вывод пустой, то смотрите в bios на предмет включения виртуализации, в противном случае использовать Proxmox не получится.

Исходные параметры системы

  • proxmox — название машины
  • sevo44.loc — полное имя домена
  • 192.168.0.150 — ip системы с Proxmox
  • 192.168.0.106 — шлюз сети
  • 255.255.255.0 — маска сети
  • 2 жестких диска по 107,4 GB.

Установка Debian 8 на mdadm raid1

Скачиваем последнюю версию системы Debian можно на официальном сайте.

Установка до начала работы с дисками

Создание RAID1

Общая схема создания raid1 массивов состоит из нескольких шагов:

  • Создаем одинаковые разделы на дисках с типом «физический том для RAID»,
  • Объединяем два одинаковых раздела в необходимый раздел RAID1,
  • Форматируем наш RAID1 под нужный нам формат файловой системы.

Скрины сделаны на создание разделов только на одном из дисков на другом делаем по аналогии. Всё пространство диска не использовалось специально. Мы установим саму систему и позже решим как и где мы хотим хранить наши образы системы, бэкапы и другие данные. Раздел swap был специально не создан. Пропустите этот пункт. Мы создадим его позже.

В итоге у нас получилось:

  • Загрузочный раздел /boot с меткой «загрузочный» и размером 500 MB форматом ext2,
  • Корневой раздел / размером 50 GB форматом ext4.

Не указывайте раздел boot меньше 500 MB если не хотите проблем при первом обновлении системы Proxmox.

Завершение установки Debian 8

Настройка Debian 8

Установка текстового редактора mc

Установку выполним командой:

apt-get -y install mc

Настроим редактор mc по умолчанию командой:

select-editor
=вывод команды=
Select an editor. To change later, run 'select-editor'.
 1. /bin/nano <---- easiest
 2. /usr/bin/mcedit
 3. /usr/bin/vim.tiny
Choose 1-3 [1]: 2

Разрешение подключения под root в ssh

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

mcedit /etc/ssh/sshd_config
=необходимые изменения=
# Сделаем разрешение подключаться под root
PermitRootLogin yes

Полное обновление системы с перезагрузкой

Выполним команду:

apt-get -y update && apt-get -y upgrade && reboot

Мы без вопросов системы:

  • Произведёт обновление индекса пакетов до последних изменениях в репозитории,
  • Выполним обновление всех пакетов системы,
  • Перезагрузимся.

Настройка статического IP адреса

Последнее что нам надо чтобы сразу подключаться к системе по ssh это назначит системе статический ip адрес.

Определим ip адрес системы введя команду:

ip addr
=вывод команды=
1: lo: mtu 65536 qdisc noqueue state UNKNOWN group 
default 
 link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
 inet 127.0.0.1/8 scope host lo
 valid_lft forever preferred_lft forever
 inet6 ::1/128 scope host 
 valid_lft forever preferred_lft forever
2: eth0: mtu 1500 qdisc pfifo_fast state UP 
group default qlen 1000
 link/ether 08:00:27:52:85:09 brd ff:ff:ff:ff:ff:ff
 inet 192.168.0.168/24 brd 192.168.0.255 scope global eth0
 valid_lft forever preferred_lft forever
 inet6 fe80::a00:27ff:fe52:8509/64 scope link 
 valid_lft forever preferred_lft forever

Мы видим что наш адрес inet 192.168.0.168/24 brd 192.168.0.255 scope global eth0

Подключится к система через ssh введя команду в консоли другого компьютера:

ssh root@192.168.0.168
=вывод команды=
root@192.168.0.168's password: 
Last login: Wed Dec 28 00:40:34 2016 from 192.168.0.3
root@proxmox:~#

При установке мы использовали получение ip адреса по DHCP сменим его на статический.

Отредактируем файл interfaces, который отвечает за сетевые настройки в Debian. Для того, чтобы назначить постоянный статический ip адрес, его нужно привести к следующему виду:

mcedit /etc/network/interfaces
=вывод команды с необходимыми изменениями=
# This file describes the network interfaces available on your system
# and how to activate them. For more information, see interfaces(5).
source /etc/network/interfaces.d/*
# The loopback network interface
auto lo
iface lo inet loopback
# The primary network interface
allow-hotplug eth0
# Запускать автоматически при загрузке системы
auto eth0 
# Интерфейс eth0 в диапазоне IPv4 со статическим адресом
iface eth0 inet static
# IP адрес
address 192.168.0.150
# Шлюз по умолчанию
gateway 192.168.0.106
# Маска сети
netmask 255.255.255.0

Сохраним и перезагрузимся командой:

reboot

Проверим после перезагрузки ip адрес:

ip addr
=часть вывода команды=
inet 192.168.0.150/24 brd 192.168.0.255 scope global eth0

Проверка работы интернета

Проверим интернет отправив 4 пакета на ya.ru.

ping -c 4 ya.ru
=вывод команды=
PING ya.ru (93.158.134.3) 56(84) bytes of data.
64 bytes from www.yandex.ru (93.158.134.3): icmp_seq=1 ttl=51 time=14.7 ms
64 bytes from www.yandex.ru (93.158.134.3): icmp_seq=2 ttl=51 time=13.8 ms
64 bytes from www.yandex.ru (93.158.134.3): icmp_seq=3 ttl=51 time=15.1 ms
64 bytes from www.yandex.ru (93.158.134.3): icmp_seq=4 ttl=51 time=14.2 ms
--- ya.ru ping statistics ---
4 packets transmitted, 4 received, 0% packet loss, time 3010ms
rtt min/avg/max/mdev = 13.842/14.471/15.142/0.514 ms

Всё прошло без потерь.

Установка загрузчика GRUB на оба жестких диска

Без этого мы не сможем загрузится со второго диска в случае отказа первого по причине отсутствия загрузочного раздела.

Установим grub на оба жестких диска. Для этого выполняем команду:

dpkg-reconfigure grub-pc
=вывод команды=
Installing for i386-pc platform. 
Установка завершена. Ошибок нет.
Installing for i386-pc platform.
Установка завершена. Ошибок нет.
Generating grub configuration file ...
Найден образ linux: /boot/vmlinuz-3.16.0-4-amd64
Найден образ initrd: /boot/initrd.img-3.16.0-4-amd64
завершено

На все вопросы даём дефолтные значения, в конце выбираете оба жестких диска для установки загрузчика.

Информация о разделах дисков в системе

df -h
=вывод команды=
Файловая система Размер Использовано Дост Использовано% Смонтировано в
/dev/md1 46G 965M 43G 3% /
udev 10M 0 10M 0% /dev
tmpfs 201M 4,4M 196M 3% /run
tmpfs 501M 0 501M 0% /dev/shm
tmpfs 5,0M 0 5,0M 0% /run/lock
tmpfs 501M 0 501M 0% /sys/fs/cgroup
/dev/md0 461M 33M 405M 8% /boot

Всё хорошо.

Проверка работы массивов RAID1

cat /proc/mdstat
=вывод команды=
Personalities : [raid1] 
md1 : active raid1 sda2[0] sdb2[1]
 48795648 blocks super 1.2 [2/2] [UU]
 
md0 : active raid1 sda1[0] sdb1[1]
 487104 blocks super 1.2 [2/2] [UU]
 
unused devices:

Параметр “UU” говорит о том что всё в порядке.

Уже сейчас можно отключить один диск и система спокойно загрузится с другого. При подключении отключенного ранее диска raid не заработает так как для этого нужно произвести определенные манипуляции. Далее мы в статье настроим почту и в случае ошибки raid1 нам придет сообщение на необходимый e-mail.

В другой статье Вы можете узнать Как работать с raid 1 после отказа.

Создание раздела SWAP

При установке Debian мы отказались от создания swap раздела, так как по многим рекомендациям не советуют создавать raid 1 для раздела swap.

Наличие раздела swap важно и необходимо.

Проверим наличие swap раздела:

swapon -as

Если пусто, значит его нет.

Создадим файл для будущего swap раздела:

dd if=/dev/zero of=/swap bs=1024 count=4000000
=вывод команды=
4000000+0 записей получено
4000000+0 записей отправлено
скопировано 4096000000 байт (4,1 GB), 26,9641 c, 152 MB/c

Размер файла 4 GB, равен объему памяти на сервере. Выбирайте размер на свое усмотрение.

Форматируем файл в формат свопа:

mkswap /swap
=вывод команды=
Setting up swapspace version 1, size = 3999996 KiB
no label, UUID=7db57287-a7c3-4973-9f89-0be098a493ac

Подключаем файл к системе:

swapon /swap
=вывод команды=
swapon: /swap: insecure permissions 0644, 0600 suggested.

Проверяем результат работы:

swapon -as
=вывод команды=
Filename Type Size Used Priority
/swap file 3999996 0 -1

Сделаем чтобы swap раздел монтировался при загрузке. Для этого добавляем в fstab строку:

mcedit /etc/fstab
=необходимые дополнения=
# Подключим swap при загрузке
/swap swap swap defaults 0 0

В конце файла делаем переход на новую строку.

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

reboot

Проверяем:

swapon -as
=вывод команды=
Filename Type Size Used Priority
/swap file 3999996 0 -1

Все необходимые настройки произвели переходим к непосредственной установке Proxmox.

Установка Proxmox

За основу мы взяли инструкцию от разработчика исходя из неё и будем устанавливать.

Правка /etc/hosts

В нашем случае файл /etc/hosts выглядит так:

cat /etc/hosts
=вывод команды=
127.0.0.1 localhost
127.0.1.1 proxmox.sevo44.loc proxmox
# The following lines are desirable for IPv6 capable hosts
::1 localhost ip6-localhost ip6-loopback
ff02::1 ip6-allnodes
ff02::2 ip6-allrouters

Приведем его к виду:

mcedit /etc/hosts
=вывод команды c необходимыми изменениями=
127.0.0.1 localhost.localdomain localhost
192.168.0.150 proxmox.sevo44.loc proxmox pvelocalhost
# The following lines are desirable for IPv6 capable hosts
#::1 localhost ip6-localhost ip6-loopback
#ff02::1 ip6-allnodes
#ff02::2 ip6-allrouters

Добавление репозитория Proxmox

Добавим Proxmox репозиторий выполнив команду:

echo "deb http://download.proxmox.com/debian jessie pve-no-subscription" > /etc/apt/sources.list.d/pve-install-repo.list

Добавляем цифровую подпись Proxmox репозитория:

wget -O- "http://download.proxmox.com/debian/key.asc" | apt-key add -

Обновим репозитории и систему выполнив команду:

apt-get update && apt-get dist-upgrade

Перезагрузим систему:

reboot

Установка необходимых пакетов Proxmox

Установка производиться командой:

apt-get install proxmox-ve ssh postfix ksm-control-daemon open-iscsi systemd-sysv

В процессе установке необходимо будет настроить Postfix.

Выберем параметры:

  • Интернет-сайт,
  • proxmox.sevo44.loc — укажем полное название машины.

Если нам в последствии надо будет изменить настройки Postfix то выполнить это можно командой:

dpkg-reconfigure postfix

Перезагружаем систему, новое ядро Proxmox VE ​​будет автоматически выбрано в меню загрузчика GRUB.

reboot

Отправка почты на внешний e-mail адрес

Отправим тестовое письмо на внешнюю почту в котором отправим данные файла /etc/fstab:

cat /etc/fstab | mail -s "Test title" info@sevo44.ru

Видим что письмо пришло.

Настроим чтобы эти письма отправленные root пересылались на нужную нам внешнюю e-mail почту.

Открываем файл /etc/aliases для правки выполнив команду:

mcedit /etc/aliases
=необходимые изменения=
# Правим вписывая свой адрес
root: local,info@sevo44.ru

В данном виде почта будет приходить как в локальный файл так и на почту. Можете выбрать что то одно.

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

newaliases

Можно еще раз отправить тестовое письмо и убедиться что оно пришло.

Обязательно проверьте спам почты. Если в спаме нет то смотрите логи отправки почты. Всегда использую почтовый сервис yandex.ru и проблем с ними нет.

Удаление пакета ОС-Prober

apt-get remove os-prober

Удаление Debian kernel

apt-get remove linux-image-amd64 linux-image-3.16.0-4-amd64 linux-base

Проверим конфигурацию Grub командой:

update-grub

Ускоряем работу дисков ext4

Для проверки работы дисковой подсистем в Proxmox есть утилита pveperf которую мы будем использовать.

Посмотрим все смонтированые разделы в системе:

df -h
= вывод команды =
Файловая система Размер Использовано Дост Использовано% Cмонтировано в
udev 10M 0 10M 0% /dev
tmpfs 1,6G 14M 1,6G 1% /run
/dev/md1 230G 57G 162G 26% /
tmpfs 3,9G 34M 3,9G 1% /dev/shm
tmpfs 5,0M 0 5,0M 0% /run/lock
tmpfs 3,9G 0 3,9G 0% /sys/fs/cgroup
/dev/sde1 917G 651G 220G 75% /var/lib/vz/backup
/dev/md0 91M 47M 40M 54% /boot
/dev/md2 913G 758G 110G 88% /var/lib/vz/images
/dev/md3 921G 861G 14G 99% /mnt/md3
/dev/fuse 30M 20K 30M 1% /etc/pve
tmpfs 798M 4,0K 798M 1% /run/user/115
tmpfs 798M 0 798M 0% /run/user/0

Посмотрим информацию о необходимом разделе:

pveperf /var/lib/vz/images
= вывод команды =
CPU BOGOMIPS: 25535.20
REGEX/SECOND: 578497
HD SIZE: 912.93 GB (/dev/md2)
BUFFERED READS: 145.76 MB/sec
AVERAGE SEEK TIME: 22.12 ms
FSYNCS/SECOND: 65.94
DNS EXT: 60.41 ms
DNS INT: 2.62 ms (sevo44.loc)

Из вывода видно, что параметр FSYNCS маловат и надо его улучшить.

Откроем необходимый файл и сделаем изменения:

cat /etc/fstab
= вывод части команды с необходимыми изменениями =
/dev/md2 /var/lib/vz/images ext4 relatime,barrier=0 0 1

После перезагрузки системы Proxmox проверим результат:

pveperf /var/lib/vz/images
= вывод команды =
CPU BOGOMIPS: 25535.20
REGEX/SECOND: 578497
HD SIZE: 912.93 GB (/dev/md2)
BUFFERED READS: 145.76 MB/sec
AVERAGE SEEK TIME: 22.12 ms
FSYNCS/SECOND: 1328.94
DNS EXT: 60.41 ms
DNS INT: 2.62 ms (sevo44.loc)

Вот так поигравшись с настройками файловой системы ext4 мы значительно увеличили производительность дисковой системы. Варианты настройки могут быть разные и тут все зависит от ваших требований к данным на дисках.

Панель управления Proxmox

Теперь мы можем зайти по адресу https://192.168.0.150:8006 и увидеть после авторизации панель управления Proxmox.

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

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