Использовать шифрование данных залог того что ваши данные не попадут в руки кому попало. В этой статье расскажу как производить шифрование диска или раздела в ОС Linux используется модуль ядра dm-crypt LUKS.
Введение
Чтобы выполнить шифрование диска в системе Linux используется модуль ядра dm-crypt. Этот модуль позволяет создавать в каталоге /dev/mapper виртуальное блочное устройство с возможностью его шифрования. Фактически все данные лежат на зашифрованном физическом разделе. Данные на лету шифруются и записываются на диск, при чтении с виртуального устройства, выполняется обратная операция — данные расшифровываются с физического диска и передаются в открытом виде через виртуальный диск пользователю. Обычно для шифрования используется протокол шифрования AES, потому что под него оптимизированы большинство современных процессоров.
Важно заметить, что вы можете шифровать не только разделы и диски, но и обычные файлы, создав в них файловую систему и подключив как loop устройство.
Для работы с LUKS и модулем dm-crypt используется утилита Cryptsetup.
Создание шифрованного устройства
Общая схема работы с шифрованным устройством следующая:
Определяется устройство для шифрования;
Создается шифрованный раздел;
Производится форматирование раздела в необходимую файловую систему;
Монтирование раздела в систему.
Установка CRYPTSETUP
Выберите свою команду исходя из своей системы и установите необходимую утилиту:
apt install cryptsetup
dnf install cryptsetup
Синтаксис запуска команды такой:
$ cryptsetup опцииоперацияпараметры_операции
Основные операции, которые можно сделать используя утилиту:
luksFormat — создать зашифрованный раздел luks linux;
luksOpen — подключить виртуальное устройство (нужен ключ);
luksClose — закрыть виртуальное устройство luks linux;
luksAddKey — добавить ключ шифрования;
luksRemoveKey — удалить ключ шифрования;
luksUUID — показать UUID раздела;
luksDump — создать резервную копию заголовков LUKS.
cryptsetup -y -v luksFormat /dev/sdb
= вывод команды =
ПРЕДУПРЕЖДЕНИЕ: Устройство /dev/sdb уже содержит подпись раздела «dos».
WARNING!
========
Данные на /dev/sdb будут перезаписаны без возможности восстановления.
Are you sure? (Type uppercase yes): YES - Внимание! Писать только заглавными буквами!
Введите парольную фразу для /dev/sdb: ! пароль
Парольная фраза повторно: ! повтор пароля
Existing 'dos' partition signature on device /dev/sdb will be wiped.
Создан слот ключа 0.
Команда выполнена успешно.
В данном примере я использую парольную фразу так как именно такой подход мне кажется наиболее правильным. При желании можно использовать ключевой файл вместо парольной фразы.
Откроем созданный раздел с помощью модуля dm-crypt в /dev/mapper, для этого понадобится ввести пароль, с которым выполнялось создание раздела:
cryptsetup luksOpen /dev/sdb sdb_crypt
Посмотрим созданное виртуальное устройство:
ls -l /dev/mapper/sdb_crypt
= вывод команды =
lrwxrwxrwx 1 root root 7 дек 27 21:53 /dev/mapper/sdb_crypt -> ../dm-3
Посмотреть состояние устройства можно выполнив команду:
cryptsetup -v status sdb_crypt
= вывод команды =
/dev/mapper/sdb_crypt is active.
type: LUKS2
cipher: aes-xts-plain64
keysize: 512 bits
key location: keyring
device: /dev/sdb
sector size: 512
offset: 32768 sectors
size: 625109680 sectors
mode: read/write
Команда выполнена успешно.
Рекомендую сделать резервную копию заголовков LUKS это может помочь при возможных в будущем проблем.
После открытия раздела он воспринимается системой, как и все другие. Для проверки можно использовать утилиту fsck ( при условии что файловая система отмантирована ):
fsck -vy /dev/mapper/sdb_crypt
Изменение парольной фразы LUKS
Парольную фразу можно изменить или создать до восьми разных парольных фраз.
Перед началом обязательно сделайте резервную копию заголовков LUKS:
cryptsetup luksDump /dev/sdb
Команда для создания новой парольной фразы:
cryptsetup luksAddKey /dev/sdb
= вывод команды =
Введите любую существующую парольную фразу: ! вводим существующий пароль
Введите новую парольную фразу для слота ключа: ! вводим новый пароль
Парольная фраза повторно: ! повторяем новый пароль
Пользуюсь таким вариантом в работе уже давно и каких то проблем я не замечал.
Единственный минус заключается только в том что при перезагрузке системы приходится вручную подключать шифрованные разделы указывая пароль. Используя файл ключа шифрования можно настроить автоматическое монтирование шифрованного устройства, но тогда вообще пропадает смысл шифрования. Когда в системе с шифрованным устройством находится и сам ключ шифрования при правильных манипуляциях хороший специалист без проблем подключит шифрованный диск.
Решать в любом случае вам как защищать свои данные, но то что сейчас это надо делать обязательно актуально как никогда.
Расскажу как производится установка zabbix 4.2 на систему CentOS 7. Эта статья будет первая в цикле статей посвященных мониторингу Zabbix. Долго вникал в нюансы работы Zabbix и настало время поделится этими знаниями.
Введение
Устанавливать систему мониторинга будем в контейнере LXC работающем на CentOS 7. Установка Zabbix в контейнере LXC для меня самый оптимальный вариант. Перед обновлением можно сделать снимок и в случае проблем очень оперативно вернуть систему в рабочее состояние.
Более подробно о том как развернуть систему контейнеров LXC на операционной системе CentOS 7 можно из статьи LXC установка на CentOS 7. Узнать как производится работа с контейнерами можно из статьи Работа с LXC контейнерами.
Дальнейшая информация в статье будет изложена без детальных пояснений.
Подготовка системы для установки Zabbix
Отключение SELinux
Отключаем SELinux. Его использование и настройка в системе CentOS отдельный разговор.
vi /etc/sysconfig/selinux
= меняем значение =
SELINUX=disabled
Перезагрузим для применения изменений. После перезагрузки проверяем статус:
sestatus
= вывод команды =
SELinux status: disabled
Запускаем nginx и добавляем в автозагрузку выполнив команды:
systemctl start nginx
systemctl enable nginx
В нашем случае Nginx работает в контейнере LXC. Введем в консоли команду:
curl http://localhost
= вывод команды =
<!DOCTYPE html>
<html>
<head>
<title>Welcome to nginx!</title>
<style>
body {
width: 35em;
margin: 0 auto;
font-family: Tahoma, Verdana, Arial, sans-serif;
}
</style>
</head>
<body>
<h1>Welcome to nginx!</h1>
<p>If you see this page, the nginx web server is successfully installed and
working. Further configuration is required.</p>
<p>For online documentation and support please refer to
<a href="http://nginx.org/">nginx.org</a>.<br/>
Commercial support is available at
<a href="http://nginx.com/">nginx.com</a>.</p>
<p><em>Thank you for using nginx.</em></p>
</body>
</html>
Подключаем свежий репозиторий создав необходимый файл следующего содержания:
vim /etc/yum.repos.d/mariadb.repo
= необходимый код =
# MariaDB 10.3 CentOS repository list - created 2018-10-04 12:10 UTC
# http://downloads.mariadb.org/mariadb/repositories/
[mariadb]
name = MariaDB
baseurl = http://yum.mariadb.org/10.3/centos7-amd64
gpgkey=https://yum.mariadb.org/RPM-GPG-KEY-MariaDB
gpgcheck=1
Устанавливаем последнюю версию MariaDB выполнив команду:
yum install MariaDB-server MariaDB-client
Запускаем mariadb и добавляем в автозагрузку выполнив команды:
systemctl start mariadb
systemctl enable mariadb
Запускаем скрипт начальной конфигурации mysql и задаем пароль для root выполнив команду:
/usr/bin/mysql_secure_installation
Откроем конфигурационный файл сервера MariaDB и приводим его к следующему виду:
vim /etc/my.cnf.d/server.cnf
= необходимые добавления =
[mysqld]
bind-address = 0.0.0.0 # разрешает подключение со всех хостов
character_set_server=utf8
collation-server=utf8_bin
init_connect="SET NAMES utf8 collate utf8_bin"
port = 3306
socket = /var/lib/mysql/mysql.sock
innodb_file_format=barracuda
innodb_file_per_table=1
innodb_buffer_pool_size = 1G # установить примерно в 2 раза меньше объема оперативной памяти сервера
innodb_buffer_pool_instances=1
innodb_flush_log_at_trx_commit = 0
innodb_log_file_size = 512M
innodb_strict_mode = 0
innodb_log_files_in_group = 3
Заданы некоторые важные параметры по innodb, в частности указание хранить каждую таблицу в отдельном файле, задан размер и количество бинарных логов и еще несколько настроек, которые важны. В большинстве случае, достаточно будет этих настроек.
Перезапускаем MariaDB и проверяем статус работы:
systemctl restart mariadb
systemctl status mariadb.service
Установка Zabbix
Установка состоит из двух частей. Вначале надо установить сам сервер zabbix и позже настроить web лицо для работы в системе мониторинга.
Подключение репозитория Zabbix
Подключаем репозиторий версии Zabbix 4.2 выполнив необходимую команду:
Произведем установку введя в консоли следующую команду:
yum install zabbix-server-mysql zabbix-web-mysql
Создание базы данных для Zabbix сервера
Создадим базу данных, пользователя zabbix и заполним базу необходимыми данными:
mysql -uroot -p
Enter password: указываем пароль root пользователя mariadbWelcome to the MariaDB monitor. Commands end with ; or \g.Your MariaDB connection id is 8Server version: 10.3.14-MariaDB MariaDB ServerCopyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others.Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.= создание бызы zabbix с необходимыми параметрами =
MariaDB [(none)]> create database zabbix character set utf8 collate utf8_bin;Query OK, 1 row affected (0.003 sec)
= создание пользователя zabbix с необходимиыми правами =
MariaDB [(none)]> grant all privileges on zabbix.* to zabbix@localhost identified by 'password';Query OK, 0 rows affected (0.008 sec)
MariaDB [(none)]> exit
Bye= заполнение базы данных необходимыми параметрами =zcat /usr/share/doc/zabbix-server-mysql*/create.sql.gz | mysql -uzabbix -p zabbix
Enter password: пароль пользователя zabbixroot@zabbix-lxc-lemp.sevo44.loc/ #
Редактируем файл конфигурации сервера Zabbix. Прописываем данные для подключения к БД и некоторые другие параметры:
vim /etc/zabbix/zabbix_server.conf
= необходимые данные =
DBHost=localhost
DBName=zabbix
DBUser=zabbix
DBPassword=password
ListenIP=0.0.0.0
Timeout=10
Этих минимальных настроек достаточно, для работы сервера.
Параметр Timeout увеличен, так как он отвечает за время ожидания ответа от агента. Стандартного значения в 3 секунды бывает недостаточно, когда используется Zabbix proxy или скрипт который долго выполняется для получения метрики. В случае переодических отсутсвиях данных в графиках поиграйте с этим параметром.
Запускаем zabbix и добавляем в автозагрузку выполнив команды:
cat /var/log/zabbix/zabbix_server.log
= вывод команды =
2373:20190416:222404.662 Starting Zabbix Server. Zabbix 4.2.0 (revision 91746).
2373:20190416:222404.667 ****** Enabled features ******
2373:20190416:222404.667 SNMP monitoring: YES
2373:20190416:222404.667 IPMI monitoring: YES
2373:20190416:222404.668 Web monitoring: YES
2373:20190416:222404.668 VMware monitoring: YES
2373:20190416:222404.669 SMTP authentication: YES
2373:20190416:222404.669 Jabber notifications: NO
2373:20190416:222404.670 Ez Texting notifications: YES
2373:20190416:222404.671 ODBC: YES
2373:20190416:222404.671 SSH2 support: YES
2373:20190416:222404.672 IPv6 support: YES
2373:20190416:222404.672 TLS support: YES
2373:20190416:222404.673 ******************************
2373:20190416:222404.673 using configuration file: /etc/zabbix/zabbix_server.conf
2373:20190416:222404.720 current database version (mandatory/optional): 04020000/04020000
2373:20190416:222404.721 required mandatory version: 04020000
2373:20190416:222404.838 server #0 started [main process]
2374:20190416:222404.846 server #1 started [configuration syncer #1]
2375:20190416:222404.855 server #2 started [alerter #1]
2379:20190416:222404.865 server #6 started [timer #1]
2377:20190416:222404.872 server #4 started [alerter #3]
2378:20190416:222404.882 server #5 started [housekeeper #1]
2376:20190416:222404.891 server #3 started [alerter #2]
2380:20190416:222404.899 server #7 started [http poller #1]
2381:20190416:222404.907 server #8 started [discoverer #1]
2393:20190416:222404.916 server #20 started [poller #4]
2395:20190416:222404.934 server #22 started [unreachable poller #1]
2384:20190416:222404.944 server #11 started [history syncer #3]
2399:20190416:222404.954 server #26 started [trapper #4]
2387:20190416:222405.009 server #14 started [proxy poller #1]
2386:20190416:222405.018 server #13 started [escalator #1]
2388:20190416:222405.030 server #15 started [self-monitoring #1]
2389:20190416:222405.041 server #16 started [task manager #1]
2390:20190416:222405.051 server #17 started [poller #1]
2407:20190416:222405.064 server #34 started [lld manager #1]
2392:20190416:222405.077 server #19 started [poller #3]
2394:20190416:222405.089 server #21 started [poller #5]
2409:20190416:222405.119 server #36 started [lld worker #2]
2383:20190416:222405.152 server #10 started [history syncer #2]
2396:20190416:222405.160 server #23 started [trapper #1]
2385:20190416:222405.172 server #12 started [history syncer #4]
2398:20190416:222405.187 server #25 started [trapper #3]
2397:20190416:222405.198 server #24 started [trapper #2]
2400:20190416:222405.208 server #27 started [trapper #5]
2401:20190416:222405.215 server #28 started [icmp pinger #1]
2403:20190416:222405.225 server #30 started [preprocessing manager #1]
2402:20190416:222405.233 server #29 started [alert manager #1]
2391:20190416:222405.241 server #18 started [poller #2]
2408:20190416:222405.252 server #35 started [lld worker #1]
2382:20190416:222405.260 server #9 started [history syncer #1]
2406:20190416:222406.068 server #33 started [preprocessing worker #3]
2404:20190416:222406.104 server #31 started [preprocessing worker #1]
2405:20190416:222406.135 server #32 started [preprocessing worker #2]
Должен быть примерно такой вывод.
Настройка Nginx
Так как в контейнере будет работать только Zabbix мы отредактируем дефолтный файл приведя его к виду:
Проверим конфиг на ошибки и если все в порядке, перезапустим 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 =
nginx -s reload
Настройка Nginx на хосте LXC
В нашем случаем на хосте на котором работает система LXC необходимо настроить Nginx для проксирования сигналов в контейнер.
В параметрах расписано два варианта работы. Параметры для работы с SSl закоментированны:
vim /etc/nginx/conf.d/proxy-zabbix.sevo44.loc.conf
= необходимый код =
# ssl zabbix.sevo44.loc
#server {
#listen 80;
#server_name zabbix.sevo44.loc www.zabbix.sevo44.loc;
#rewrite ^ https://$server_name$request_uri? permanent;
#}
server {
listen 80;
#listen 443 ssl http2;
server_name zabbix.sevo44.loc www.zabbix.sevo44.loc;
### ssl
#ssl on;
#ssl_certificate /etc/letsencrypt/live/zabbix.sevo44.loc/fullchain.pem;
#ssl_certificate_key /etc/letsencrypt/live/zabbix.sevo44.loc/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/zabbix.sevo44.loc/;
#}
# Включение сжатия 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;
location / {
proxy_pass http://10.10.0.6:80;
proxy_set_header Host $host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Real-IP $remote_addr;
# Вставил ниже когда было ограничение на зугрузку файлов свыше 1 метра
# так же нужна строчка в файле настройки сайта
client_max_body_size 10m;
client_body_buffer_size 128k;
proxy_connect_timeout 90;
proxy_send_timeout 6000;
proxy_read_timeout 6000;
proxy_buffer_size 4k;
proxy_buffers 4 32k;
proxy_busy_buffers_size 64k;
proxy_temp_file_write_size 64k;
}
}
Проверим конфиг на ошибки и если все в порядке, перезапустим 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
В случае если вам захочется перевести работу сервера Zabbix на протокол https вам будет достаточно по статье SSL бесплатный для сайта Nginx получить бесплантый сертификат и подредактировать вышеизложенный конфиг.
Настройка Zabbix для работы с Nginx
Важный нюанс. Надо изменить права доступа на некоторые папки. Назначить владельца nginx. Этот шаг нужно будет проделывать после каждого обновления php или zabbix. Связано с тем, что по-умолчанию zabbix идет в комплекте с apache и рассчитан на работу с ним. Поэтому после установки или обновления, он делает его владельцем директории /etc/zabbix/web.
Осталось добавить домен в DNS или как к моем случае добавим строчку в файл /etc/hosts на компьютере с которого будем открыват
vim /etc/hosts
= необходимый параметр =
192.168.0.103 zabbix.sevo44.loc
Порты работы Zabbix
Заостряю ваше внимание на том с какими портами работает Zabbix это важно если в работе вы будете использовать как активный так и пасивный агент. В татье про настройку Zabbix я более подробно распишу как это делается.
В система Zabbix используется два порта:
10050 — порт по которому zabbix опрашивает клиентов (пасивный агент);
10051 — порт на котором zabbix получает данные от активных клиентов (активный агент).
На сервере Zabbix должен быть открыт порт 10051, на клиенте порт 10050.
На сервере работающем с FirewallD необходимо выполнить следующие команды:
Переходим к настройки web лица. Вводим в браузере доменое имя нашего сервера Zabbix, в моем случае это http://zabbix.sevo44.loc
Видим страницу приветствия.
На следующей странице происходит проверка параметров перед установкой. Все параметры должы иметь статус OK.
Указываем данные для работы с сервером MariaDB.
Детали Zabbix сервера можно не менять.
После вывода страници с параметами которые вы указали получите финальное сообщение об успешной устаноке web лица.
Окно авторизации Zabbix сервера.
Стандартная учетная запись для входа в web интерфейс zabbix следующая:
Admin — пользователь;
zabbix — пароль.
После авторизации вы увидите стандартный dashboard.
Установка и настройка Zabbix сервера закончена.
По умолчанию в система настроен один хост для мониторинга и это сам сервер zabbix. Проблема говорит о том что агент не доступен. При установке я специально не стал устанавливать агент, так как в следующей статье я подробно расскажу как устанавливать агентов на разные системы.
Заключение
Из статьи вы узнали как производится установка сервера Zabbix на операционную систему CentOS 7. Рассказывать про дальнейшую настройку сервера и агентов я специально не стал. Работаю с системой давно, но понять до конца как она работает и как настраивается я смог недавно. Статей про установку множество и про начальную настройку тоже, но вот понятным языком для людей которые только начинают заниматься администрированием систем я не нашел. Документация Zabbix хороша, но она написана техническим языком который могут понять далеко не все. Например, я долго разбирался с тем как настроить работу активного и пассивного клиента. Знаю точно, что если убрать небольшие сложности при начальном этапе внедрения системы мониторинга Zabbix эта система удовлетворит практически любые требования для мониторинга любых параметров в любой операционной системе.
Установим и настроим Nginx на системе Rocky Linuxи или любого дистрибутива семейства RHEL. Рассмотрим разные варианты использования сервиса. Использование Nginx для web проектов работающих на бюджетных хостингах или железе — лучший вариант.
Введение
Из этой статьи вы узнаете про основные моменты работы с Nginx на системах CentOS, RockyLinux и любого дистрибутива семейства любое семейство RHEL. Более подробно о работе с Nginx можно узнать на сайте разработчика в разделе документации. Долгое время лидирующие позиции занимал Apach, но новый продукт кардинально изменил подход к обработке команд и позволяет обслуживать высоко нагруженные сайты на бюджетном железе. Более детально узнать про автора Игоря Сысоева и ознакомится с принципами работы вы можете на просторах сети интернет. От себя лишь скажу что теперь это моя основная и любимая связка при организации веб сервера по причине быстроты и удобства работы.
Для установки самой свежей стабильной версии Nginx на СentOS или Rocky Linux (любое семейство RHEL) подключим родной репозиторий выполнив следующие действия:
= Установим необходимую зависимость =
dnf install yum-utils
= Создадим файл с репозиторием и обновим систему =
vim /etc/yum.repos.d/nginx.repo
=== Необходимый код для внесения ===
[nginx-stable]
name=nginx stable repo
baseurl=http://nginx.org/packages/centos/$releasever/$basearch/
gpgcheck=1
enabled=1
gpgkey=https://nginx.org/keys/nginx_signing.key
module_hotfixes=true
= Обновим систему =
dnf update
Установим выполнив команду:
dnf install nginx
Перед установкой убеждаемся что установка идет с репозитория nginx.
Запустим и добавим в автозагрузку:
systemctl start nginx
systemctl enable nginx
= Можно одной командой =
systemctl enable --now nginx
Для проверки выполним команду в консоли:
curl http://localhost
= вывод команды =
<!DOCTYPE html>
<html>
<head>
<title>Welcome to nginx!</title>
<style>
body {
width: 35em;
margin: 0 auto;
font-family: Tahoma, Verdana, Arial, sans-serif;
}
</style>
</head>
<body>
<h1>Welcome to nginx!</h1>
<p>If you see this page, the nginx web server is successfully installed and
working. Further configuration is required.</p>
<p>For online documentation and support please refer to
<a href="http://nginx.org/">nginx.org</a>.<br/>
Commercial support is available at
<a href="http://nginx.com/">nginx.com</a>.</p>
<p><em>Thank you for using nginx.</em></p>
</body>
</html>
Видим код страницы. NGINX работает.
Например, мне не удобно видеть такую страницу по умолчанию и я привожу её к следующему виду:
vim /usr/share/nginx/html/index.html
= необходимый код =
<!DOCTYPE html>
<html>
<head>
<title>Welcome!</title>
<style>
body {
width: 35em;
margin: 0 auto;
font-family: Tahoma, Verdana, Arial, sans-serif;
}
</style>
</head>
<body>
<h1>Welcome!</h1>
<p>If you see this page, the nginx web server is successfully installed and
working.</p>
<p><em>lemp.sevo44.loc</em></p>
</body>
</html>
Используя такую страницу я всегда понимаю на какой сервер я попадаю.
Настройка NGINX
Вся прелесть настройки сводится к тому что вы всегда можете проверить правильность своих настроек выполнив команду:
nginx -t
Варианты конфигурации для сайтов
Дальше надо определится как будем работать с настройкой сайтов.
Существует два пути:
редактирование всё в одном файле;
для каждого сайта сделать свой файл настроек.
Например, лично мне нравится для каждого сайта создавать свой конфигурационный файл. В статье будет описан именно этот способ.
Главный конфигурационный файл
Переименуем оригинальный конфигурационный фал Nginx и создадим новый внеся необходимый код:
Запросы на ресурс будут осуществятся с проксирующего сервира Nginx. О том как перевести ресурс на работу по https вы узнаете ниже.
Доступ по IP адресу
Бывают случаи когда необходимо помимо домена попадать на ресурс по ip адресу и для этого достаточно добавить один параметр в файл настройки для ресурса.
= часть кода с примером =
server {
listen 80 default_server;
server_name pma.sevo44.loc www.pma.sevo44.loc;
Иногда для безопасности необходимо закрыть ресурс на пароль. Сделаем это средствами Nginx используя механизм basic auth.
Добавим в секцию server необходимого сайта код:
= необходимый код =
### Авторизация по паролю используя basic auth
auth_basic "Restricted Content";
auth_basic_user_file /etc/nginx/.htpasswd;
Создаем файл с логином и паролем для доступа:
=== Команда которая создаст пользователя pma ===
sh -c "echo -n 'pma:' >> /etc/nginx/.htpasswd"
=== Команда для создания пароля пользователю pma ===
sh -c "openssl passwd -apr1 >> /etc/nginx/.htpasswd"
= Вывод команды с пояснениями =
Password: пароль
Verifying - Password: повтор пароля
В результате мы получим файл в котором будет строчка состоящая из имени пользователя и зашифрованного пароля:
cat /etc/nginx/.htpasswd
= вывод команды =
pma:$apr1$7xGrtwfB$fZNKV9J5fjr%fbvfMuhPvSFS0
Можно добавлять любое количество пользователей меняя только имя создаваемого пользователя.
Для смены текущего пароля пользователя достаточно выполнить команду по созданию пароля без добавления пользователя а потом зайти в файл и последнюю строчку вида $apr1$7xG6owfB$fZNKV9J5gjjj^YfMuhPvSFSв заменить пользователю которому меняем пароль.
После обновления конфигурации Nginx при попытке зайти на ресурс мы увидим простую форму где необходимо внести наши данные.
Параметры php для сайта
На одном сервере может быть разное количество сайтов которые используют одну версию php, но для каждого нужны своим определённые параметры. С решением этой задачи легко справляется Nginx. Например, я не редактирую базовый файл с настройками версии php а для каждого ресурса создаю свои персональные настройки. Кроме того, иногда нет возможно подправить базовый файл так чтобы он удовлетворял условиям всех сайтов.
Для просмотра действующих параметров php необходимо создать файл на требуемом ресурсе и добавить туда следующий код:
vim info.php
= необходимый код =
<?php
phpinfo();
?>
Теперь с учетом того что файл создали в корне сайте необходимо открыть его https://ваш домен/info.php и увидеть все реально действующие параметры для данного ресурса.
Смотрим те параметры что нам надо и добавляем их по аналогии к существующим в коде ниже.
Значения для параметров которые возможны всегда можно посмотреть в комментариях базового файла php.ini
Вот так добавив требуемый код в необходимый блок я задал свои параметры для размера загружаемых файлов и выставил необходимую локализацию:
После необходимых изменений проверяем правильность кода и в случае успеха перегружаем 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
При переходе с одной версии php на другую этот вариант очень актуален. В новой версии могут меняться некоторые параметры и их с легкостью можно применить в этом файле.
Команды управления
Обновление параметров без перезагрузки сервиса (рекомендуемый вариант):
nginx -s reload
= или =
systemctl reload nginx
Полная перезагрузка сервиса
systemctl restart nginx
Остановка и запуск соответственно:
systemctl stop nginx
systemctl start nginx
Проксирования запросов на удаленный сервер
В локальной сети может работать множество сайтов. Самый лучший способ это настроить одну точку входа и оттуда переправлять запросы на ресурсы в локальной сети. Nginx прекрасно с этим справляется используя модуль ngx_http_proxy_module. Более подробно о том как можно настраивать проксирование запросов вы можете в документации разработчика.
Мне нравится использовать эту технологию так как она позволяет:
Работа всех ресурсов по https. На проксирующем сервере мы получаем сертификаты для всех ресурсов а перенапровление запросов идет по http. Контролировать получение сертификатов SSL в одном месте для всех сайтов локальной сети очень удобно;
Смена мест размещения ресурсов. Перевозить сервер на новое место не вызывает проблем. Достаточно настроить сайт на новом месте а потом просто поменять ip адресс на проксирующем Nginx.
Проксирование папок или фалов. Для оптимизации работы ресурса можно распределять нагрузку на разные ресурсы. Например, перенести загрузку определенных фалов (фотографии) или папок на другие сервера.
Для примера, так же будем использовать проксирование запросов для phpMyAdmin.
Параметры в используемом примере следующие:
pma.sevo44.ru — домен ресурса;
10.10.0.1 — ip адрес ресурса с которого пересылается запрос. Проксирующий сервер работает на сервера в котором проксирование проходит на контейнеры LXC которые работают в своей сети 10.10.0.0/24;
10.10.0.4 — ip ресурса на который происходит проксирование сигналов.
Настройка на проксирующем Nginx
Прежде всего, обычно я создаю конфигурационный файл в котором присутствует весь код, но секции отвечающие за работу ресурса на https комментированы.
Из приведенного примера ниже вы узнаете:
Как осуществлять редирект с http на https;
Включение сжатия GZIP для ресурса;
Настройки для работы https. Узнать более подробно о том как получать сертификат SSl можно из статьи «SSL бесплатный для сайта Nginx«;
Работа ресурса по http2;
Команды переправляющие ip адрес для правильного отображения в логах;
Настройка размера файлов которые можно загружать на проксируемый ресурс;
Папка которая будет использована для получения сертификата ssl.
### ssl pma.sevo44.ru
### Перенаправление с http на https
#server {
#listen 80;
#server_name pma.sevo44.ru www.pma.sevo44.ru;
#rewrite ^ https://$server_name$request_uri? permanent;
#}
server {
### Перевод работы ресурса на https c http2
#listen 443 ssl http2;
listen 80;
server_name pma.sevo44.ru www.pma.sevo44.ru;
### Включение сжатия 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 on;
#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/letsencrypt/dhparam.pem;
#ssl_ciphers 'EECDH+AESGCM:EDH+AESGCM:AES256+EECDH:AES256+EDH';
#ssl_prefer_server_ciphers on;
#ssl_session_cache shared:SSL:10m;
### Папка используемая для получения сертификата ssl
location /.well-known/acme-challenge/ {
root /var/www/ssl/pma.sevo44.ru/;
}
location / {
### Ip адрес проксируемого ресурса
proxy_pass http://10.10.0.4:80;
### Настройки для передачи в логи проксируемых ресурсов реальных ip
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
### Код для указания размера максимальной зугрузки файлов 10 M
### так же нужна строчка в файле настройки сайта
client_max_body_size 10m;
client_body_buffer_size 128k;
proxy_connect_timeout 90;
proxy_send_timeout 6000;
proxy_read_timeout 6000;
proxy_buffer_size 4k;
proxy_buffers 4 32k;
proxy_busy_buffers_size 64k;
proxy_temp_file_write_size 64k;
}
}
Настройка на проксируемом ресурсе
Исходя из настроек на проксируещем сервере конфурационный файл проксируемого ресурса имеет следующий вид:
Каждый ресурс индивидуален. В статье приведены только самые основы и для того чтобы настроить работу ресурса максимально оптимально для работы вам придется используя документацию разработчика. Особое внимание следует уделить директивам кэширования proxy_cache так как они очень сильно могут влиять на скорость работы ресурса.
Расскажу про базовую настройку контейнера и о том как осуществляется работа с LXC контейнерами версии 3.0. Работа с LXC контейнером имеет некоторые нюансы, но в основном проблем с настройкой и обслуживанием нет.
Введение
В этой статье вы узнаете как произвести базовую настройку контейнера LXC c операционной системой CentOS 7. Расскажу про основные команды управления контейнерами, так же узнаете о способах резервного копирования и клонирования контейнера.
Базовая настройка контейнера LXC
Ранее я рассказывал как производится Создание и настройка LXC контейнера. Работа с LXC начинается с того что необходимо произвести базовую настройку контейнера. В контейнере находится система CentOS 7 и работать с ней надо как с обычной системой, но с небольшими нюансами. Более подробно о настройке системы можно почитать в статье CentOS 7 установка и настройка.
Обновим систему:
yum update
Для автоматической проверки обновлений установим необходимую утилиту:
yum install yum-cron
Действия на хосте LXC
Так как все контейнеры, в моем случае, работают в своей сети то для доступа к контейнерам извне необходимо делать проброс портов.
На хосте с установленной системой LXC выполним команду которая сделает проброс порта с изменением для сервера SSH в контейнере:
firewall-cmd --permanent --zone=external --add-forward-port=port=25552:proto=tcp:toport=22:toaddr=10.10.0.2
= вывод команды =
success
date
= вывод команды =
Сб окт 13 02:59:46 MSK 2018
Смена имени контейнера
Смена имени производится командой:
hostnamectl старое НОВОЕ
Не забываем сменить в файле конфигурации контейнера lxc.
При желании можно поменять и название контейнера для этого надо остановить контейнер, поменять название папки с контейнером и имена в файле конфигурации контейнера.
Настройка почты
Для проверки работы почты установим пакет который позволяет отправлять письма с консоли:
yum install mailx
Установим, запустим и добавим в автозагрузку сервис для работы с почтой Рostfix:
LXC-контейнеры совместимы с файловыми системами ZFS, Btrfs и томами LVM. При размещении контейнеров на хранилищах такого типа, будут использоваться их встроенные средства для создания моментальных снимков.
Перед созданием снимка (snapshot) контейнера его необходимо остановить!
Создать снимок:
lxc-snapshot php7-lxc
=== Для создания снимка с комментарием ===
= создаем файл с комментарием =
echo "base setup sevo44" > snap-comment
= создаем снимок с комментарием =
lxc-snapshot php7-lxc -c snap-comment
Посмотреть имеющиеся снимки с выводом комментариев если они есть:
lxc-snapshot php7-lxc -L -С
= вывод команды =
snap0 (/var/sevo44/lxcsnaps/php7-lxc) 2019:02:26 20:52:17
snap1 (/var/sevo44/lxcsnaps/php7-lxc) 2019:02:26 21:02:44
base setup sevo44
Откатится к снимку snap0 контейнера php7-lxc можно выполнив команду:
lxc-snapshot php7-lxc -r snap0
Удалить снимок:
lxc-snapshot php7-lxc -d snap0
Создать новый контейнер из снимка:
lxc-snapshot php7-lxc -r snap0 php7-2-lxc
Клонирование контейнеров LXC
Перед клонированием контейнера его необходимо остановить!
Клонирование контейнера:
lxc-copy php7-lxc -N php7-2-lxc
Перенос контейнера LXC на другой сервер
Прелесть использования контейнеров, так же заключается в том, что их можно переносить на другой сервер на котором стоит аналогичная версия LXC.
Если контейнер переносится один в один (название, пути и тд.), то он с большой вероятностью запустится и всё там будет работать.
В случае изменений параметра придется проверять все сервисы в контейнере и настраивать в случае необходимости. Например, при изменении имени контейнера база данных MariaDB не будет стартовать.
Перед переносом контейнера его необходимо остановить!
Перейдем в домашнюю папку и создадим архив который будем переносить на примере для контейнера php7-lxc:
cd
tar --numeric-owner -czvf php7-lxc.tar.gz /var/sevo44/lxc/php7-lxc
Где параметры tar означают:
c — создание архива tar,
z — сжать архив, используя алгоритм gzip,
v — выводить подробную информацию процесса,
f — указывает имя файла архива,
—numeric-owner — какие изначально при архивации ID были, такими они и будет после распаковки.
После переноса распакуем архив в необходимую папку:
tar -xzvf php7-lxc.tar.gz -C /var/sevo44/
Где параметры tar означают:
x — создание архива tar,
-C — указывает место для распаковки архива.
В указанной папке вы найдете полный путь до контейнера как на сервере откуда переносили контейнер.
Bash скрипт для переноса контейнера LXC
Для быстроты и удобства лучше использовать скрипт который будет выполнять следующие действия:
Останавливать переносимый контейнер,
Создавать архив контейнера,
Запускать контейнер после архивирования,
Передавать архив контейнера на удаленный сервер,
Удалять архив контейнера после передачи на удаленный сервер,
Распаковывать архив на удаленном сервере,
Удалять архив контейнера на удаленном сервере после распаковки.
Для подключение к удаленному серверу без ввода пароля пользователя необходимо произвести соответствующую настройку о которой рассказано в статье RSA или авторизация SSH по ключу.
Создадим папку для размещения скрипта и создадим скрипт:
mkdir /root/bin
vim /root/bin/tar-lxc_php7-lxc.sh
= необходимый код с пояснениями =
#!/bin/bash
# Переносимый контейнер
container_name="php7-lxc"
# Параметры подключения к удаленому серверу
connect_string="root@192.168.0.101"
# Остановка контейнера перед архивацией
lxc_status=$(lxc-info $container_name|grep "STOPPED")
if [ -z "$lxc_status" ];
then
lxc-stop "$container_name"
run_again="yes"
fi
# Создание архива контейнера
tar --numeric-owner -czvf /tmp/$container_name.tar.gz /var/sevo44/lxc/$container_name
# Запуск контейнера после архивирования
if [ -n "$run_again" ];
then
lxc-start "$container_name"
fi
# Копирование архива контейнера на удаленный сервер
scp /tmp/$container_name.tar.gz $connect_string:/tmp/
# Удаление архива после отправки на удаленный сервер
rm -f /tmp/$container_name.tar.gz
# Создадим необходимую папку если она отсутствует
ssh $connect_string mkdir -p /var/sevo44/tmp
# Распаковка архива на удаленном сервере !!! ВНИМАНИЕ !!! указываем полное имя архива
ssh $connect_string tar -xvf /tmp/php7-lxc.tar.gz -C /var/sevo44/tmp/
# Удаление архива после распаковки на удаленном сервере !!! ВНИМАНИЕ !!! указывается полное имя архива
ssh $connect_string rm -f /tmp/php7-lxc.tar.gz
Делаем скрипт исполнительным для владельца файла:
chmod u+x /root/bin/tar-lxc_php7-lxc.sh
Запускаем скрипт с параметром отправки информации о завершении переноса контейнера:
В результате на почту придет сообщение с темой «Контейнер php7-lxc перенесён!» а в теле письма вы увидите перечень всех файлов что были архивированы.
Удаление контейнера LXC
lxc-destroy php7-lxc
Вывод
Описаны далеко не все возможности контейнеров LXC, но этого вполне достаточно чтобы с успехом использовать эту замечательную систему в работе. Лично для меня, работа с LXC контейнерами стала будничной.
Использование системы LXC даёт возможность на одном сервере запускать разные изолирование операционные системы. Успешно использую эту технологию для разворачивания на одном VDS сервере LEMP конфигураций с разными версиями программ PHP и MariaDB.
Введение
Работая с серверами VDS для меня прежде всего важна стабильность и удобство их обслуживания.
Лично для меня существует несколько принципиальных моментов при работе с серверами:
Резервное копирование. Для спокойного обслуживания систем всегда необходимо создавать их резервные копии, но к сожалению большинство компаний предоставляющих услуги не предоставляют таких возможностей по умолчанию. Можно делать резервирование разными способами, но это не всегда удобно и требует хороших знаний для быстрого восстановления работоспособности системы из бэкапа;
Использование сервера для конкретной задачи или ресурса. Ни секрет что чем меньше всего установлено на сервере тем проще его обслуживать;
Разные версии программного обеспечения на одном сервере. Бывает так что на одном сервере необходимо использовать PHP 7 и PHP 5. Простыми способами одновременно заставить сервер работать с двумя версиями сложно.
Разработчики системы Calculate Linux познакомили меня с технологией LXC благодаря чему я сильно упростил себе жизнь при обслуживании серверов.
В результате использования LXC я получаю сервер с минимальным набором программного обеспечения благодаря чему обновления проходят легко и не вызывают никаких проблем. В контейнерах создаю всё что мне надо в любых количествах и вариантах. Перед настройкой и обслуживанием контейнера создаю его резерную копию.
Система позволяет создавать контейнеры в которых размещается почти полнофункциональная система с использованием ядра хоста на котором расположена система.
Существует версия LXD которая может использовать в контейнере своё ядно, но это уже отдельный разговор тем более для запуска на системе CentOS. Знаю точно что разработчики систем LXC и LXD спонсирует компания занимающаяся разработкой дистрибутива Ubuntu и поэтому все свои технологии и новшества они внедряют в первую очередь на Ubuntu.
Более подробно об технологии вы можете узнать посетив сайт разработчика.
Контейнеры будут находиться внутри своей виртуальной сети — 10.10.0.0/24. Для настройки маршрутизации будем использовать FirewallD.
Установим без вопросов пакет bridge-utils необходимый для настройки сети контейнеров:
yum -y install bridge-utils
При работающем NetworkManager добавлять бридж надо именно через nmtui, так как только тогда он будет там виден и не возникнет проблем при работе с FirewallD. При настройке сетевых интерфейсов руками NetworkManager необходимо отключить.
Отключение NetworkManager, удаление из автозагрузки и перезагрузка сетевых настроек выполняется следующими командами:
firewall-cmd --get-active-zones
= вывод информации =
public
interfaces: eth0 virbr0
Оба сетевых интерфейса находятся в зоне public
Нам необходимо перенести интерфейс eth0 во внешнюю сеть в зону external а virbr0 во внутреннюю в зону internal.
Перед переносом в другие зоны убедитесь что там присутствует сервис SSH. В случае использования подключения по нестандартному порту не забудьте его добавить в зону куда переносите. В противном случае потеряете доступ к серверу по SSH.
У меня подключение по нестандартному порту следовательно надо выполнить следующие действия:
Главная задача выполнена и контейнеры получат доступ в интернет.
Если хотите использовать для маршрутизации iptables вы можете посмотреть статью и найти там интерферирующие настройки.
Установка LXC 3.0 на CentOS 7
В базовой версии присутствует старая версия 1.0. Можно использовать и её, но уж больно много удобств внесли разработчики в новые версии. Если бы изменения касались только команд управления и не затрагивали конфигурационных настроек файлов я подумал бы еще о том чтобы дождаться новой версии в базовой версии CentOS 7.
Устанавливать свежую версию будем с ресурса Fedora CORP. Вся интерферирующая нас информация находится тут.
Создадим файл репозитория:
vim /etc/yum.repos.d/lxc3.0.repo
=добавим необходимый код =
[thm-lxc3.0]
name=Copr repo for lxc3.0 owned by thm
baseurl=https://copr-be.cloud.fedoraproject.org/results/thm/lxc3.0/epel-7-$basearch/
type=rpm-md
skip_if_unavailable=True
gpgcheck=1
gpgkey=https://copr-be.cloud.fedoraproject.org/results/thm/lxc3.0/pubkey.gpg
repo_gpgcheck=0
enabled=1
enabled_metadata=1
Для установки необходим репозиторий Epel. Установим командой:
yum install epel-release
Установим свежую версию 3.0 со всеми необходимыми пакетами:
Проверим готовность LXC к работе выполнив необходимую команду:
lxc-checkconfig
= вывод команды =
Kernel configuration not found at /proc/config.gz; searching...
Kernel configuration found at /boot/config-3.10.0-957.1.3.el7.x86_64
--- Namespaces ---
Namespaces: enabled
Utsname namespace: enabled
Ipc namespace: enabled
Pid namespace: enabled
User namespace: enabled
newuidmap is not installednewgidmap is not installed
Network namespace: enabled
Multiple /dev/pts instances: enabled
--- Control groups ---
Cgroups: enabled
Cgroup v1 mount points:
/sys/fs/cgroup/systemd
/sys/fs/cgroup/freezer
/sys/fs/cgroup/pids
/sys/fs/cgroup/perf_event
/sys/fs/cgroup/hugetlb
/sys/fs/cgroup/cpu,cpuacct
/sys/fs/cgroup/net_cls,net_prio
/sys/fs/cgroup/devices
/sys/fs/cgroup/cpuset
/sys/fs/cgroup/blkio
/sys/fs/cgroup/memory
Cgroup v2 mount points:
Cgroup v1 clone_children flag: enabled
Cgroup device: enabled
Cgroup sched: enabled
Cgroup cpu account: enabled
Cgroup memory controller: enabled
Cgroup cpuset: enabled
--- Misc ---
Veth pair device: enabled, not loaded
Macvlan: enabled, not loaded
Vlan: enabled, not loaded
Bridges: enabled, loaded
Advanced netfilter: enabled, not loaded
CONFIG_NF_NAT_IPV4: enabled, loaded
CONFIG_NF_NAT_IPV6: enabled, loaded
CONFIG_IP_NF_TARGET_MASQUERADE: enabled, loaded
CONFIG_IP6_NF_TARGET_MASQUERADE: enabled, loaded
CONFIG_NETFILTER_XT_TARGET_CHECKSUM: enabled, not loaded
CONFIG_NETFILTER_XT_MATCH_COMMENT: enabled, not loaded
FUSE (for use with lxcfs): enabled, not loaded
--- Checkpoint/Restore ---
checkpoint restore: enabled
CONFIG_FHANDLE: enabled
CONFIG_EVENTFD: enabled
CONFIG_EPOLL: enabled
CONFIG_UNIX_DIAG: enabled
CONFIG_INET_DIAG: enabled
CONFIG_PACKET_DIAG: enabled
CONFIG_NETLINK_DIAG: enabled
File capabilities:
Note : Before booting a new kernel, you can check its configuration
usage : CONFIG=/path/to/config /usr/bin/lxc-checkconfig
Кроме двух строк (отмечены в выводе оранжевым) параметр у строк должен быть enabled.
LXC обычно использует следующие пути:
/var/lib/lxc/ — дефолтное место для контейнеров,
/var/lib/lxcsnap/ — дефолтное место снимков,
/var/cache/lxc/ — дефолтное место для кэша шаблонов,
$HOME/.local/share/lxc/ — дефолтное место для непривилегированных контейнеров,
$HOME/.local/share/lxcsnap/ — дефолтное место для непривилегированных снимков,
$HOME/.cache/lxc/ — дефолтное место для непривилегированного кэша шаблонов.
Шаблоны операционных систем хранятся в /usr/share/lxc/templates/.
Мне удобней держать контейнеры в своей папке. Создадим необходимую папку:
mkdir -p /var/sevo44/lxc
Создадим файл конфигурации и поместим туда нужный код:
vim /etc/lxc/lxc.conf
= необходимый код =
lxc.lxcpath = /var/sevo44/lxc
Если вы переопределяете место для контейнеров, то каталог снимков snap будет находится в вашей новой папке.
Запускаем LXC и добавляем в автозагрузку:
systemctl start lxc
systemctl enable lxc
= вывод команды =
Created symlink from /etc/systemd/system/multi-user.target.wants/lxc.service to /usr/lib/systemd/system/lxc.service.
Проверим статус службы:
systemctl status lxc
● lxc.service - LXC Container Initialization and Autoboot Code
Loaded: loaded (/usr/lib/systemd/system/lxc.service; enabled; vendor preset: disabled)
Active: active (exited) since Вт 2019-01-29 15:48:00 MSK; 25s ago
Docs: man:lxc-autostart
man:lxc
Main PID: 14338 (code=exited, status=0/SUCCESS)
янв 29 15:48:00 vds-micro2.sevo44.ru systemd[1]: Starting LXC Container Initialization and Autoboot Code...
янв 29 15:48:00 vds-micro2.sevo44.ru systemd[1]: Started LXC Container Initialization and Autoboot Code.
Служба работает. Переходим к настройке контейнеров.
Создание и настройка LXC контейнера
Предварительная настройка
При создании контейнера можно использовать необходимые нам параметры. Дефолтная конфигурация контейнера при установке находится в /etc/lxc/default.conf.
В контейнеры можно пробрасывать папку находящуюся на хосте и мы воспользуемся этой возможностью.
Создадим папку куда будем складывать резервные копии с контейнеров:
mkdir -p /var/sevo44/backup
В последствии для удобства в ней будем создавать папки соответствующие названию создаваемого контейнера.
Откроем файл дефолтной конфигурации для создаваемых контейнеров и внесём необходимые параметры:
vim /etc/lxc/default.conf
= необходимые параметры =
# sevo44 меняем значение 111 на необходимые
# lxc.uts.name = название контейнера.lemp.sevo44.loc
lxc.autodev = 1
lxc.net.0.type = veth
lxc.net.0.link = virbr0
lxc.net.0.flags = up
lxc.net.0.hwaddr = 00:16:3e:xx:xx:xx
lxc.net.0.veth.pair = 111-lxc
lxc.net.0.name = eth0
lxc.net.0.ipv4.address = 10.10.0.111/24
lxc.net.0.ipv4.gateway = 10.10.0.1
lxc.start.auto = 1
#lxc.start.delay = 5
lxc.mount.entry = /var/sevo44/backup/111 mnt none rw,bind 0.0
Позже при конечной настройке конфигурационного файла я расскажу подробней об использованных параметрах.
После создания контейнера надо будет зайти в файл настройки контейнера и поменять значения 111 на свои.
Один раз настроив этот файл нам не надо будет каждый раз глобально редактировать файл настройки контейнера.
Создание контейнера LXC
Создавать будем контейнер с именем php7-lxc в котором развернем работу LEMP сервера с неоходимой версией php.
Создадим сразу папку для бэкапов:
mkdir /var/sevo44/backup/php7
Устанавливать будем скачивая необходимую версию дистрибутива.
Выполним необходимую команду для установки контейнера:
lxc-create php7-lxc -t download
= вывод команды с пояснениями =
Setting up the GPG keyring
Downloading the image index
---
DIST RELEASE ARCH VARIANT BUILD
---
= в выводе скрыты все остальные варианты операционных систем =
centos 7 amd64 default 20190129_07:09
centos 7 arm64 default 20190129_07:10
centos 7 armhf default 20190129_07:11
centos 7 i386 default 20190129_07:09
centos 7 ppc64el default 20190129_07:10
---
Distribution:
centos
Release:
7
Architecture:
amd64
Downloading the image index
Downloading the rootfs
Downloading the metadata
The image cache is now ready
Unpacking the rootfs
---
You just created a Centos 7 x86_64 (20190129_07:09) container.
Настройка контейнера LXC перед первым запуском
Заходим в файл настройки контейнера и вносим необходимые правки:
vim /var/sevo44/lxc/php7-lxc/config
= вывод команды с необходимыми правками =
# Template sed to create this container: /usr/share/lxc/templates/lxc-download
# Parameters passed to the template:
# For additional config options, please look at lxc.container.conf(5)
# Uncomment the following line to support nesting containers:
#lxc.include = /usr/share/lxc/config/nesting.conf
# (Be aware this has security implications)
# sevo44 меняем значение 111 на необходимые
# lxc.uts.name = название контейнера.lemp.sevo44.loc
# Distribution configuration
lxc.include = /usr/share/lxc/config/common.conf
lxc.arch = x86_64
# Container specific configuration
lxc.autodev = 1
lxc.start.auto = 1
#lxc.start.delay = 5
lxc.mount.entry = /var/sevo44/backup/php7 mnt none rw,bind 0.0
lxc.rootfs.path = dir:/var/sevo44/lxc/php7-lxc/rootfs
lxc.uts.name = php7-lxc.lemp.sevo44.loc
# Network configuration
lxc.net.0.type = veth
lxc.net.0.link = virbr0
lxc.net.0.flags = up
lxc.net.0.hwaddr = 00:16:3e:3b:18:15
lxc.net.0.veth.pair = php7-lxc
lxc.net.0.name = eth0
lxc.net.0.ipv4.address = 10.10.0.2/24
lxc.net.0.ipv4.gateway = 10.10.0.1
Значение строк на которые стоит обратить внимание:
lxc.net.0.ipv4.address = 10.10.0.2/24 — ip который будет присвоен контейнеру,
lxc.start.auto = 1 — автозагрузка контейнера при перезагрузке системы,
lxc.mount.entry = /var/sevo44/backup/php7 mnt none rw,bind 0.0 — говорит о том что папка /var/sevo44/backup/php7 будет примантированна в папку контейнера mnt,
lxc.uts.name = php7-lxc.lemp.sevo44.loc — название контейнера.
Для доступа в интернет в контейнере необходимо добавить dns серверы в /etc/resolv.conf. Добавим dns от Yandex и Google:
vim /var/sevo44/lxc/php7-lxc/rootfs/etc/resolv.conf
= необходимый код =
nameserver 77.88.8.8
nameserver 8.8.4.4
Конфигурацию сетевого интерфейса в контейнере приводим к следующему виду:
vim /var/sevo44/lxc/php7-lxc/rootfs/etc/sysconfig/network-scripts/ifcfg-eth0
= необходимые параметры =
DEVICE=eth0
BOOTPROTO=none
ONBOOT=yes
HOSTNAME=php7-lxc.lemp.sevo44.loc
NM_CONTROLLED=no
TYPE=Ethernet
Управление контейнером LXC
Запуск контейнера php7-lxc осуществляется командой:
Выход из консоли контейнера производиться следующей командой:
exit
Вывод
В данной статье я привел практический пример использования системы c минимальными возможностями функционала. Информации об этой технологии у меня еще много, но об этом я расскажу в своих следующих статьях:
Установим систему виртуализации Proxmox 5 версии на Raid1 в операционной системе Debian 9. В качестве гипервизора система использует KVM и LXC. Возможность виртуализировать все популярные операционные системы. Удобная и понятная панель управления.
Введение
Использовать систему в работе удобно и за все время использования она меня не подводила. Начинал использование с 4 версии, но вышла 5 версия с очень удобными и функциональными изменениями. Сразу после выхода новой версии любого программного продукта я не спешу обновляться и всегда жду в районе 3 месяцев, так я избавляю себя от ошибок которые всегда есть при выходе любой новой версии. На сайте разработчика есть инструкции как производить обновление на новую версию. Вариант установки как с готового образа iso так и ручная установки на Debian.
Никогда не устанавливайте и не загружайте систему разными сервисными службами, на которой установлен Proxmox, если не хотите иметь проблем при обновлении! Отдавайте под раздел boot минимум 500 мегабайт если не хотите получать ошибку о нехватке места при обновлении ядра!
В моем случае я как раз нарушил оба этих правила и обновить систему не удалось.
Сильно установка и подход к варианту использования мной в новой версии не отличается от предыдущей. Перейдите по ссылке вы найдете там все нужную информацию.
В этой статье я расскажу об моих нюансах при настройке, более расширено поведаю про вариант моей настройки и за что именно мне так нравится работать с этой системой.
Изучив инструкцию разработчика и мою предыдущую статью у вас придет понимание о том как необходимо правильно устанавливать систему виртуализации.
Подключение старых Raid 1 масивов
В моем случае в старой системе было 2 диска на которых было 2 массива RAID1. После подключения дисков в Proxmox 5 выведем информацию о массивах:
cat /proc/mdstat
= вывод команды =
Personalities : [raid1] [linear] [multipath] [raid0] [raid6] [raid5] [raid4] [raid10]
md126 : active raid1 sdc1[0] sdd1[1] 972668928 blocks super 1.2 [2/2] [UU] bitmap: 0/8 pages [0KB], 65536KB chunkmd127 : active (auto-read-only) raid1 sdc2[0] sdd2[1] 980582464 blocks super 1.2 [2/2] [UU] bitmap: 0/8 pages [0KB], 65536KB chunk
md1 : active raid1 sdb2[1] sda2[0]
244066304 blocks super 1.2 [2/2] [UU]
bitmap: 1/2 pages [4KB], 65536KB chunk
md0 : active raid1 sdb1[1] sda1[0]
975296 blocks super 1.2 [2/2] [UU]
unused devices: <none>
Видим два массива md126 и md127. Такую нумерацию дала система по умолчанию. Меня это не совсем устраивает и я переименую их в md2 и md3 соотвественно. Переименование осуществляем стандартным способом. Останавливаем и удаляем массив:
cat /etc/mdadm/mdadm.conf
= вывод команды =
# mdadm.conf
#
# Please refer to mdadm.conf(5) for information about this file.
#
# by default (built-in), scan all partitions (/proc/partitions) and all
# containers for MD superblocks. alternatively, specify devices to scan, using
# wildcards if desired.
#DEVICE partitions containers
# automatically tag new arrays as belonging to the local system
HOMEHOST <system>
# instruct the monitoring daemon where to send mail alerts
MAILADDR root
# definitions of existing MD arrays
ARRAY /dev/md/0 metadata=1.2 UUID=d2f35a7c:c01935c3:4518c36a:fa9bab1c name=proxmox:0
ARRAY /dev/md/1 metadata=1.2 UUID=30b2043b:d51bfbca:a663c213:07fccdbe name=proxmox:1
ARRAY /dev/md/2 metadata=1.2 UUID=50b54af3:041683d2:376764c3:a9a3b1ec name=proxmox:2
Все хорошо. Мы изменили название массива, но после перезагрузки вы удивитесь что названия не изменились и это особенность системы Proxmox.
При добавлении ранее собранных массивов RAID в систему Proxmox 5 необходимо обновить ядро системы! Если это не сделать то после перезагрузке названия изменятся на те что были до изменения!
Обновим ядро выполнив необходимую команду:
update-initramfs -u
Все другие массивы делаем аналогичным способом.
Настройка сетевых интерфейсов
Настройка сетевых интерфейсов это отдельная тема и сильно вникать в детали я не буду. Расскажу как использую я и что считаю самым удобным и оптимальным при использовании. В случае использования одного сетевого интерфейса все просто. Создаете Bridge и все виртуальные машины будут в одной локальной сети. При использовании двух сетевых интерфейсов варианты реализации увеличиваются. В моем случае сетевой шлюз расположен на виртуальной машине и весь сетевой трафик идет через него. Для такого варианта реализации на обоих сетевых интерфейсах создаем Bridge. Вот так выглядят мои сетевые настройки в панели управления Proxmox 5:
На всякий случай, для понимания, приведу пример как это выглядит в файле настроек сетевых интерфейсов:
cat /etc/network/interfaces
= вывод команды =
auto lo
iface lo inet loopback
source /etc/network/interfaces.d/*
iface enp5s0f0 inet manual
iface enp5s0f1 inet manual
auto vmbr0
iface vmbr0 inet static
address 192.168.0.100
netmask 255.255.255.0
gateway 192.168.0.106
bridge_ports enp5s0f0
bridge_stp off
bridge_fd 0
auto vmbr1
iface vmbr1 inet static
address 192.168.1.100
netmask 255.255.255.0
bridge_ports enp5s0f1
bridge_stp off
bridge_fd 0
Распишу что к чему в этой настройке:
enp5s0f1 — физическая сетевая карта в которую вставлен провод от внешней сети с которой получаю интернет от роутера Asus,
vmbr1 — Bridge сетевой карты enp5s0f1 которому назначен сетевой адрес 192.168.1.100 и другие необходимые параметры,
enp5s0f0 — физическая сетевая карта которая работает с внутренней локальной сетью,
vmbr0 — Bridge сетевой карты enp5s0f0 которому назначен сетевой адрес 192.168.0.100 и другие необходимые параметры.
Обращаю внимание что в на одной из виртуальных машин настроен шлюз и только в таком варианте возможна работа всех виртуальных машин и реальных компьютеров в данном варианте настройки сети.
При настройке виртуальной машины в качестве шлюза надо добавить два сетевых устройства и назначить каждой свой Bridge и выполнить необходимые настройки для шлюза. Будут вопросы внизу есть комментарии на которые я всегда отвечаю.
Проброс портов в локальную сеть с интернета
Немного расскажу о пробросе необходимых портов на нужную машину в локальной сети из интернета при моем варианте организации сетевых настроек. Проброс складывается из двух действий:
Пробрасываем порт с роутера Asus на машину с установленным шлюзом,
На самом шлюзе пробрасываем порт до нужной машины.
Останавливаться на настройке самого шлюза не буду. Скорей всего расскажу об этом в своих следующих статьях.
Прелести работы с Proxmox 5
Коротко пробегусь по основным моментам в работе с Proxmox 5 дабы вы смогли оценить всю прелесть использования этой системы.
Подключение новых хранилищ
По умолчанию после установке в системе находится всего одно хранилище. При желании вы можете подключить и другие хранилища разными популярными способами. Выбор вариантов удовлетворит почти любые требования. Для каждого хранилища помимо указывания названия, места и способа расположения есть два параметра:
Содержимое — выбор какие именно типы файлов будут хранится в этом хранилище, что сильно упрощает варианты выбора при дальнейшей настройке,
Макс. резерв. копий — в случае использования хранилища для резервных копий выставляете количество копий.
В Proxmox достаточно добавить хранилище NFS и указать необходимые параметры.
После указания ip адреса в случае правильной работы сервера NFS путь покажется в выборе.
Укажите необходимое количество резервных копий!
Загрузка образов и шаблонов
Перед тем как приступить к установке виртуальной машины или контейнера LXC необходимо их туда загрузить.
Образы ISO вы можете грузить любых операционных систем! Контейнеры LXC лучше использовать из предложенных вариантов. Только стандартные шаблоны LXC будут стабильно работать в системе.
Выбираем хранилище, переходим в «Содержимое» в случае с загрузкой iso выбираем «Загрузить». Для контейнеров выбираем «Шаблоны». Вот так выглядит вариант загрузки ISO образа:
После загрузки нажимаем «Создать VM» или «Создать СT»
Создание виртуальной машины и LXC
Рассматривать разницу между виртуальной машиной и контейнером LXC в данной статье я не буду. У каждого варианта есть как свои плюсы так и минусы. Просто имейте ввиду что это возможно а что вам подходит больше вы поймете когда изучите данный вопрос.
Не буду рассказывать про установку LXC опишу установку виртуальной машины так как такой вариант максимально часто используется. Установка производится в несколько этапов. На первом этапе необходимо указать ID машины и название. На практике для удобства я назначаю id машины такой же какой в последствии будет ip адрес машины. При таком варианте мне всегда просто понять как подключится к машине по ssh. В имени я всегда указываю какую роль выполняет машина и какая операционная система.
На следующем шаге нам необходимо выбрать iso образ требуемой операционной системы.
Выбор вариантов установки операционных систем радует.
К выбору варианта жесткого диска надо отнестись серьезно и советую перед выбором ознакомится с вариантами вида работы виртуального диска его размера и формата!
Для систем Linux я обычно использую вариант как показан ниже.
CPU мы выбираем на свое усмотрение и потребности, но что самое приятное как в выборе CPU так и памяти в следствии, это что всегда можно изменить исходя из загрузки и указать оптимальные параметры.
Память можно указать как жестко таки и задать диапазон в зависимости от специфики виртуальной машины. Использую оба варианта и проблем не возникает.
Сетевые параметры тоже не вызывают больших вопросов и выбираются в зависимости от того как вы настроили свой гипервизор на базе Proxmox 5.
На финальной стадии смотрим все параметры что выбрали и если всё устраиваем жмем «Завершить» и машина создастся в очень короткий срок.
Вот такими четкими и понятными шагами мы создали виртуальную машину и что меня всегда радует — все параметры можно изменить. Сложность может возникать только в работе с жесткими дисками, но это уже совсем другая пляска.
Консоль работы с виртуальными машинами
Первое что нам потребуется при работе с виртуальными машинами это монитор для работы с машиной. Грубо говоря консоль это монитор нашей виртуальной машины который мы можем использовать двух типов. Два типа варианта консоли для работы с виртуальными машинами или CLX:
В окне самой панели управления, но это не всегда удобно так как зависит от разрешения экрана
Вывод в отдельном окне по нажатию кнопки «Консоль» сверху справа и с последующей возможности развернуть на весь экран.
Работать в консоли довольно просто и понятно.
Нюанс при работе в консоли состоит только в том что могут быть непонимания с переключением раскладки. Просто имейте ввиду что после смены раскладки в самой консоли у вас не будет смены лишь потому что надо на компьютере с которого работайте тоже переключить раскладку. К этому нюансу вы быстро привыкнете.
В последствии, как правило, на системах Windows вы настроите «Удаленный рабочий стол» а для работы с системами LInux вы будете использовать ssh и работать через консоль.
Проброс USB устройств в виртуальную машину
Эта пожалуй самая главная вкуснятина в новой версии. В предыдущей статье я изложил как произвести USB проброс в Proxmox в старой версии (а в последствии обновил статью и добавил возможности в 5 версии). Перейдите по указанной ссылке и увидите как разработчики идут на встречу удобству использования своей системы.
Резервное копирование виртуальных машин в системе Proxmox 5
Никогда нельзя быть на 100% уверенным в правильности выполняемых действий и спасти от краха системы может только правильный подход при создании резервных копий. В системе Proxmox ребята решили вопрос с бэкапами идеально. Существует два способа резервного копирования.
Ручное создание бэкапа
Выбираем нужную машину, переходим в «Резервирование», и нажимаем «Резервировать сейчас» настраиваем параметры что нам надо и получаем резервную копию в очень короткий период. Окно можно закрывать и позже открыть для просмотра результата.
Не забываем про политику количества резервных копий для хранилища. Если настроено автоматическое копирование необходимо удалить одну из копий чтобы произвести ручное создание резервной копии. Мне больше нравится сохранять в другое место. Куда сохранять ручную копию решать вам.
Автоматическое создание бэкапа
Тут все еще приятней. Переходим в «Датацентр» — «Резервирование» и добавляем задания для резервирования. Все что надо для параметров есть. Время, период и на какую почту оповещать и тд. и тп.
Восстановление из резервной копии
Перед запуском восстановления необходимо остановить виртуальную машину!
Переходим в раздел восстановления выбираем нужную копию и жмем «Восстановление».
Вот так удобно и просто работать с резервным копированием.
Варианты загрузки виртуальных машин
Присутствует возможность автоматически загружать виртуальную машину после перезагрузки системы Proxmox. Порой бывает необходимо чтобы какая то машина стартовала первой а следом все остальные. Даже такую нужную опцию разработчики предусмотрели. В закладке «Опции» виртуальной машины есть значения:
Запуск при загрузке — выбираем ДА или НЕТ,
Start/Shutdown order — параметры запуска и остановки машины. По умолчанию стоит параметр order=any.
Вот так выглядит окно с настройками Start/Shutdown order:
Выбираем какая по очереди стартует машина, задержка в секундах перед запуском следующих и параметр принудительного выключения если машина при перезагрузки системы не остановится корректно.
Мониторинг виртуальных машин
На закладке «Сводка» у виртуальной машины вы увидите все основные параметры работы виртуальной машины. Можно при желании заполнить блок «Заметки».
Информация SMART о состоянии HDD
Перейдя в раздел «Disks» вы увидите все ваши диски и можете посмотреть состояние SMART.
Мало того если выйдет из строя Raid1 вы получите сообщение на почту. Вот такое пришло мне сообщение на почту когда на диске стали проявляться плохие сектора:
«This message was generated by the smartd daemon running on: host name: proxmox DNS domain: sevo44.loc The following warning/error was logged by the smartd daemon: Device: /dev/sdf [SAT], 1 Currently unreadable (pending) sectors Device info: WDC WD10EARS-00Y5B1, S/N:WD-WMAV51109954, WWN:5-0014ee-0ac9680cc, FW:80.00A80, 1.00 TB For details see host’s SYSLOG. You can also use the smartctl utility for further investigation. The original message about this issue was sent at Sat Oct 14 10:21:50 2017 MSK Another message will be sent in 24 hours if the problem persists.»
И все это прямо из коробки без настройки системы мониторинга.
Мониторинг параметров системы
На странице «Датацентр» — «Сводка» вы ознакомитесь со всеми основными параметрами работы системы виртуализаци. Наглядно и красиво.
Права доступа в систему
Права доступа можно предоставлять пользователям по совершенно разным параметрам.
Firewall в системе Proxmox 5
По умолчанию система Firewall на «Датацентр» отключена, но при желании можете настроить на свой вкус и цвет. На самом узле система включена.
Тема настройки защиты отдельная тема и относится к ней надо очень осторожно чтобы из за ошибочных действий не закрыть доступ.
Логирование Proxmox
Все необходимые логи вы сможете посмотреть в панели управления.
Вывод
Один из важных моментов заключается в том что старайтесь управлять системой с панели управления так как попытка настроить параметры в консоли может вызвать проблемы в работе с системой!
Вы еще не захотели использовать систему виртуализации Proxmox? Попробуйте и вы не пожалеете. Мною используются далеко не все возможности и возможно для себя вы найдёте то, что давно хотели использовать в работе с виртуальными системами без проблем в настройках. Свобода использования, активное развитие, удобное использование и обслуживание системы однозначно ставит систему Proxmox для меня на первое место. Возможно в последующем я освою как делать репликацию между двумя отдельными системами Proxmox, но в работе это пока не требуется так как в малых и средних организациях вопрос об использовании двух серверов не стоит. Меня уже радует когда на приобретение одного хорошего сервера выделяют необходимый денежный ресурс.
Обслуживание компьютеров, ремонт, лечение вирусов, модернизация. Системы на ОС Linux. Создание и продвижение Интернет проектов. Бесплатные консультации. Офисные АТС. Видеонаблюдение.