Установка системы управления кронами с web интерфейсом minicron
Если Вам стала необходима централизованная система управления кронами то Вы можете использовать minicron. Сейчас мы разберем что это такое, как это работает и как это все дело развернуть.
Требования.
1. Debian server
2. Mysql server или postgresql
Установка субд Percona server 5.7
Все данные хранятся в бд. Будем использовать percona 5.7
Установка Percona-server-5.7
wget https://repo.percona.com/apt/percona-release_0.1-3.$(lsb_release -sc)_all.deb dpkg -i percona-release_0.1-3.$(lsb_release -sc)_all.deb apt-get update apt-get install percona-server-server-5.7
Установка Minicron
Установка основных файлов производиться одной командой
bash -c "$(curl -sSL https://raw.githubusercontent.com/jamesrwhite/minicron/master/install.sh)"
Настройка сервера Minicron
Создаем файл конфигурации сервера
nano /etc/minicron.toml
Вставляем туда следующее содержимое
##Config file by a.v.galushko86@gmail.com # Global options verbose = false debug = false # Useful for debugging # Client options [client] [client.server] scheme = "http" # [http, https] host = "10.1.9.69" port = 54276 path = "/" connect_timeout = 5 inactivity_timeout = 5 # CLI options [client.cli] mode = "line" # [line, char] dry_run = false # Server options [server] host = "10.1.9.69" port = 54276 path = "/" pid_file = "/tmp/minicron.pid" timezone = "Asia/Yekaterinburg" [server.session] name = "cronamanager" domain = "cronmanager.itc-life.ru" path = "/" ttl = 86400 secret = "secretpass" [server.database] type = "mysql" # [mysql, postgresql, sqlite] # The options below are for mysql and postgresql only host = "10.1.9.69" database = "minicron" username = "minicron" password = "passworddatabase" [server.ssh] connect_timeout = 10 # Alerting options [alerts] [alerts.email] enabled = false # from = "from@example.com" # "Your Name <from@example.com>" syntax is also supported # to = "to@example.com" [alerts.email.smtp] address = "localhost" # "smtp.gmail.com" for gmail port = 25 # 587 for gmail # domain = "your.domain.name" # user_name = "username@email.com" # password = "password" # authentication = "plain" enable_starttls_auto = true [alerts.sms] enabled = false # from = "+442222222222" # to = "+443333333333" [alerts.sms.twilio] # account_sid = "YOUR_TWILIO_ACCOUNT_SID" # auth_token = "YOUR_TWILIO_AUTH_TOKEN" [alerts.pagerduty] enabled = false # service_key = "YOUR_P
Соответвенно 10.1.9.69 – заменяем на ip сервера, на который мы поставили миникрон. Также изменяем данные подключения к базе данных mysql(percona) на свои.
Производим первоначальную инициализацию конфигурации бд – бeдет создана структура бд.
minicron db setup
Теперь запускаем сам сервер
minicron server start
Для защиты нашего сервера minicron поставим nginx + настроим защиту по паролю. Так же для этих целей укажем нестандартный порт сервера миникрон и будем проксировать через nginx на 80 порт и с httppasswd(парольной защитой). Дело в том, что в minicron не реализовано какого-либо механизма аутентификации, автор обещает реализовать его в следующих версиях. Пока же мы можем реализовать защиту через iptables – будем дропать все коннекты к нашему порту кроме доверенных нод с кронами.
Ставим nginx
apt install nginx -y
Правим конфиг nginx.conf.
nano /etc/nginx/nginx.conf
# The user and group you want nginx to run as user www-data; # The number of processes, it's generally thought that # this should equal how many CPU cores you have worker_processes 4; events { # How many connections one worked can handle # See: https://wiki.nginx.org/EventsModule worker_connections 1024; } http { # Include nginx's mime types for files include mime.types; # Set the default content type default_type application/octet-stream; # Enable GZIP - optional gzip on; # Enable GZIP on the content types that minicron uses # text/html is always enabled when gzip is on gzip_types text/css text/javascript application/javascript application/json; server { # The port you want minicron to be available, with nginx port 80 # is implicit but it's left here for demonstration purposes listen 80; # The host you want minicron to available at server_name cronmanager.itc-life.ru; location / { # Pass the real ip address of the user to minicron proxy_set_header X-Real-IP $remote_addr; # minicron defaults to running on port 9292, if you change # this you also need to change your minicron.toml config proxy_pass https://10.1.9.69:54276; autoindex on; auth_basic "Restricted"; auth_basic_user_file /etc/minicron/htpasswd; } } }
Создадим папку, в которой будем хранить пароли.
mkdir -p /etc/minicron
Поставим утилиту для генерации паролей
apt-get -y install apache2-utils -y
Переходим в папку /etc/minicron и генерим пароль
cd /etc/minicron htpasswd -c htpasswd human
Вводим пароль. Чтобы добавить еще пользователей, используем эту же команду, только без -С
htpasswd htpasswd username2
Релоадим nginx
/etc/init.d/nginx reload
Любуемся вебморде на https://ip
Настройка клиентов Minicron
Настройка файла /etc/hostname. Главное и очень важное условие – правильно назвать хост, обязательно чтобы ваше доменное имя шло раньше localhost Например
127.0.0.1 client1.itc-life.ru client1 localhost
Применить имя
/etc/init.d/hostname.sh
Устанавливаем minicron
bash -c "$(curl -sSL https://raw.githubusercontent.com/jamesrwhite/minicron/master/install.sh)"
Создаем конфиг клиента
nano /etc/minicron.toml
Вставляем код клиента
# Client options [client] [client.server] scheme = "http" # [http, https] host = "10.1.9.69" port = 54276 path = "/" connect_timeout = 5 inactivity_timeout = 5 # CLI options [client.cli] mode = "line" # [line, char] dry_run = false
Запускаем проверочную команду на новой ноде
minicron run --verbose --debug 'echo "Node Add"'
Теперь она появится в веб интерфейсе на сервере, и надо будет добавить ssh ключ на ноду.