Установка системы управления кронами с web интерфейсом minicron

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

Настройка клиентов 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 ключ на ноду.

Добавить комментарий

Войти с помощью: 

Ваш e-mail не будет опубликован. Обязательные поля помечены *