Установка системы управления кронами с 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 ключ на ноду.
