Архив
Блог - Публикации блога September 2024
сент. 24 2024
Настройка уведомлений о результатах выполнения планов обслуживания MSSQL
Входе настройки процедур резервного копирования баз данных в СУБД MS SQL Server присутствует необходимость отслеживания результатов выполнения планов обслуживания.
Рассмотрим два возможных варианта по уведомлению администраторов резервного копирования.
Настройка почтовых уведомлений
ВНИМАНИЕ!!! Для работы Database Mail требуется установка компонента Net Framework 3.5!!!
В MS SQL Server уже есть встроенный компонент, отвечающий за отправку почты который называется DatabaseMail, который мы можем найти в Object Explorer в каталоге Managment.

Тыкнув на него нам откроется мастер конфигурации:

Тыкаем на далее и выбираем первый пункт, в появившемся окошке жмем "YES"

Жмем указываем имя профиля, жмем Add и добавляем новый Mail Account, где заполняем имя аккаунта, почтовый адрес и настройки подключения к SMTP серверу.

Нажимаем Ок, Next и в следующем шаге назначаем нашего пользователя профилю.

Прощёлкиваем далее до конца и жмем закрыть.
Мы настроили компонент Database Mail, теперь необходимо добавить операторов, которым он будет слать уведомления по почте, для этого в Object Explorer переходим во вкладку SQL Server Agent и находим папку Operators, на которой щелкаем правой кнопкой и выпираем New Operator.

В открывшемся окне заполняем поля Name и E-mail name этого будет достаточно.

Теперь открываем наш Maintance Plan в котором необходимо настроить уведомления и добавляем элемент "Notify Operator Task", перетаскивая его на наш Maintace Plan

Теперь нам надо соединить задачу резервного копирования с задачей уведомления оператора и нажать на соединяющую их стрелку. В открывшемся окне выбрать в качестве Evaluation operation - Constraint, в качестве Value - Fail, для того что бы уведомление оператора происходило только при ошибке выполнения задания.

Сохраняем план обслуживания и ждем уведомлений на почту.
Настройка уведомлений через Telegram
MS SQL Server поддерживаем выполнение скриптов PowerShell через задания SQL Agent.
Отравлять уведомления в телегу будем как раз через PowerShell.
Скрипт:
$chat_id = "-88541191" # Тут указываем id чата
$name=[System.Net.Dns]::GetHostName() | Select
$text1 = "Ошибка задания резервного копирования MSSQL "
$URI = "https://api.telegram.org/bot" + $token + "/sendMessage?chat_id=" + $chat_id + "&text=" + $text1 + "`n" + $name
[Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12
Invoke-WebRequest -URI ($URI) –UseBasicParsing
Создаем задание SQL Agent:

Добавляем шаг, вводим Step Name, выбираем тип задания PowerShell и вставляем наш скрипт и жмем ОК

Добавляем в наш план обслуживание выполнения задания


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

Жмем ОК и сохраняем план обслуживания.
сент. 23 2024
Установка NetBox
Требования
Устанавливать будем на FreeBSD 14.1, для Linux дистрибутивов шаги особо ничем не будут отличаться.
Установка PostgreSQL
Смотрим какие версии у нас есть в репозитории, нам нужна версия 10 или выше.
Ставим последнюю доступную версию:
Включаем службу и инициализируем СУБД:
postgresql_enable: -> YES
# service postgresql initdb
Настраиваем pg_hba.conf
Где ADDRESS - IP адрес или сеть откуда мы сможем соединиться с нашей СУБД.
METHOD - метод авторизации, в данном случае это шифрованный пароль. (md5 - хешированный пароль).
Редактируем postgresql.conf:
Запускаем службу:
Подключаемся к СУБД
И создаем базу, пользователя netbox и даем пользователю права на базу:
CREATE USER netbox WITH PASSWORD 'P@ssw0rd!';
ALTER DATABASE netbox OWNER TO netbox;
GRANT CREATE ON SCHEMA public TO netbox;
Выходим, набирая \q.
Далее можно проверить соединение с БД для пользователя netbox
Установка Redis
Устанавливаем пакет Redis (в разных дистрибутивах он может назваться по разному, например: redis-server) и проверяем версию, она должна быть не ниже 4.0.
# redis-server -v
Redis server v=7.2.5 sha=00000000:0 malloc=libc bits=64 build=a673021ce8a50e10
Далее включаем службу и проверяем работоспособность сервиса.
redis_enable: -> YES
# service redis start
# redis-cli ping
PONG
Установка NetBox
Перед установкой нам нужно доставить все зависимости, для разных дистрибутивов пакеты будут называться по разному, лучше обратиться к официальной документации
Качаем последнюю стабильную версию с Github Releases netbox-community/netbox (github.com) , распаковываем архив и ставим, возможно нас попросят доставить зависимости, например django.
# wget https://github.com/netbox-community/netbox/archive/v4.1.1.tar.gz
# tar -xzf v4.1.1.tar.gz -C /usr/local/share/
# mv /usr/local/share/netbox-4.1.1 /usr/local/share/netbox
Или
# pkg install git
# git clone -b master --depth 1 https://github.com/netbox-community/netbox.git
Создаем пользователя netbox и выдаем ему права на каталоги:
# chown -R netbox /usr/local/share/netbox/netbox/media/
# chown -R netbox /usr/local/share/netbox/netbox/reports/
# chown -R netbox /usr/local/share/netbox/netbox/scripts/
Доставляем зависимости (увидим какие при выполнении скрипта):
$ cd /usr/local/share/netbox/
$ pip install venv
$ python3.11 -m venv venv
$ . venv/bin/activate
(venv)$ pkg install py311-django50
(venv)$ pkg install py311-pip
(venv)$ pkg install rust
(venv)$ pkg install openjpeg
(venv)$ pkg install zlib-ng
(venv)$ pip install --upgrade pip setuptools wheel
(venv)$ pip install --upgrade pillow
(venv)$ cd /usr/local/share/netbox/
(venv)$ pip install -r requirements.txt
Проваливаемся в каталог с конфигами NetBox и переименовываем пример файла конфигурации, который называется configuration.py.
(venv)$ cp configuration_example.py configuration.py
В файле конфигурации вводим настройки соединения с базой Postgresql и Redis:
'NAME': 'netbox', # Database name
'USER': 'netbox', # PostgreSQL username
'PASSWORD': 'P@ssw0rd!', # PostgreSQL password
'HOST': 'localhost', # Database server
'PORT': '', # Database port (leave blank for default)
'CONN_MAX_AGE': 300, # Max database connection age (seconds)
}
'tasks': {
'HOST': 'localhost', # Redis server
'PORT': 6379, # Redis port
'PASSWORD': '', # Redis password (optional)
'DATABASE': 0, # Database ID
'SSL': False, # Use SSL (optional)
},
'caching': {
'HOST': 'localhost',
'PORT': 6379,
'PASSWORD': '',
'DATABASE': 1, # Unique ID for second database
'SSL': False,
}
}
Указываем список имен FQDN или IP адресов с которых мы будем иметь доступ к сервису NetBox ('*' звездочка означает все доступные адреса), обычно эта запись дублирует имя и адрес хоста на котором стоит Netbox.
Устанавливаем SECRET_KEY, который является секретной, псевдослучайная строкой, используемой для помощи в создании новых криптографических хэшей для паролей и файлов cookie HTTP. Ключ, определенный здесь, не должен распространяться за пределами файла конфигурации. может быть изменен в любое время без влияния на сохраненные данные, однако имейте в виду, что это приведет к аннулированию всех существующих пользовательских сессий. Развертывания NetBox, состоящие из нескольких узлов, должны иметь один и тот же секретный ключ, настроенный на всех узлах.SECRET_KEY.
(venv)$ python3.11 netbox/generate_secret_key.py
После выполнения скрипта, копируем секретный ключ в файл конфигурации configuration.py
Далее создаем структуру базы данных и суперпользователя:
(venv)$ cd /usr/local/share/netbox/netbox
(venv)$ python3.11 manage.py migrate
(venv)$ python3.11 manage.py createsuperuser
(venv)$ python3.11 manage.py collectstatic --no-input
Для проверки того, что мы все сделали правильно пробуем запустить NetBox в тестовой режиме:
(venv)$ python3.11 manage.py runserver 0.0.0.0:8000 --insecure
Теперь мы можем зайти по адресу netbox.example.com:8000 под пользователем которого мы создали в предыдущем шаге.

Настройка запуска в качестве службы
Для запуска сервиса будем использовать WSGI-сервер Gunicorn.
Ставим Gunicorn:
Если для дистрибутивов Linux примеры конфигурационных файлов сервисов лежать в каталоге /netbox-4.1.1/contrib/, то для freebsd скопируем текст скрипта сервиса в файл /usr/local/etc/rc.d/netbox
# This sample rc script eliminate the need to use sysutils/py-supervisor to
# run NetBox as a system service. Only www/py-gunicorn is needed as a WSGI.
#
# Of course a working HTTP server like Apache/nginx is still required to make
# use of the gunicorn WSGI.
#
# PROVIDE: netbox
# REQUIRE: DAEMON
# KEYWORD: shutdown
# netbox_enable (bool): Set to NO by default.
# Set it to YES to enable netbox.
# netbox_config (str): Default to "/usr/local/etc/${name}.conf}"
# Config file for gunicorn's netbox config file
# netbox_command (str): Default to "/usr/local/share/netbox/venv/bin/gunicorn"
# Path to gunicorn to run netbox
# netbox_bind (str): Default to "localhost:8001"
# Interface and port to bind to
# netbox_workers (int): Default to "3"
# Number of gunicorn works
# netbox_timeout (int): Default to "120"
# Worker timeout for gunicorn
. /etc/rc.subr
name="netbox"
rcvar=netbox_enable
netbox_path=/usr/local/share/netbox/netbox/
load_rc_config $name
start_precmd="netbox_precmd"
command=${netbox_program:-/usr/local/share/netbox/venv/bin/gunicorn}
procname=${netbox_procname:-/usr/local/share/netbox/venv/bin/python3.11}
netbox_chdir=${netbox_path}
pidfile=${netbox_pidfile:-/var/run/${name}/${name}.pid}
netbox_user=${netbox_user:-netbox}
netbox_bind=${netbox_bind:-localhost:8001}
netbox_workers=${netbox_workers:-3}
netbox_timeout=${netbox_timeout:-120}
command_args="${netbox_args} -D \
--log-syslog --log-syslog-prefix ${name} \
--log-syslog-to unix:///var/run/log#dgram \
--disable-redirect-access-to-syslog \
-p ${pidfile} --pythonpath ${netbox_chdir} \
-b ${netbox_bind} -w ${netbox_workers} -t ${netbox_timeout} \
netbox.wsgi"
netbox_precmd()
{
install -d -o ${netbox_user} 'dirname ${pidfile}'
}
run_rc_command "$1"
Добавляем записи в rc.conf и разрешаем выполнение rc-скрипта
# chmod +x /usr/local/etc/rc.d/netbox
Теперь можно запускать службу.
P.S. После запуска службы лично она у меня сразу грохалась с ошибкой создания .pid файла, для этого я создал заранее каталог для pid файла netbox и сделал пользователя netbox его владельцем
# chown netbox /var/run/netbox
Создание SSL сертификата
Для работы через протокол https нам потребуется сертификат, мы может сгенерировать самоподписанный сертификат на 10 лет командой:
-keyout /etc/ssl/private/netbox.key \
-out /etc/ssl/certs/netbox.crt
Но в моем случае, при наличии доменного центра сертификации я сгенерирую запрос на выдачу сертификата.
Для этого необходимо создать конфигурационный файл, например netbox_openssl.cnf:
distinguished_name=req_distinguished_name
promt = no
[ req_distinguished_name ]
commonName = FQDN of server
commonName_default = APACHE-SERVER.mydom.com
countryName = Country Name (2 letter code)
countryName_default = RU
0.organizationName = Organization Name (eg, company)
0.organizationName_default = MyCompany
localityName = Locality Name (eg, city)
localityName_default = Moscow
organizationalUnitName = Organizational Unit Name (eg, section)
organizationalUnitName_default = MOSCOW
subjectAltName = domain name
subjectAltName_default = example.com
[req_ext]
subjectAltName = @alt_names
[alt_names]
DNS.1 = netbox.example.com
IP.1 = 172.16.1.100
Создаем закрытый ключ и запрос на сертификат:
# openssl req -new -key netbox.example.com.key -config netbox_openssl.cnf -reqexts req_ext -out netbox.csr
По запросу выдаем сертификат и кидаем к нам на сервер.
Установка NGINX в качестве обратного прокси
Перед тем как ставить nginx нам надо создать каталог static если мы его еще не создали.
И запускаем скрипт:
$ sh /usr/local/share/netbox-4.1.1/upgrade.sh
Ставим nginx и включаем службу:
# sysrc nginx_enable="YES"
Редактируем конфиг nginx где указываем location и пути до наших сертиков:
Запускаем службу и пробуем войти в netbox https://netbox.example.com
Настройка housekeeping
Для очистки старых заданий и очередей необходимо настроить housekeeping
открываем cron и вставляем туда команду:
Или создаем скрипт
Настройка Netbox RQ
Данная служба отвечает за выполнение заданий запускаемых из NetBox и является по сути обычным планировщиком, через который мы можем выполнять скрипты по расписанию.
Например мы сначала цепляем скрипт, а потом создаем задачу на его выполнение:


Для запуска службы нам по аналогии со службой netbox нужно создать файл скрипта службы:
# This sample rc script starts the RQ worker background service which is
# required for Webhooks and various automation tasks.
#
# PROVIDE: netbox_rq
# REQUIRE: DAEMON
# KEYWORD: shutdown
#
# Add the following line to /etc/rc.conf.local or /etc/rc.conf
# to enable netbox-rq:
#
# netbox_rq_enable (bool): Set to NO by default.
# Set it to YES to enable netbox_rq.
. /etc/rc.subr
name=netbox_rq
rcvar=netbox_rq_enable
load_rc_config $name
start_cmd="netbox_rq_start"
start_precmd="netbox_rq_precmd"
command="/usr/local/share/netbox/venv/bin/python3.11"
command_args="/usr/local/share/netbox/netbox/manage.py rqworker"
pidfile=${netbox_rq_pidfile:-/var/run/${name}/${name}.pid}
netbox_rq_user=${netbox_rq_user:-netbox}
netbox_rq_precmd()
{
install -d -o ${netbox_rq_user} `dirname ${pidfile}`
}
netbox_rq_start()
{
echo "Starting netbox_rq."
/usr/sbin/daemon -cf -p ${pidfile} -u ${netbox_rq_user} ${command} ${command_args}
}
run_rc_command "$1"
Дать разрешение на выполнения файла скрипта и добавить его rc.conf:
# sysrc netbox_rq_enable="YES"
# service netbox_rq start
сент. 16 2024
Установка FTP сервера ProFTP на Feebsd 14.1
- Установка proftpd
- Настройка базовой аутентификации по пользователи и паролю
- Настройка анонимного доступа
Установка proftpd
# sysrc proftpd_enable="YES"
Далее создаем пользователя
Указываем в мастере группу ftp.
Настройка базовой аутентификации по пользователи и паролю
Узнаем идентификатор пользователя и группы ftp:
Далее нам необходимо сгенерировать файл ftp.passwd и ftp.group для виртуального пользователя, для этого необходимо использовать утилиту ftpasswd, поскольку это perl-скрипт, нам надо установить среду perl:
# ftpasswd --group --name=ftp --file=/usr/local/etc/proftpd/ftpd.group --gid=14 --member ftp
открываем конфигурационный файл /usr/loca/proftpd/etc/proftpd.conf
Запускаем сервис:
Если при запуске службы будет вылазить ошибка: unable to use world-readable AuthUserFile ‘/use/local/etc/proftpd/ftpd.passwd’: Операция не позволена,
То раздадим права доступа:
chmod 640 /use/local/etc/proftpd/ftpd.passwd
chown proftpd:root /use/local/etc/proftpd/ftpd.passwd
Настройка анонимного доступа
Тут все тоже самое только конфигурационный файл будет отличаться.