В этой статье рассмотрим установку программного продукта Р7 Сервер Базовый в архитектуре Middle используя ansible на операционных системах Linux (ubuntu 18-22, debian 10-11, astra linux 1.7.3 orel, RedOS_7.3.2, Centos 7-8).

Установка Р7-Офис. Корпоративный сервер для Ansible

Требования

Операционная система Ubuntu 18-22, Debian 10-11, Astra linux 1.7.3 Orel, RedOS_7.3.2, Centos 7-8

  • Для корпоративного сервера
    • Процессор: рекомендуется от 6 ядер
    • Оперативная память: рекомендуется от 12 Гб
    • Свободное место на жестком диске: рекомендуется от 50 Гб
    • Python version 3.*
  • Для документ сервера
    • Процессор: рекомендуется от 4 ядер
    • Оперативная память: рекомендуется от 8 Гб
    • Свободное место на жестком диске: рекомендуется от 50 Гб
    • Python version 3.*
  • Для базы данных mysql
    • Процессор: рекомендуется от 2 ядер
    • Оперативная память: рекомендуется от 2 Гб
    • Свободное место на жестком диске: рекомендуется от 15 Гб
    • Python version 3.*
  • Для elasticsearch
    • Процессор: рекомендуется от 4 ядер
    • Оперативная память: рекомендуется от 6 Гб
    • Свободное место на жестком диске: рекомендуется от 50 Гб
    • Python version 3.*

1. Разверните 4 ( 5 в случае если будет использоваться вынесенный elastic) виртуальные машины для следующих сервисов:

  • CS
  • DS
  • mysql master
  • mysql slave
  • elastic

2. Установите Python и Ansible на машину, с которой будет осуществляться запуск плейбука:

DEB:

sudo apt install python3
sudo apt install ansible

RPM:

sudo yum install python3
sudo yum install ansible

3. Скачайте данный репозиторий к себе на рабочую машину

Устанавливаем утилиты

DEB:

apt install wget unzip

RPM:

yum install wget unzip

Скачиваем архив:

wget https://download.r7-office.ru/ansible/cs-middle-main.zip
unzip cs-middle-main.zip
cd cs-middle-main

4. Запуск плейбука

Для запуска скрипта необходимо заполнить переменные которые находятся:

  • inventory/hosts
  • inventory/group_vars/all/main.yml
  • поместите сертификаты ssl в папку cs-middle/roles/cs_ds_ssl/files/ и укажите имя сертификатов в переменной path_cert_cs/path_cert_ds в inventory/group_vars/all/main.yml а так же имя dns имя сервера DS и CS (не обязательно если будет использоваться http)

Примеры hosts и main.yml ниже.

4.1. Файл находится по пути cs-middle/inventory/hosts

Заполните следующие переменные:

  • ansible_host: ip адрес хоста
  • ansible_port: порт для подключения по ssh
  • ansible_user: пользователь для подключения по ssh

4.2. Заполните глобалные переменные в файле main.yml (не обязательно)

Файл находится по пути cs-middle/inventory/group_vars/all/main.yml (описание глобальных переменных ниже)

4.3. Запустите плейбук

Для запуска плейбука используйте следующую команду

  • Установка cs_middle + elasticsearch + https:
ansible-playbook -i inventory/hosts cs.yml
  • Установка cs_middle:
ansible-playbook -i inventory/hosts cs.yml  --tags "cs_middle"
  • Установка cs_middle + elasticsearch:
ansible-playbook -i inventory/hosts cs.yml  --tags "cs_middle, elc"
  • Установка cs на одном хосте:
ansible-playbook -i inventory/hosts cs.yml  --tags "cs"
  • Установка cs_middle + https:
ANSIBLE_HOST_KEY_CHECKING=False ansible-playbook -i inventory/hosts cs.yml  --tags "cs_middle_https"

где:

  • ANSIBLE_HOST_KEY_CHECKING — переменная среды, используемая в Ansible для указания того, должен ли Ansible проверять ключи хостов при подключении к узлам. Когда ANSIBLE_HOST_KEY_CHECKING установлен в True, Ansible проверит ключи хостов и отклонит подключение, если обнаружит несоответствие ключей. Если установлено значение False, Ansible не будет проверять ключи хостов.
  • -i inventory/hosts — указывает путь к инвентарному файлу, который содержит информацию о хостах, на которых будет выполняться плейбук. В данном случае, Ansible будет использовать файл hosts в папке inventory
  • cs.yml — указывает на плейбук, который нужно выполнить. В данном случае, Ansible будет выполнять плейбук, который находится в файле cs.yml
  • --tags "cs_middle, elc" — фильтрует задачи, которые будут выполнены в плейбуке на основе указанных тегов. В данном случае, будут выполнены только задачи, помеченные тегами cs_middle и elc.

Пример inventory/hosts

[cs]
cs_1 ansible_host=192.168.1.1 ansible_port=22 ansible_user=ssh_user
[ds]
ds_node ansible_host=192.168.1.2 ansible_port=22 ansible_user=ssh_user
[master_db]
master_node ansible_host=192.168.1.3 ansible_port=22 ansible_user=ssh_user
[slave_db]
slave_node ansible_host=192.168.1.4 ansible_port=22 ansible_user=ssh_user
[elc]
elastic_node ansible_host=192.168.1.5  ansible_port=22 ansible_user=ssh_user

Переменные hosts

varsОписание
cs_1хост, на котором будет установлен корпоративный сервер (оставляем по умолчанию)
ds_nodeхост, на котором будет установлен документ сервер (оставляем по умолчанию)
master_nodeхост, на котором будет установлена база данных mysql master (оставляем по умолчанию)
slave_nodeхост, на котором будет установлена база данных mysql svale (оставляем по умолчанию)
elastic_nodeхост, на котором будет установлен elasticsearch (оставляем по умолчанию)
ansible_hostip адрес хоста
ansible_portпорт для подключения через ssh ( по умолчанию 22)
ansible_userпользователь для подключения по ssh

Пример inventory/group_vars/all/main.yml

cs: "{{ hostvars[groups['cs'][0]].ansible_host }}" 
ds: "{{ hostvars[groups['ds'][0]].ansible_host }}"  
ms: "{{ hostvars[groups['slave_db'][0]].ansible_host }}" 
mm: "{{ hostvars[groups['master_db'][0]].ansible_host }}"
elc: "{{ hostvars[groups['elc'][0]].ansible_host }}"
mysql_root_db_pass: "P@SSw0rd"
mysql_root_db_user: root
mysql_repl_user:
  - name: repl
    pass: "Passw0rd"
    host: "%"
    priv: "*.*:REPLICATION SLAVE"
mysql_cs_repl:
  - name: cs_user
    pass: "Passw0rd"
    priv: "*.*:ALL"
    host: "%"
    db_name: r7-office
    db_host: "{{ hostvars[groups['master_db'][0]].ansible_host }}"
DS_password: "Passw0rd"
DS_db_psql: r7office
DS_psql_user: r7office
DS_psql_pass: r7office
#HTTPS
#CS
cs_https: cs.test.ru
path_cert_cs: cs_r7-office.crt
path_keys_cs: cs_r7-office.key
#DS
ds_https: ds.test.ru
path_cert_ds: ds_r7-office.crt
path_key_ds: ds_r7-office.key

Переменные group_vars

varsОписание
csip адрес хоста для корпоративного сервера. Берет значение ansible_host из файла inventory/hosts
dsip адрес хоста для документ сервера. Берет значение ansible_host из файла inventory/hosts
msip адрес хоста для базы данных (Master). Берет значение ansible_host из файла inventory/hosts
mmip адрес хоста для базы данных (Slave). Берет значение ansible_host из файла inventory/hosts
elcip адрес хоста для elasticsearch. Берет значение ansible_host из файла inventory/hosts
mysql_root_db_passпароль от пользователя root для входа в mysql
mysql_root_db_userпользователь для входа в mysql
mysql_repl_userпеременные для настройки mysql Master с mysql Slave.
name — имя пользователя
pass — пароль от пользователя
host — ip адрес , с которого разрешен вход под данным пользователем ( если указать % то доступ будет разрешен с любого ip)
priv- привилегии пользователя
mysql_cs_replпеременные для интеграции корпоративного сервера с Mysql базой.
name — имя пользователя
pass — пароль от пользователя
priv- привилегии пользователя
host — ip адрес , с которого разрешен вход под данным пользователем (если указать % то доступ будет разрешен с любого ip)
DS_passwordпароль для интеграции документ сервера с корпоративным сервером
DS_db_psqlимя базы данных для документ сервера
DS_psql_userимя пользователя для базы данных документ сервера
DS_psql_passпароль для базы данных документ сервера
cs_httpsDNS имя сервера CS. Необходимо указывать при использовании https
path_cert_csимя или путь до сертификата CS. В случаи если сертификат находится по локальному пути /cs-middle/roles/cs_ds_ssl/files/ необходимо указать имя. Если сертификат находится в другом месте, указываем путь до сертификата /var/certs/cs_uatr.ru.cert
path_keys_csимя или путь до ключа сертификата CS. В случаи если ключ находится по локальному пути /cs-middle/roles/cs_ds_ssl/files/ необходимо указать имя. Если ключ находится в другом месте, указываем путь до него /var/certs/cs_key_uatr.ru.cert
ds_httpsDNS имя сервера DS. Необходимо указывать при использовании https
path_cert_dsимя или путь до сертификата DS. В случаи если сертификат находится по локальному пути /cs-middle/roles/cs_ds_ssl/files/ необходимо указат имя. Если сертификат находится в другом месте, указываем путь до сертификата /var/certs/ds_uatr.ru.cert
path_key_dsимя или путь до ключа сертификата DS. В случаи если ключ находится по локальному пути /cs-middle/roles/cs_ds_ssl/files/ необходимо указать имя. Если ключ находится в другом месте, указываем путь до него /var/certs/ds_key_uatr.ru.cert

Лицензирование Документ сервера

Если у вас есть лицензия для документ сервера, ее необходимо переместить в папку roles/ds/templates/license.lic