Архив метки: Software

Установка облачного хранилища Nextcloud

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




Для синхронизации файлов между рабочим столом и вашим собственным сервером, Nextcloud предоставляет приложения для рабочих столов Windows, Linux и Mac, а также мобильное приложение для Android и iOS.




Что потребуется для установки?




Мы будем устанавливать Nextcloud на сервер Ubuntu 20.04. Необходимым условием являются внешний  ip-адрес и открытые порты 80 и 443.




1.  Установка web-сервера Nginx




Первым делом подключимся к нашему серверу и установим веб-сервер Nginx




sudo apt update
sudo apt install nginx -y




После завершения установки запустим службу Nginx и включим ее старт при загрузке системы с помощью systemctl.




systemctl start nginx
systemctl enable nginx




Проверим, что все запустилось




systemctl status nginx







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




Установим пакеты PHP и PHP-FPM, используя команду ниже:




sudo apt install php-fpm php-curl php-cli php-mysql php-gd php-common php-xml php-json php-intl php-pear php-imagick php-dev php-common php-mbstring php-zip php-soap php-bz2 -y




После завершения установки нужно немного отредактировать файлы php.ini для php-fpm и php-cli. Данные изменения необходимо произвести в обоих файлах.




cd /etc/php/7.4/
sudo nano fpm/php.ini
sudo nano cli/php.ini




Раскоментируйте строку date.timezone и измените значение на свой часовой пояс.




date.timezone = Europe/Moscow




Раскоментируйте строку ‘cgi.fix_pathinfo’ и измените значение на ‘0’.




cgi.fix_pathinfo=0




Сохраняем изменения и выходим.




Теперь отредактируем файл www.conf




sudo nano fpm/pool.d/www.conf




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




env [HOSTNAME] = $HOSTNAME
env [PATH] = /usr/local/bin:/usr/bin:/bin
env [TMP] = /tmp
env [TMPDIR] = /tmp
env [TEMP] = /tmp




Сохраняем файл и выходим.




Следующим шагом нужно перезапустить службу PHP7.4-FPM  и включить ее автозагрузку.




systemctl restart php7.4-fpm
systemctl enable php7.4-fpm




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




ss -xa | grep php
systemctl status php7.4-fpm







Вы увидите, что php-fpm запущен и работает под файлом sock ‘/run/php/php7.4-fpm.sock’.




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




Следующий шаг – установка базы данных. Установите последнюю версию сервера MariaDB, используя команду:




sudo apt install mariadb-server -y




После завершения установки запустим службу MariaDB и включим ее запуск при каждом старте системы.




systemctl start mariadb
systemctl enable mariadb




Проверяем:




systemctl status mariadb







Следующий шаг – настройка безопасности  SQL-сервера. У вас спросят о некоторых настройках сервера MariaDB. После ответа на вопрос Set root password? введите новый пароль root для SQL-сервера MariaDB




mysql_secure_installation




Enter current password for root (enter for none): Press Enter
Set root password? [Y/n] Y
Remove anonymous users? [Y/n] Y
Disallow root login remotely? [Y/n] Y
Remove test database and access to it? [Y/n] Y
Reload privilege tables now? [Y/n] Y




Теперь создадим новую базу данных для установки nextcloud. Назовем базу данных «nextcloud_db» с пользователем «nextclouduser» и паролем «PaSsW0rD@».




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




mysql -u root -p




Введите пароль root SQL-сервера MariaDB.




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




create database nextcloud_db;
create user nextclouduser@localhost identified by 'PaSsW0rD@';
grant all privileges on nextcloud_db.* to nextclouduser@localhost identified by 'PaSsW0rD@';
flush privileges;
exit;




Установка и настройка MariaDB для Nextcloud завершена.




4. Генерация SSL-сертификата Letsencrypt




Установите инструмент letsencrypt, используя команду apt ниже:




sudo apt install certbot -y




После завершения установки остановите службу nginx.




systemctl stop nginx




Сгенерируем SSL-сертификаты для доменного имени ‘cloud.admin812.ru’, используя командную строку cerbot.




certbot certonly --standalone -d cloud.admin812.ru




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




Следующим шагом будет вывод на экран оглашения об обслуживании. Нажимаем “А” (Agree) и после этого запускается процесс генерации сертификата. По окончании появится надпись об успешном завершении процесса и можно приступать непосредственно к установке Nextcloud.




5. Скачиваем Nextcloud




Перед загрузкой исходного кода nextcloud убедитесь, что в системе установлен пакет unzip. Если у вас его нет пакета, установите его:




sudo apt install wget unzip zip -y




Теперь перейдем в каталог /var/www и скачаем последнюю версию Nextcloud:




cd /var/www/
wget -q https://download.nextcloud.com/server/releases/latest.zip




Распакуем архив и изменим владельца каталога nextcloud на пользователя ‘www-data’:




unzip -qq latest.zip
sudo chown -R www-data:www-data /var/www/nextcloud




6. Настраиваем виртуальный хост Nginx для Nextcloud




В каталоге /etc/nginx/sites-available создадим новый файл виртуального хоста nextcloud.




cd /etc/nginx/sites-available/
sudo nano nextcloud




Вставим следующую конфигурацию виртуального хоста nextcloud.




upstream php-handler {
#server 127.0.0.1:9000;
server unix:/var/run/php/php7.4-fpm.sock;
}
server {
listen 80;
listen [::]:80;
server_name cloud.admin812.ru;
# enforce https
return 301 https://$server_name:443$request_uri;
}
#
server {
listen 443 ssl http2;
listen [::]:443 ssl http2;
server_name cloud.admin812.ru;
#
# Use Mozilla's guidelines for SSL/TLS settings
# https://mozilla.github.io/server-side-tls/ssl-config-generator/
# NOTE: some settings below might be redundant
ssl_certificate /etc/letsencrypt/live/cloud.admin812.ru/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/cloud.admin812.ru/privkey.pem;
#
# Add headers to serve security related headers
# Before enabling Strict-Transport-Security headers please read into this
# topic first.
#add_header Strict-Transport-Security "max-age=15768000; includeSubDomains; preload;" always;
#
# WARNING: Only add the preload option once you read about
# the consequences in https://hstspreload.org/. This option
# will add the domain to a hardcoded list that is shipped
# in all major browsers and getting removed from this list
# could take several months.
add_header Referrer-Policy "no-referrer" always;
add_header X-Content-Type-Options "nosniff" always;
add_header X-Download-Options "noopen" always;
add_header X-Frame-Options "SAMEORIGIN" always;
add_header X-Permitted-Cross-Domain-Policies "none" always;
add_header X-Robots-Tag "none" always;
add_header X-XSS-Protection "1; mode=block" always;
#
# Remove X-Powered-By, which is an information leak
fastcgi_hide_header X-Powered-By;
#
# Path to the root of your installation
root /var/www/nextcloud;
#
location = /robots.txt {
allow all;
log_not_found off;
access_log off;
}
#
# The following 2 rules are only needed for the user_webfinger app.
# Uncomment it if you're planning to use this app.
#rewrite ^/.well-known/host-meta /public.php?service=host-meta last;
#rewrite ^/.well-known/host-meta.json /public.php?service=host-meta-json last;
#
# The following rule is only needed for the Social app.
# Uncomment it if you're planning to use this app.
#rewrite ^/.well-known/webfinger /public.php?service=webfinger last;
#
location = /.well-known/carddav {
return 301 $scheme://$host:$server_port/remote.php/dav;
}
location = /.well-known/caldav {
return 301 $scheme://$host:$server_port/remote.php/dav;
}
#
# set max upload size
client_max_body_size 512M;
fastcgi_buffers 64 4K;
#
# Enable gzip but do not remove ETag headers
gzip on;
gzip_vary on;
gzip_comp_level 4;
gzip_min_length 256;
gzip_proxied expired no-cache no-store private no_last_modified no_etag auth;
gzip_types application/atom+xml application/javascript application/json application/ld+json application/manifest+json application/rss+xml application/vnd.geo+json application/vnd.ms-fontobject application/x-font-ttf application/x-web-app-manifest+json application/xhtml+xml application/xml font/opentype image/bmp image/svg+xml image/x-icon text/cache-manifest text/css text/plain text/vcard text/vnd.rim.location.xloc text/vtt text/x-component text/x-cross-domain-policy;
#
# Uncomment if your server is build with the ngx_pagespeed module
# This module is currently not supported.
#pagespeed off;
#
location / {
rewrite ^ /index.php;
}
#
location ~ ^/(?:build|tests|config|lib|3rdparty|templates|data)/ {
deny all;
}
location ~ ^/(?:.|autotest|occ|issue|indie|db_|console) {
deny all;
}
#
location ~ ^/(?:index|remote|public|cron|core/ajax/update|status|ocs/v[12]|updater/.+|oc[ms]-provider/.+).php(?:$|/) {
fastcgi_split_path_info ^(.+?.php)(/.*|)$;
set $path_info $fastcgi_path_info;
try_files $fastcgi_script_name =404;
include fastcgi_params;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_param PATH_INFO $path_info;
fastcgi_param HTTPS on;
# Avoid sending the security headers twice
fastcgi_param modHeadersAvailable true;
# Enable pretty urls
fastcgi_param front_controller_active true;
fastcgi_pass php-handler;
fastcgi_intercept_errors on;
fastcgi_request_buffering off;
}
#
location ~ ^/(?:updater|oc[ms]-provider)(?:$|/) {
try_files $uri/ =404;
index index.php;
}
#
# Adding the cache control header for js, css and map files
# Make sure it is BELOW the PHP block
location ~ .(?:css|js|woff2?|svg|gif|map)$ {
try_files $uri /index.php$request_uri;
add_header Cache-Control "public, max-age=15778463";
# Add headers to serve security related headers (It is intended to
# have those duplicated to the ones above)
# Before enabling Strict-Transport-Security headers please read into
# this topic first.
#add_header Strict-Transport-Security "max-age=15768000; includeSubDomains; preload;" always;
#
# WARNING: Only add the preload option once you read about
# the consequences in https://hstspreload.org/. This option
# will add the domain to a hardcoded list that is shipped
# in all major browsers and getting removed from this list
# could take several months.
add_header Referrer-Policy "no-referrer" always;
add_header X-Content-Type-Options "nosniff" always;
add_header X-Download-Options "noopen" always;
add_header X-Frame-Options "SAMEORIGIN" always;
add_header X-Permitted-Cross-Domain-Policies "none" always;
add_header X-Robots-Tag "none" always;
add_header X-XSS-Protection "1; mode=block" always;
# Optional: Don't log access to assets
access_log off;
}
location ~ .(?:png|html|ttf|ico|jpg|jpeg|bcmap)$ {
try_files $uri /index.php$request_uri;
# Optional: Don't log access to other assets
access_log off;
}
}




Замените выделенное красным на свое доменное имя.




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




ln -s /etc/nginx/sites-available/nextcloud /etc/nginx/sites-enabled/
nginx -t




Если ошибок нет, перезапустите сервис PHP7.4-FPM и nginx.




systemctl restart nginx
systemctl restart php7.4-fpm




Конфигурация виртуального хоста Nginx для nextcloud создана.




7. Подключение к Nextcloud




Откройте веб-браузер и введите URL-адрес nextcloud. Вы будете автоматически перенаправлены на соединение https.




Нам нужно создать пользователя-администратора для Nextcloud и ввести пароль.




Также нужно настроить соединение с базой данных. Для этого введите название базы данных, имя пользователя и пароль которые мы создали на шаге 3, а затем нажмите кнопку «Finish».




И после завершения установки вы получите панель Nextcloud, как показано ниже.







Источник: https://admin812.ru/ustanovka-oblachnogo-hranilishha-nextcloud.html



2021-03-17T21:20:05
Software

Как включить аутентификацию на сервере Jitsi

В предыдущей заметке мы настраивали сервер Jitsi. По умолчанию любой, кто знает URL вашего сервера, может подключиться и начать сеанс видеоконференцсвязи.
Настроим Jitsi таким образом, чтобы права на создание чат-комнаты были только у конкретного авторизованного пользователя. Затем вы сможете поделиться этой ссылкой с кем угодно и все остальные участники смогут присоединиться анонимно. Это лучший способ запуска Jitsi. Вы знаете, что на вашем сервере не будут выполняться несанкционированные сеансы видеоконференций, но вы все равно можете приглашать кого угодно, и ваши приглашенные не должны иметь учетную запись на сервере Jitsi.
Аутентификация выполняется через компоненту Prosody. Включим ее на нашем сервере – в нашем примере это  jitsi.admin812.ru.
Для этого нужно отредактировать файл /etc/prosody/conf.avail/[ВАШ-ДОМЕН].cfg.lua




sudo nano -w /etc/prosody/conf.avail/jitsi.admin812.ru.cfg.lua




Найдите раздел «VirtualHost» и строку




authentication = "anonymous"




Заменим ее на




authentication = "internal_plain"




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




VirtualHost "guest.jitsi.admin812.ru"
    authentication = "anonymous"
    c2s_require_encryption = false




VirtualHost, который мы только что создали – guest.jitsi.admin812.ru – используется только для Jitsi внутри – нет необходимости создавать отдельную запись DNS A для этого полного доменного имени.




Далее нам нужно настроить наш вновь созданный VirtualHost / анонимный домен в нашем файле config.js:




sudo nano -w /etc/jitsi/meet/jitsi.admin812.ru-config.js




Прямо в верхней части файла в разделе  var config = { …    вы должны увидеть строку, которая начинается с «anonymousdomain». Раскомментируйте эту строку и добавьте свое полное доменное имя:




anonymousdomain: 'guest.jitsi.admin812.ru',







Далее нам нужно указать службе Jicofo разрешать запросы только от нашего аутентифицированного домена.




sudo nano -w /etc/jitsi/jicofo/sip-communicator.properties




Добавьте новую строку в конец этого файла: org.jitsi.jicofo.auth.URL = XMPP: jitsi.admin812.ru







Теперь давайте перезапустим службы Jitsi:




sudo systemctl restart prosody
sudo systemctl restart jicofo
sudo systemctl restart jitsi-videobridge2




Осталось добавить пользователя, который может создавать комнаты видеоконференций. Итак, чтобы создать пользователя ‘vasya’ с паролем ‘PassW0rd’, вы должны выполнить:




sudo prosodyctl register vasya jitsi.admin812.ru PassW0rd




Теперь если вы войдете на свой сервер Jitsi и начнете новое собрание, вам сообщат, что конференция ожидает организатора. Нажмите на кнопку “I am the host” и после этого введите введите имя пользователя и пароль, которые вы создали с помощью команды prosodyctl.




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




Источник: https://admin812.ru/kak-vklyuchit-autentifikacziyu-na-servere-jitsi.html



2021-03-17T21:14:10
Software

Установка сервера видеоконференций Jitsi

В связи с известными обстоятельствами многим понадобилось живое общение посредством камеры. Один из вариантов – установка сервера видеоконференций Jitsi.  Jitsi – это набор проектов с открытым исходным кодом, который позволяет легко создавать и развертывать безопасные решения для видеоконференций.




Вот основные составные части Jitsi:




  • Jitsi Meet – безопасная, простая и масштабируемая платформа видеоконференции, которую можно использовать в качестве автономного приложения
  • Jitsi Videobridge – механизм медиасервера (также известный как Selective Forwarding Unit (SFU)), который поддерживает все многосторонние видеоконференции Jitsi
  • Jigasi – сервис шлюза, который соединяет SIP-телефонию с конференцией Jitsi Videobridge
  • Jibri – вещатель и рекордер, используемые для сохранения записей видеозвонков и потоковой передачи на YouTube Live
  • Jidesha – расширение для Chrome и Firefox для расшаривания экрана




Установка достаточно простая, требуется установленный сервер Ubuntu/Debian с внешним ip-адресом.




Сначала установите ключ репозитория Jitsi на вашу систему:




wget -qO - https://download.jitsi.org/jitsi-key.gpg.key | sudo apt-key add -




Создайте файл sources.list.d с хранилищем




sudo sh -c "echo 'deb https://download.jitsi.org stable/' > /etc/apt/sources.list.d/jitsi-stable.list"




Обновим список пакетов.




sudo apt-get -y update




Установка полной версии Jitsi




sudo apt-get -y install jitsi-meet




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




Для работы сервера  Jitsi необходимо открыть следующие порты: tcp 443, tcp 4443, udp 10000.




Установка сертификата Let’s Encrypt




Если все заработало, то следующий шаг – установка сертификата. В противном случае не смогут подключатся пользователи Android и iOS. Есть уже готовый скрипт: /usr/share/jitsi-meet/scripts/install-letsencrypt-cert.sh




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




Что делать если сервер Jitsi  находится за NAT ?




Если сервер находится за NAT, необходимо внести изменения в файл /etc/jitsi/videobridge/sip-communicator.properties:




org.ice4j.ice.harvest.NAT_HARVESTER_LOCAL_ADDRESS=<Local.IP.Address>
org.ice4j.ice.harvest.NAT_HARVESTER_PUBLIC_ADDRESS=<Public.IP.Address>




Соответственно вместо Local.IP.Address – указываем адрес сервера в локальной сети, а вместо Public.IP.Address  прописываем адрес внешний.




Далее, пробрасываем порты на маршрутизаторе. Предположим, что наш сервер Jitsi имеет адрес 192.168.100.5




iptables -A FORWARD -p tcp -d 192.168.100.5 --dport 443 -j ACCEPT
iptables -t nat -A PREROUTING -d xxx.xxx.xxx.xxx -p tcp -m tcp --dport 443 -j DNAT --to-destination 192.168.100.5:443

iptables -A FORWARD -p tcp -d 192.168.100.8 --dport 4443 -j ACCEPT
iptables -t nat -A PREROUTING -d xxx.xxx.xxx.xxx -p tcp -m tcp --dport 4443 -j DNAT --to-destination 192.168.100.5:4443

iptables -A FORWARD -p udp -d 192.168.100.5 --dport 10000 -j ACCEPT
iptables -t nat -A PREROUTING -d xxx.xxx.xxx.xxx -p udp -m udp --dport 10000 -j DNAT --to-destination 192.168.100.5:10000




Для того чтобы отработал скрипт получения сертификата Let’s Encrypt нужно также пробросить порт 80.




iptables -A FORWARD -p tcp -d 192.168.100.5 --dport 80 -j ACCEPT
iptables -t nat -A PREROUTING -d xxx.xxx.xxx.xxx -p tcp -m tcp --dport 80 -j DNAT --to-destination 192.168.100.5:80




Вот и все!




Источник: https://admin812.ru/ustanovka-servera-videokonferenczij-jitsi.html



2021-03-17T21:12:14
Software

Как подключить хранилище Nextcloud в Windows в качестве сетевого диска

В командной строке пишем:




net use Z: https://cloud.admin812.ru/remote.php/dav/files/clouduser/ /persistent:YES /user:youruser yourpassword




Выделенное красным меняем на свои данные.




Если команда не выполняется и выдает ошибку: “Системная ошибка 67. Не найдено сетевое имя.”, проверьте состояние службы Web-клиент. Некоторые обновления Windows самостоятельно меняют тип запуска службы на “Вручную”.  Установите ” Автоматически”.






2021-03-17T21:09:23
Software

Установка Docker Portainer

В последнее время Docker набирает всё больше и больше популярности благодаря возможности быстро развертывать сложные приложения, состоящие из большого количества сервисов. Portainer — это система управления docker контейнерами в Linux. Она позволяет управлять как локальными контейнерами, так и удалёнными с помощью Docker API.




С помощью Portainer вы сможете отслеживать состояние контейнеров, запускать, останавливать и удалять их, развертывать новые приложения, а также многое другое. Сегодня мы поговорим как выполняется установка Docker Portainer на ваш компьютер, а также как пользоваться программой




КАК УСТАНОВИТЬ DOCKER PORTAINER




Для выполнения этой статьи вам понадобится уже установленный в вашей системе Docker. Я не буду подробно рассказывать как установить docker и docker-compose. Для этого воспользуйтесь этой статьей для Ubuntu или этой для CentOS.




После того, как Docker будет установлен, можно развернуть контейнер с Portainer. Было бы странно, если бы программа поставлялась в каком-либо другом виде. Создайте хранилище данных для Portainer:




docker volume create portainer_data




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




docker run -d -p 9000:9000 --name=portainer --restart=always -v /var/run/docker.sock:/var/run/docker.sock -v portainer_data:/data portainer/portainer







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




docker ps







НАСТРОЙКА PORTAINER




1. ВХОД




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







Затем выберите метод подключения к Docker. Для начала можно подключиться к локальному сервису Docker. Для этого выберите Local:







2. СПИСОК УЗЛОВ И КОНТЕЙНЕРОВ




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







Сначала вам надо выбрать узел, на котором вы будете управлять контейнерами, в данном случае, это local. Здесь вы можете уже управлять вашими контейнерами. Например, в разделе Containers можно посмотреть все доступные контейнеры:







А в разделе Stacks — все доступные приложения:







3. РАЗВОРАЧИВАНИЕ ПРИЛОЖЕНИЯ




В разделе App Templates вы можете развернуть новое приложение на основе одного из существующих шаблонов. Например, давайте развернем WordPress. Для этого найдите его в списке:







Затем шаблон надо настроить. В данном случае, надо указать пароль для базы данных и имя приложения:







После этого нажмите кнопку Deploy the stack и новое приложение появится в списке раздела Stasks. Как видите, теперь программа сообщает, что у неё есть полный контроль над этим приложением, потому что она его создала:




4. УПРАВЛЕНИЕ ПРИЛОЖЕНИЕМ




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







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







А открытые порты находятся в самом конце характеристик контейнера в разделе Published ports:







Если вы кликните по ссылке с надписью 32768:80 для контейнера WordPress, то попадёте на сайт WordPress:







КАК ОБНОВИТЬ PORTAINER




Чтобы обновить Portainer надо удалить текущий образ и запустить его снова. Это не вызовет никаких проблем, так как при создании предыдущего образа мы использовали внешнее хранилище для хранения данных. Остановите образ и удалите его:




docker stop portainer

docker rm portainer




Скачайте новую версию:




docker pull portainer/portainer




Затем осталось снова установить Portainer:




docker run -d -p 9000:9000 --name=portainer --restart=always -v /var/run/docker.sock:/var/run/docker.sock -v portainer_data:/data portainer/portainer




ВЫВОДЫ




Как видите установка Portainer очень простая, если у вас есть уже установленный docker, а далее программа только помогает пользоваться контейнерами. Вы можете подключить к ней и удалённые узлы, однако для этого надо, чтобы у них был публичный IP адрес, потому что в локальной сети взаимодействовать с ними вы не сможете. А вы используете Portainer или пользуетесь другим интерфейсом для управления Docker? Напишите в комментариях!




Источник: https://losst.ru/ustanovka-docker-portainer



2021-03-10T23:16:02
Software

Мониторинг Mysql в Zabbix

С появлением стандартных готовых шаблонов для различных приложений жизнь с заббиксом стала значительно проще. Сегодня я покажу это на примере мониторинга Mysql сервера в Zabbix 5 с использованием стандартного шаблона. Все стало не просто, а очень просто. Практически ничего делать не надо, разработчики все сделали за нас.




Введение




Напоминаю одну важную деталь. Если вы ставите Zabbix Server не с нуля, а обновляете старую версию, у вас не обновляются стандартные шаблоны. А они последнее время сильно изменились, плюс появились новые. Посмотреть их можно на github — https://github.com/zabbix/zabbix/tree/master/templates.




В данном случае я буду использовать шаблон из директории /db/mysql_agent/. Он написан для старого агента. Напомню, что начиная с версии 4.4 доступна новая версия агента, написанная на Go — zabbix_agent2. Для него появился новый функционал и новые шаблоны. Я пока буду использовать старого агента, так как с новым еще не разбирался.




Если у вас еще нет своего сервера для мониторинга, то рекомендую материалы на эту тему. Для тех, кто предпочитает систему CentOS:




  1. Установка CentOS 8.
  2. Настройка CentOS 8.
  3. Установка и настройка zabbix сервера.




То же самое на Debian 10, если предпочитаете его:




  1. Установка Debian 10.
  2. Базовая настройка Debian.
  3. Установка и настройка zabbix на debian.




Ставьте себе сервер и погнали настраивать.




Подготовка mysql к мониторингу




Для примера настроим мониторинг Mysql на самом сервере мониторинга Zabbix. Так как это часто узкое место производительности системы, мониторинг базы zabbix лишним не будет. Первым делом добавим новые параметры в агенте. Для этого создаем конфигурационный файл /etc/zabbix/zabbix_agentd.d/template_db_mysql.conf следующего содержания.




UserParameter=mysql.ping[*], mysqladmin -h"$1" -P"$2" ping
UserParameter=mysql.get_status_variables[*], mysql -h"$1" -P"$2" -sNX -e "show global status"
UserParameter=mysql.version[*], mysqladmin -s -h"$1" -P"$2" version
UserParameter=mysql.db.discovery[*], mysql -h"$1" -P"$2" -sN -e "show databases"
UserParameter=mysql.dbsize[*], mysql -h"$1" -P"$2" -sN -e "SELECT COALESCE(SUM(DATA_LENGTH + INDEX_LENGTH),0) FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_SCHEMA='$3'"
UserParameter=mysql.replication.discovery[*], mysql -h"$1" -P"$2" -sNX -e "show slave status"
UserParameter=mysql.slave_status[*], mysql -h"$1" -P"$2" -sNX -e "show slave status"




После этого сразу перезапустим zabbix-agent.




systemctl restart zabbix-agent




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




mysql -uroot -p
> CREATE USER 'zbx_monitor'@'%' IDENTIFIED BY 'TTRy1bRRgLIB';
> GRANT USAGE,REPLICATION CLIENT,PROCESS,SHOW DATABASES,SHOW VIEW ON *.* TO 'zbx_monitor'@'%';
> quit




Теперь смотрим, где у нас домашняя директория пользователя zabbix.




cat /etc/passwd | grep zabbix
zabbix:x:990:986:Zabbix Monitoring System:/var/lib/zabbix:/sbin/nologin




У меня ее не было, так что создаем.




mkdir /var/lib/zabbix




Кладем в эту директорию конфиг .my.cnf с реквизитами доступа к серверу mysql.




[client]
user='zbx_monitor'
password='TTRy1bRRgLIB'




Назначаем пользователя zabbix владельцем своей домашней директории и файла в ней. Файлу ограничиваем доступ.




chown -R zabbix. /var/lib/zabbix
chmod 400 /var/lib/zabbix/.my.cnf




Подготовка к мониторингу mysql сервера завершена. Идем теперь в web интерфейс системы мониторинга Zabbix.




Настройка мониторинга Mysql сервера




В веб интерфейсе идем в раздел Настройка -> Шаблоны и импортируем шаблон template_db_mysql_agent.xml.







После этого прикрепляем добавленный шаблон к хосту, где мы только что настроили zabbix-agent и добавили пользователя mysql. Для того, чтобы сразу увидеть все метрики, принудительно выполним сбор данных. Для начала вручную запустим правила автообнаружения, так как у них интервал проверок 1 час. Не хочется столько времени ждать данных. Идем в хост, далее во вкладку Правила обнаружения. Выбираем 2 правила от шаблона mysql и запускаем их.







Ждем несколько секунд и переходим на вкладку Элементы данных. Фильтруем элементы по названию группы MySQL и Zabbix raw items.







Теперь переходим к списку элементов данных. Выделяем все элементы, которые относятся к Mysql и имеют тип Zabbix Agent и запускаем их принудительную проверку. Основной элемент тут — MySQL: Get status variables. Почти все итемы получаются в результате предобработки данных с него.




После этого идем в раздел Мониторинг -> Последние данные и наблюдаем собираемые метрики.







На этом по базовой настройке мониторинга сервера mysql все. Дальше раскрою некоторые нюансы.




Мониторинг репликации MySQL




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







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




Так же в шаблоне реализован мониторинг репликации базы данных. Для этого есть отдельное правила автообнаружения с триггерами. Теперь моя старая статья по мониторингу репликации mysql стала не актуальна. Этот же функционал реализован в базовом шаблоне. Если у вас не настроена репликация, то автообнаружение просто не найдет ничего. Можно это правило выключить.







Для мониторинга репликации автоматически создаются 4 триггера.







  1. Replication lag is too high (over {$MYSQL.REPL_LAG.MAX.WARN} for 5m) — отставание реплики больше заданного в макросе времени. По умолчанию 30 минут.
  2. The slave I/O thread is not connected to a replication master — Демон по сбору бинарного лога запущен, но не подключен к мастеру. Его параметр slave_io_running имеет значение не Yes.
  3. The slave I/O thread is not running — демон по сбору бинарного лога не запущен. Его параметр slave_io_running равен No.
  4. The SQL thread is not running — демон выполнения команд локального relay лога не запущен. Его парметр slave_sql_running равен No.




В целом, этих четырех метрик достаточно для мониторинга репликации. Я так же настраивал мониторинг именно их.




Триггеры шаблона




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







  1. Buffer pool utilization is too low (less {$MYSQL.BUFF_UTIL.MIN.WARN}% for 5m) — под innodb пул выделено слишком много памяти и она не используется вся. Триггер чисто информационный, делать ничего не надо, если у вас нет дефицита памяти на сервере. Если нехватка оперативной памяти есть, то имеет смысл забрать немного памяти у mysql и передать другому приложению. Настраивается потребление памяти пулом параметром innodb_buffer_pool_size.
  2. Failed to get items (no data for 30m) — от mysql сервера не поступают новые данные мониторинга в течении 30 минут. Имеет смысл уменьшить этот интервал до 5-10 минут.
  3. Refused connections (max_connections limit reached) — срабатывает ограничение на максимальное количество подключений к mysql. Увеличить его можно параметром mysql сервера — max_connections. Его необходимо увеличить, если позволяют возможности сервера. Напомню, что увеличенное количество подключений требует увеличения потребления оперативной памяти. Если у вас ее уже не хватает, нет смысла увеличивать число подключений. Нужно решать вопрос с потреблением памяти.
  4. Server has aborted connections (over {$MYSQL.ABORTED_CONN.MAX.WARN} for 5m) — сервер отклонил подключений выше заданного порога в макросе. Надо идти в лог mysql сервера и разбираться в причинах этого события. Скорее всего там будут подсказки.
  5. Server has slow queries (over {$MYSQL.SLOW_QUERIES.MAX.WARN} for 5m) — количество медленных запросов выше установленного макросом предела. Надо идти и разбираться с медленными запросами. Тема не самая простая. Надо заниматься профилированием запросов и решать проблемы по факту — добавлением индексов, редактированием запросов, увеличения ресурсов mysql сервера и т.д.
  6. Service has been restarted (uptime < 10m) — информационный триггер, срабатывающий на перезапуск mysql сервера (не ребут самого сервера).
  7. Service is down — служба mysql не запущена.
  8. Version has changed (new version value received: {ITEM.VALUE}) — версия mysql сервера изменилась. Тоже информационный триггер, сработает, к примеру, после обновления mysql сервера.




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




Заключение




Не понравилась статья и хочешь научить меня администрировать? Пожалуйста, я люблю учиться. Комментарии в твоем распоряжении. Расскажи, как сделать правильно!




Здорово, что разработчики сами занялись написанием готовых шаблонов для мониторинга сетевых устройств, операционных систем и приложений. Поняли, что это будет способствовать развитию продукта. Многие шаблоны, которые разрабатывали сами пользователи, становятся неактуальными, так как разработчики их делают лучше. Собственно, это и логично. Кто лучше всех знает продукт, как не они. За последнее время появилось много обновления по этой теме. Надеюсь, будет еще больше.




Источник: https://serveradmin.ru/monitoring-mysql-v-zabbix/



2021-03-10T21:51:20
Software