Содержание

Схема взаимодействия сервисов

Установка High Available архитектуры Корпоративного сервера 2024 на РедОС 7.3

Примечание: Кластер не прошёл тестирование, статья выложена без всех стадий тестирования и проверок, поэтому может быть не актуальна и иметь ошибки.

Условия развёртки:

Для всех ВМ использовался Redos 7.3.5 и рекомендуемыми параметрами от 2 CPU, 4GB RAM, SSD от 40 GB, для NFS так же используется быстрый диск для уменьшения latency обработки данных.

Сборка осуществлялась на Корпоративном сервере 2024 версии 4400 и Сервере документов версии 622, rabbitmq версии 3.13.7, postgresql 16.4, redis 7.2.6, nginx 1.26.3, haproxy 3.0.5.

Созданы записи в DNS:

A *.test3.s7-office.site 192.168.27.35

A ds-cluster.test3.s7-office.site 192.168.27.35

Так же возможно создание записей для нод кластеров для обращения к ним по DNS имени. В статье описаны примеры подключения с минимальным набором A записей

Используется сертификат wildcard на домен test3.s7-office.site — будет фигурировать в настройках nginx

1. Необходимые сервисы для реализации отказоустойчивости комплекса

1.1. Необходимо сервисы для работы комплекса

Postgresql версии не ниже версии 16

RabbitMQ-server версии не ниже 3.13

Redis версии не ниже 7.2.6

HAproxy версии не ниже 3.0.5 или Nginx версии не ниже 1.26.3

Примечание:

Возможно использование кластерных архитектур на примере статьи: Пример развертки кластеров Pgsql, RabbitMQ, Redis

Возможно использование однонодовых инсталляций и master-slave (replica)

Для работы сервера документов на версии 622 с кластерами Pgsql, Rabbitmq, Redis требуется балансировщик Пример реализации балансировщика HAproxy для архитектуры High Available

2. NFS — хранение общих каталогов

При включенной службе firewalld необходимо добавить сервис в исключение и выполнить настройку для nfs.

2.1. Установка

sudo dnf install nfs-utils nfs4-acl-tools -y

sudo systemctl enable nfs-server --now

2.2. Настройка

Каталоги для Сервера документов:

mkdir -p /mnt/ds/cache - общий каталог кэшированных данных (распакованных файлов) сервера документов
 
mkdir -p /mnt/ds/data/ - размещается файл лицензии с именно таким именем license.lic

Каталоги для Корпоративного сервера 2024:

mkdir -p /mnt/search - хранение индексов для поисковой системы
 
mkdir -p /mnt/disk/filestorage - хранение пользовательских данных
 
mkdir -p /mnt/disk/filestorage_temp - временный каталог хранения пользовательских данных
 
mkdir -p /mnt/disk/filestorage_temp_proc - каталог для хранения временных данных proccessing

2.2.1. Указание пользователя и группы на каталоги

Важно заметить, что в данной инструкции рассматривается чистая инсталляции без имеющихся Сервера документов (DS). Если у Вас уже есть DS, то необходимо указать UID и GID пользователя ds с ВМ, где установлен DS.

Можно воспользоваться командой:

id ds

В данной инструкции установки не рассматривается наличие уже установленного Документ сервера, поэтому UID и GID будут везде указаны 976. Если Вам важно сохранить имеющийся DS, то необходимо использовать GID и UID с данной ВМ, либо изменить их на ней, возможно использовать данные команды:

supervisorctl stop all
groupmod -g 976 ds
usermod -u 976 -g 976 ds
chown -R ds:ds /var/lib/r7-office/
chown -R ds:ds /var/www/r7-office/
chown -R ds:ds /etc/r7-office/

В случае если сервер не установлен перейдите к пункту 7 и после установки DS проверьте какие выданы GID и UID на установленном сервере документов

Создание пользователя на хосте с ролью NFS:

ВАЖНО: UID и GID пользователя ds должны быть одинаковые на всех ВМ с Документ сервером и NFS хранилищем
Создайте группу с gid 976

groupadd -g 976ds

Создайте пользователя с uid 976 и добавляем его в группу с gid 976

Укажите права на каталоги

chown ds:ds -R /mnt/ds/

Рекомендуется упростить доступ к файлам на каталог /mnt и предоставить права на чтение и запись для группы 976 с пользователями ds и cddisk, к примеру

chmod 770 -R /mnt

2.2.2. Отредактируйте файл

/etc/exports

/mnt/ds/cache 192.168.26.0/24(rw,insecure,nohide,all_squash,anonuid=976,anongid=976,no_subtree_check)
/mnt/ds/data 192.168.26.0/24(rw,insecure,nohide,all_squash,anonuid=976,anongid=976,no_subtree_check)
/mnt/disk/filestorage 192.168.27.0/24(rw,nohide,all_squash,anonuid=119,anongid=131,no_subtree_check)
/mnt/disk/filestorage_temp 192.168.27.0/24(rw,nohide,all_squash,anonuid=119,anongid=131,no_subtree_check)
/mnt/disk/filestorage_temp_proc 192.168.27.0/24(rw,nohide,all_squash,anonuid=119,anongid=131,no_subtree_check)
/mnt/search 192.168.26.0/24(rw,nohide,all_squash,anonuid=972,anongid=972,no_subtree_check)

Где,

  • /mnt/ds/cache –путь к папке, для которой раздается доступ;
  • 192.168.26.0/24 –IP-адрес, которому раздается доступ к папке (можно указать всю сеть, тогда запись примет вид 192.168.1.0/24)
  • (rw,no_root_squash,sync) –набор опций, опции могут быть:
    • rw –чтение запись(может принимать значение ro-только чтение);
    • no_root_squash – по умолчанию пользователь root на клиентской машине не будет иметь доступа к разделяемой директории сервера. Этой опцией мы снимаем это ограничение. В целях безопасности этого лучше не делать;
    • nohide — NFS автоматически не показывает нелокальные ресурсы (например, примонтированые с помощью mount –bind), эта опция включает отображение таких ресурсов;
    • subtree_check (no_subtree_check) — в некоторых случаях приходится экспортировать не весь раздел, а лишь его часть. При этом сервер NFS должен выполнять дополнительную проверку обращений клиентов, чтобы убедиться в том, что они предпринимают попытку доступа лишь к файлам, находящимся в соответствующих подкаталогах. Такой контроль поддерева (subtree checks) несколько замедляет взаимодействие с клиентами, но если отказаться от него, могут возникнуть проблемы с безопасностью системы. Отменить контроль поддерева можно с помощью опции no_subtree_check. Опция subtree_check, включающая такой контроль, предполагается по умолчанию. Контроль поддерева можно не выполнять в том случае, если экспортируемый каталог совпадает с разделом диска;

Для публикации сетевых директорий

exportfs -ra

3. Кластер ДС

При включенной службе firewalld необходимо добавить сервис и выполнить настройку для Сервера документов по протоколам http и https.

3.1. Установите и запустите nginx

dnf install nginx -y

systemctl enable nginx --now

3.2. Установка утилита nfs и монтирование каталоги

3.2.1. Установите пакет

dnf install nfs-utils

3.2.2. Создайте группу и пользователя (id те же, что и на nfs должны быть)

groupadd -g 976 ds
useradd -u 976 -g 976 ds

3.2.3. Создайте каталоги

mkdir /var/lib/r7-office/documentserver/App_Data/cache -p
mkdir /var/www/r7-office/Data -p

3.2.4. Назначьте права

chown ds:ds -R /var/lib/r7-office/
chown ds:ds -R /var/www/r7-office/

3.2.5. Монтирование

sudo mount -t nfs -O uid=1100,iocharset=utf-8 192.168.26.247:/mnt/ds/cache /var/lib/r7-office/documentserver/App_Data/cache
sudo mount -t nfs -O uid=1100,iocharset=utf-8 192.168.26.247:/mnt/ds/data /var/www/r7-office/Data

Где,

192.168.26.247 — ip nfs сервера;
/mnt/ds/cahce и /mnt/ds/data — каталог на nfs сервере;
/var/www/r7-office/Data и /var/lib/r7-office/documentserver/App_Data/cache — пути монтирования на ВМ с DS.

3.2.6. Проверьте монтирование

df -h

3.2.7. Добавьте запись в /etc/fstab

192.168.26.247:/mnt/ds/cache /var/lib/r7-office/documentserver/App_Data/cache nfs defaults 0 0
192.168.26.247:/mnt/ds/data /var/www/r7-office/Data nfs defaults 0 0

3.3. Установка Сервера документов и настройка

Произведите установку сервера документов по актуальной инструкции: https://support.r7-office.ru/document_server/install-document_server/document_server_linux/install_ds_redos/

В файл /etc/hosts добавьте запись для адресации с haproxy

192.168.27.83 haproxy

3.3.1. Конфигурация

Если это первая инсталляция, то файла этого нет, можете сделать рандомный секрет, например, командой ниже:
cat /dev/urandom | tr -dc A-Za-z0-9 | head -c 32

Заголовок AuthorizationJwt можете использовать по умолчанию.

Задайте секрет и хедер

declare -x JWT_SECRET=VrTMopwWwGP1
declare -x JWT_HEADER=AuthorizationJwt

Эти параметры из файла /etc/r7-office/documentserver/local.json должны быть ОДИНАКОВЫ для всех ВМ с DS в кластере, если используется JWT

Установка High Available архитектуры Корпоративного сервера 2024 на РедОС 7.3

Если JWT необходимо отключить, то выполните данную команду

declare -x JWT_ENABLED=false

Запустите скрипт

bash documentserver-configure.sh

Будут запрошены данные

Для PostgreSQL:

  • Host: 192.168.27.83:5000
  • Database: ds
  • User: ds
  • Password: ds

Где,

  • host — ip адрес HAproxy;
  • Database — имя Базы Данных;
  • User — Имя пользователя;
  • Password — Пароль от пользователя.

Для AMQP

  • Host: 192.168.27.83
  • User: r7office
  • Password: r7office

Где,

  • host — ip адрес HAproxy;
  • user — пользователь для подключения;
  • password — пароль от пользователя.

В конфигурации /etc/r7-office/documentserver/local.json укажите в параметре rabbitmq:

"rabbitmq": {
"url": "amqp://r7office:r7office@192.168.27.83/ds"
},

где,

  • r7office:r7office — логин и пароль из пункта 2.3.2;
  • 192.168.27.83 — адрес сервера haproxy;
  • /ds — виртуальный адрес из пункта 2.3.2

Для Redis:

в файле /etc/r7-office/documentserver/default.json измените параметр host и добавьте опцию авторизации password:

"redis": {
                                "name": "redis",
                                "prefix": "ds:",
                                "host": "192.168.27.83",
                                "port": 6379,
                                "options": {
                                        "password": "SecretPassword"
                                }
                        },

Где,

  • host — ip адрес HAproxy;
  • prefix — ключи для идентификации сервера документов
  • port — порт подключения;
  • password — пароль от пользователя.

Для Nginx:

Следующие действия обновят параметр secure_link_secret в файлах:
/etc/r7-office/documentserver/local.json
/etc/r7-office/documentserver/nginx/ds.conf

ВАЖНО: Данный параметр должен быть также одинаковым на всех нодах DS.

Запустите на одной ноде Сервера документов скрипт:

bash documentserver-update-securelink.sh

После скопируйте значение secretString из /etc/r7-office/documentserver/local.json

  "storage": {
    "fs": {
      "secretString": "lfzupJnq7A3G17vIPaxk"
    }
  }
}

и укажите на других нодах кластера Сервера документов в конфигурациях

/etc/r7-office/documentserver/local.json
/etc/r7-office/documentserver/nginx/ds.conf

Выполните перезапуск служб сервера документов и nginx

systemctl restart ds-* nginx

3.3.2. Проверьте статус служб

systemctl status ds-*

и логирование в файле /var/log/r7-office/documentserver/docservice/out.log

3.3.3. Повторить для всех нод Сервера документов и указать одинаковые параметры JWT secret и header

4. NGINX балансер (внешний)

При включенной службе firewalld необходимо добавить сервис и выполнить настройку для Nginx прокси сервера по протоколам http/https.

4.1. Установите и запустите nginx

dnf install nginx -y
systemctl enable nginx --now

4.2. Добавьте конфигурационный файл

4.2.1. /etc/nginx/conf.d/r7-ds.conf

Данная настройка является проксированием HTTPS на HTTP (Прокси сервер на HTTPS, DS на HTTP)
Этот сценарий используется, если требуется обеспечить безопасное соединение, чтобы все запросы автоматически перенаправлялись на HTTPS

upstream docservice { #укажите все ноды серверов документов для переключения в режиме round robin
  server 192.168.26.65 max_fails=3 fail_timeout=30s; #max_fails Количество неудачных попыток подключения к серверу, после которого сервер будет считаться недоступным
  server 192.168.26.133 max_fails=3 fail_timeout=30s; #fail_timeout Время, в течение которого сервер будет считаться недоступным после достижения max_fails
}
  
map $http_host $this_host {
  "" $host;
  default $http_host;
}
  
map $http_x_forwarded_proto $the_scheme {
  default $http_x_forwarded_proto;
  "" $scheme;
}
  
map $http_x_forwarded_host $the_host {
  default $http_x_forwarded_host;
  "" $this_host;
}
  
map $http_upgrade $proxy_connection {
  default upgrade;
  "" close;
}
  
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection $proxy_connection;
proxy_set_header X-Forwarded-Host $the_host;
proxy_set_header X-Forwarded-Proto $the_scheme;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
  
## Normal HTTP host
server {
  listen 0.0.0.0:80;
  server_name ds-cluster.test3.s7-office.site; #укажите доменное общее имя кластера серверов документов
  server_tokens off;
  
## Redirects all traffic to the HTTPS host
  return 301 https://$server_name:443$request_uri;
}
  
server {
  listen 0.0.0.0:443 ssl http2;
  server_name ds-cluster.test3.s7-office.site; #укажите доменное общее имя кластера серверов документов
  server_tokens off;
  
  ssl_certificate /etc/nginx/ssl/test3.s7-office.site.crt; #укажите путь к сертификату
  ssl_certificate_key /etc/nginx/ssl/test3.s7-office.site.key; #укажите путь к ключу сертификата
  
  ssl_ciphers "EECDH+AESGCM:EDH+AESGCM:AES256+EECDH:AES256+EDH";
  
  ssl_protocols TLSv1 TLSv1.1 TLSv1.2 TLSv1.3;
  ssl_session_cache builtin:1000 shared:SSL:10m;
  
  ssl_prefer_server_ciphers on;
  
  add_header Strict-Transport-Security "max-age=31536000; includeSubDomains" always;
  add_header X-Frame-Options SAMEORIGIN;
  add_header X-Content-Type-Options nosniff;
   
  location / {
  proxy_pass http://docservice;
  proxy_http_version 1.1;
  proxy_next_upstream error timeout http_502; #Определяет, в каких случаях Nginx будет перенаправлять запрос на следующий сервер в upstream
  proxy_next_upstream_timeout 2s; #Ограничивает время, в течение которого Nginx будет пытаться перенаправить запрос на другой сервер
  proxy_next_upstream_tries 3; #Ограничивает количество попыток перенаправления запроса на другой сервер
  }
}
}
  • в блоке upstream docservice {} — указаны сервера DS;
  • server_name ds-cluster.test3.s7-office.site; — указано dns имя reverse proxy;
  • ssl_certificate /etc/nginx/ssl/test3.s7-office.site.crt; — указан путь до полной цепочки сертификатов;
  • ssl_certificate_key /etc/nginx/ssl/test3.s7-office.site.key; — указан путь до закрытого ключа.

4.2.2. Проверьте конфигурацию

nginx -t

4.2.3. Перезапустите сервис

systemctl restart nginx

4.2.4. Проверьте доступность

Перейдите по адресу ds-cluster.s7-office.site.ru и будет отображаться страница запущенного сервера документов

5. Установка сервера приложений Корпоративный сервер 2024

Информация дополняет действия из статьи: https://support.r7-office.ru/corporate-server2024/install-r7server/ustanovka-r7-disk-na-redos/

Корпоративный сервер — сервер приложений будет в дальнейшем трансформирован на отдельные ноды согласно схеме

При включенной службе firewalld необходимо добавить сервис и выполнить настройку для Корпоративного сервера по протоколам http/https

5.1. Добавление репозитория

5.1.1. Откройте файл на редактирование

/etc/yum.repos.d/r7server.repo

5.1.2. Добавьте следующий текст

[r7server]
name=r7server
baseurl=https://downloads.r7-office.ru/repository/r7-server-yum/
enabled=1
gpgcheck=1
gpgkey=https://download.r7-office.ru/repos/RPM-GPG-KEY-R7-OFFICE.public
sslverify=1
username=server
password=KwmuQmOzuFIw9wcJsL3zb

5.1.3. Обновите список репозиториев с подгружаемыми данными

sudo yum makecache

5.2. Скачайте архив Р7-Диск для установки и положите его на ВМ

Рекомендуем, для корректной установки, архив разместить в директории, отличной от /root, например в /mnt или /tmp

5.2.1. Зайдите в директорию с архивом

cd /mnt

5.2.2. Распакуйте архив

unzip RedOS_*.zip

5.2.3. Выполните команду

sed -i "s/dnf install -y postgresql-client/dnf install -y postgresql/" CDDisk/install.sh

5.2.4. Настройка SSL

Перед установкой скопируйте crt и key файлы в папку sslcert.

Имя файла должно содержать название домена и расширение.

Обязательно в .crt указывать всю цепочку сертификатов, домен, промежуточные и корневой.

Например, для домена test3.s7-office.site имена файлов должны быть test3.s7-office.site.crt и test3.s7-office.site.key.

5.2.5. Добавьте права на исполнение скрипту

chmod +x online_installer.sh

5.2.6. Запустите установку

sudo bash ./online_installer.sh

На запрос пароля для sudo введите его

5.3. В процессе установки:

5.3.1. Чистая установка

Если требуется выполнить чистую установку (удалит имеющуюся инсталляцию Р7-Диск и зависимости):

  • Выберите Да

Установка High Available архитектуры Корпоративного сервера 2024 на РедОС 7.3

5.3.2. Установка СУБД

PostgreSQL будет на другой ВМ:

  • Выберите Да

Установка High Available архитектуры Корпоративного сервера 2024 на РедОС 7.3

5.3.3. Установка сервера документов:

Установка High Available архитектуры Корпоративного сервера 2024 на РедОС 7.3

Сервер Документов находится на другой ВМ, то:

  • Выберите Нет

Также, необходимо сделать А запись в dns указывающий Ваш домен и IP адрес внешнего proxy nginx сервера из пункта 7

Пример добавленной А записи в DNS у провайдера Selectel указан на скриншоте:

Установка High Available архитектуры Корпоративного сервера 2024 на РедОС 7.3

5.3.4. URL Сервера документов

Укажите url и протокол, как в примере ниже

https://ds-cluster.test3.s7-office.site

5.3.5. Секрет для DS и формирования JWT

Введите секрет (Набор цифр, букв и спецсимволов. Длина от 8 символов) для защищённого доступа Р7-Диска и Сервера Документов — данные из пункта 6.3.1.

Установка High Available архитектуры Корпоративного сервера 2024 на РедОС 7.3

5.3.6. Установка api и web диска

Основное приложения Р7-Диска и веба (статика) сайта.

Установка High Available архитектуры Корпоративного сервера 2024 на РедОС 7.3

Для его установки:

  • Выберите Да

5.3.7. Тип СУБД Р7-Диск

Установка High Available архитектуры Корпоративного сервера 2024 на РедОС 7.3

  • Выберите PostgreSQL

5.3.8. Создание БД

Установка High Available архитектуры Корпоративного сервера 2024 на РедОС 7.3

Создание БД не требуется

  • Выберите Нет

5.3.9. Хост СУБД

СУБД установлена отдельно,

укажите ip адрес haproxy Пример реализации балансировщика HAproxy для архитектуры High Available

5.3.10. Порт СУБД

По умолчанию 5432 используется. Потребуется указать порт 5000 для haproxy Пример реализации балансировщика HAproxy для архитектуры High Available

5.3.11. Пользователь с правами БД

созданный на этапе развертки БД пункт 1.2.3.1.1 Пример развертки кластеров Pgsql, RabbitMQ, Redis

Установка High Available архитектуры Корпоративного сервера 2024 на РедОС 7.3

5.3.12. Пароль пользователя

созданный на этапе развертки БД пункт 1.2.3.1.1 Пример развертки кластеров Pgsql, RabbitMQ, Redis

Установка High Available архитектуры Корпоративного сервера 2024 на РедОС 7.3

5.3.13. coremachinkey от CS

Измените на актуальный, если есть Р7-Офис Корпоративный сервер 2019 и нажмите ОК,

если нет, нажмите ОK без редактирования

Установка High Available архитектуры Корпоративного сервера 2024 на РедОС 7.3

5.3.14. Настройка https

Установка High Available архитектуры Корпоративного сервера 2024 на РедОС 7.3

Проверьте наличие сертификата и ключа в каталоге ssl из пункта 5.2.4.

  • Выберите Да

5.3.15. Укажите домен

Пример test3.s7-office.site

Необходимо указать домен, в котором у Вас созданы записи

Например, при домене r7.ru, необходимо создать запись *.test3.s7-oiffice.site. Пример записи в Selectel ниже c указанием proxy nginx из пункта

Установка High Available архитектуры Корпоративного сервера 2024 на РедОС 7.3

5.3.16. Префикс Р7-Диск

Установка High Available архитектуры Корпоративного сервера 2024 на РедОС 7.3

Укажите имя, которое будет открываться в браузере для веб р7-Диска

Например, если Вы хотите, чтобы открылся Р7-Диск по адресу cddisk.test3.s7-oiffice.site, то указать нужно именно cddisk, без указания домена.

5.3.17. Префикс Р7-Админ

Установка High Available архитектуры Корпоративного сервера 2024 на РедОС 7.3

Укажите имя, которое будет открываться в браузере для веб админ панели.

Например, если Вы хотите, чтобы открылся Р7-Админ по адресу admin.test3.s7-oiffice.site, то указать нужно именно admin, без указания домена.

5.3.18. Префикс Р7-Почта

Установка High Available архитектуры Корпоративного сервера 2024 на РедОС 7.3

Укажите имя, которое будет открываться в браузере для веб календаря.

Например, если Вы хотите, чтобы открылся Р7-Календарь по адресу mail.test3.s7-oiffice.site, то указать нужно именно calendar, без указания домена.

5.3.19. Префикс Р7-Календарь

Установка High Available архитектуры Корпоративного сервера 2024 на РедОС 7.3

Укажите имя, которое будет открываться в браузере для веб календаря.

Например, если Вы хотите, чтобы открылся Р7-Календарь по адресу calendar.test3.s7-oiffice.site, то указать нужно именно calendar, без указания домена.

5.3.20. Префикс Р7-Проекты

Установка High Available архитектуры Корпоративного сервера 2024 на РедОС 7.3

Укажите имя, которое будет открываться в браузере для веб календаря.

Например, если Вы хотите, чтобы открылся Р7-Календарь по адресу projects.test3.s7-oiffice.site, то указать нужно именно calendar, без указания домена.

5.3.21. Перезагрузите систему

Для корректной работы Р7-Диска, требуется перезагрузка.

Установка High Available архитектуры Корпоративного сервера 2024 на РедОС 7.3

  • Введите Да;
  • Введите Нет, если требуется Вам выполнить дополнительные действия до перезагрузки.

Без перезагрузки Р7-Диск работать не будет

5.4. Включение rabbitmq для КС24 для проверки работы кластеров

/opt/r7-office/Api/appsettings.json
/opt/r7-office/Sso.Api/appsettings.json
/opt/r7-office/Processing/appsettings.json

Укажите адрес nginx балансера для сервисов

"rabbitMq": {
"host": "192.168.27.83", - укажите haproxy
"username": "r7office", - ранее созданные данные при развертке rabbitmq
"password": "r7office",
"timeout": 10
},

6. Продолжение настройки внешнего nginx балансер (внешний)

6.1. Конфигурации:

Пример основной конфигурации nginx — /etc/nginx/nginx.conf

user nginx;
worker_processes auto;
error_log /var/log/nginx/error.log notice;
pid /run/nginx.pid;
 
# Load dynamic modules. See /usr/share/doc/nginx/README.dynamic.
include /usr/share/nginx/modules/*.conf;
 
worker_cpu_affinity     auto;
worker_priority         -2;
worker_rlimit_nofile 30000;
pcre_jit        on;
 
events {
    multi_accept on;
        worker_connections      8192;
        use                     epoll;
}
 
http {
    include /etc/nginx/mime.types;
    default_type application/octet-stream;
     
    log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
                      '$status $body_bytes_sent "$http_referer" '
                      '"$http_user_agent" "$http_x_forwarded_for"';
 
    access_log  /var/log/nginx/access.log  main;
 
    sendfile            on;
    tcp_nopush          on;
    tcp_nodelay         on;
    keepalive_timeout   300;
    types_hash_max_size 4096;
    server_tokens off;
    keepalive_requests              10000;
    aio                             on;
    reset_timedout_connection       on;
    send_timeout                    1200;
    client_body_timeout             30;
    client_header_timeout           30;
    server_names_hash_max_size      4096;
     
        ##
        # Proxy Settings
        ##
 
        proxy_connect_timeout           300;
        proxy_send_timeout              300;
        proxy_read_timeout              300;
        proxy_temp_file_write_size      64k;
        proxy_buffer_size               4k;
        proxy_buffers                   32 16k;
        proxy_busy_buffers_size         32k;
        proxy_temp_path                 /var/lib/nginx/tmp/proxy;
        proxy_cache_valid               1h;
        proxy_cache_key                 $scheme$proxy_host$request_uri$cookie_US;
        proxy_cache_path                /var/lib/nginx/proxy  levels=1:2      inactive=2h     keys_zone=onee:10m  max_size=100m;
        #fastcgi_cache_path             /var/lib/nginx/fastcgi levels=1:2      inactive=2h     keys_zone=two:10m  max_size=100m;
    ##
    # Open file Settings
    ##
 
        open_file_cache                 max=100000 inactive=60s;
        open_file_cache_valid           30s;
        open_file_cache_min_uses        2;
        open_file_cache_errors          on;
 
        ##
        # Gzip Settings
        ##
 
        gzip                            on;
        gzip_min_length                 1000;
        gzip_proxied                    expired no-cache no-store private auth;
        gzip_types                      text/plain text/css text/javascript application/javascript application/x-javascript text/xml application/xml application/xml+rss application/json;
        gzip_disable                    "msie6";
        gzip_static                     on;
        gzip_proxied                    any;
        gzip_comp_level                 7;
        gzip_vary                       on;
 
        ssl_buffer_size 16k;
        http2_chunk_size 8k;
 
        resolver 77.88.8.8 valid=300s ipv6=off;
        resolver_timeout 5s;
 
        ##
        # Header Settings
        ##
 
        add_header X-XSS-Protection "1; mode=block";
        add_header X-Content-Type-Options nosniff;
        add_header Strict-Transport-Security 'max-age=31536000; includeSubDomains; preload';
        proxy_hide_header X-Powered-By;
     
    # Load modular configuration files from the /etc/nginx/conf.d directory.
    # See http://nginx.org/en/docs/ngx_core_module.html#include
    # for more information.
    include /etc/nginx/conf.d/*.conf;

Создайте конфигурации в /etc/nginx/conf.d/

admin.conf

server {
        listen 80;
        listen [::]:80;
        listen 443 ssl http2;
 
        if ($scheme != "https")
        {
                return 301 https://$host$request_uri;
        }
 
        root /var/www/r7-office/admin;
        index index.html;
 
        server_name admin.test3.s7-office.site; #укажите доменное имя модуля админ
        server_tokens off;
 
        client_max_body_size 25M;
 
        ssl_protocols TLSv1.2 TLSv1.3;
        ssl_certificate /etc/nginx/ssl/test3.s7-office.site.crt; #укажите путь к сертификату
        ssl_certificate_key /etc/nginx/ssl/test3.s7-office.site.key; #укажите путь к ключу сертификата
        ssl_ciphers HIGH:!aNULL:!MD5;
         
        location /saml2 {
            proxy_set_header host $host;
            proxy_set_header X-real-ip $remote_addr;
            proxy_set_header X-forward-for $proxy_add_x_forwarded_for;
            proxy_set_header X-Module Admin;
            proxy_pass http://0.0.0.0:38034/saml2;
        }
         
        location /api {
            proxy_pass http://backend_api/api;
            proxy_set_header X-real-ip $remote_addr;
            proxy_set_header X-forward-for $proxy_add_x_forwarded_for;
            proxy_set_header X-Module Admin;
        }
         
        location /web-apps {
            proxy_pass http://0.0.0.0:8083/web-apps;
        }
         
        location / {
                try_files $uri $uri/ /index.html;
        }
}

calendar.conf

server {
        listen 80;
        listen [::]:80;
        listen 443 ssl http2;
 
        if ($scheme != "https")
        {
                return 301 https://$host$request_uri;
        }
 
        root /var/www/r7-office/calendar;
        index index.html;
 
        server_name calendar.test3.s7-office.site; #укажите доменное имя модуля календарь
        server_tokens off;
 
        client_max_body_size 25M;
 
        ssl_protocols TLSv1.2 TLSv1.3;
        ssl_certificate /etc/nginx/ssl/test3.s7-office.site.crt; #укажите путь к сертификату
        ssl_certificate_key /etc/nginx/ssl/test3.s7-office.site.key; #укажите путь к ключу сертификата
        ssl_ciphers HIGH:!aNULL:!MD5;
 
        location /api {
            proxy_pass http://backend_api/api;
        }
 
        location / {
                try_files $uri $uri/ /index.html;
        }
}

cddisk.conf

server {
        listen 80;
        listen [::]:80;
        listen 443 ssl http2;
 
        if ($scheme != "https")
        {
                return 301 https://$host$request_uri;
        }
 
        root /var/www/r7-office/cddisk;
        index index.html;
 
        server_name cddisk.test3.s7-office.site; #укажите доменное имя модуля главной страницы приложения
        server_tokens off;
 
        client_max_body_size 1024M;
 
        ssl_protocols TLSv1.2 TLSv1.3;
        ssl_certificate /etc/nginx/ssl/test3.s7-office.site.crt; #укажите путь к сертификату
        ssl_certificate_key /etc/nginx/ssl/test3.s7-office.site.key; #укажите путь к ключу сертификата
        ssl_ciphers HIGH:!aNULL:!MD5;
 
        location /api {
            proxy_pass http://backend_api/api;
        }
 
        location / {
                try_files $uri $uri/ /index.html;
        }
}

cdmail.conf

server {
        listen 80;
        listen [::]:80;
        listen 443 ssl http2;
 
        if ($scheme != "https")
        {
                return 301 https://$host$request_uri;
        }
 
        root /var/www/r7-office/cdmail;
        index index.html;
 
        server_name cdmail.test3.s7-office.site; #укажите доменное имя модуля почта
        server_tokens off;
 
        client_max_body_size 25M;
 
        ssl_protocols TLSv1.2 TLSv1.3;
        ssl_certificate /etc/nginx/ssl/test3.s7-office.site.crt; #укажите путь к сертификату
        ssl_certificate_key /etc/nginx/ssl/test3.s7-office.site.key; #укажите путь к ключу сертификата
        ssl_ciphers HIGH:!aNULL:!MD5;
 
        location /api {
            proxy_pass http://backend_api/api;
        }
 
        location / {
                try_files $uri $uri/ /index.html;
        }
}

contacts.conf

server {
        listen 80;
        listen [::]:80;
        listen 443 ssl http2;
 
        if ($scheme != "https")
        {
                return 301 https://$host$request_uri;
        }
 
        root /var/www/r7-office/contacts;
        index index.html;
 
        server_name contacts.test3.s7-office.site; #укажите доменное имя модуля контакты
        server_tokens off;
 
        client_max_body_size 32M;
 
        ssl_protocols TLSv1.2 TLSv1.3;
        ssl_certificate /etc/nginx/ssl/test3.s7-office.site.crt; #укажите путь к сертификату
        ssl_certificate_key /etc/nginx/ssl/test3.s7-office.site.key; #укажите путь к ключу сертификата
        ssl_ciphers HIGH:!aNULL:!MD5;
 
        location /api {
            proxy_pass http://backend_api/api;
        }
 
        location / {
            try_files $uri $uri/ /index.html;
        }
}

projects.conf

server {
        listen 80;
        listen [::]:80;
        listen 443 ssl http2;
 
        if ($scheme != "https")
        {
                return 301 https://$host$request_uri;
        }
 
        root /var/www/r7-office/projects;
        index index.html;
 
        server_name projects.test3.s7-office.site; #укажите доменное имя модуля проекты
        server_tokens off;
 
        client_max_body_size 32M;
 
        ssl_protocols TLSv1.2 TLSv1.3;
        ssl_certificate /etc/nginx/ssl/test3.s7-office.site.crt; #укажите путь к сертификату
        ssl_certificate_key /etc/nginx/ssl/test3.s7-office.site.key; #укажите путь к ключу сертификата
        ssl_ciphers HIGH:!aNULL:!MD5;
 
        location /api {
            proxy_pass http://backend_api/api;
        }
 
        location / {
            try_files $uri $uri/ /index.html;
        }
}

r7-ds.conf

upstream docservice { #укажите все ноды серверов документов для переключения в режиме round robin
  server 192.168.26.65 max_fails=3 fail_timeout=30s; #max_fails Количество неудачных попыток подключения к серверу, после которого сервер будет считаться недоступным
  server 192.168.26.133 max_fails=3 fail_timeout=30s; #fail_timeout Время, в течение которого сервер будет считаться недоступным после достижения max_fails
}
  
map $http_host $this_host {
  "" $host;
  default $http_host;
}
  
map $http_x_forwarded_proto $the_scheme {
  default $http_x_forwarded_proto;
  "" $scheme;
}
  
map $http_x_forwarded_host $the_host {
  default $http_x_forwarded_host;
  "" $this_host;
}
  
map $http_upgrade $proxy_connection {
  default upgrade;
  "" close;
}
  
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection $proxy_connection;
proxy_set_header X-Forwarded-Host $the_host;
proxy_set_header X-Forwarded-Proto $the_scheme;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
  
## Normal HTTP host
server {
  listen 0.0.0.0:80;
  server_name ds-cluster.test3.s7-office.site; #укажите доменное общее имя кластера серверов документов
  server_tokens off;
  
## Redirects all traffic to the HTTPS host
  return 301 https://$server_name:443$request_uri;
}
  
server {
  listen 0.0.0.0:443 ssl http2;
  server_name ds-cluster.test3.s7-office.site; #укажите доменное общее имя кластера серверов документов
  server_tokens off;
  
  ssl_certificate /etc/nginx/ssl/test3.s7-office.site.crt; #укажите путь к сертификату
  ssl_certificate_key /etc/nginx/ssl/test3.s7-office.site.key; #укажите путь к ключу сертификата
  
  ssl_ciphers "EECDH+AESGCM:EDH+AESGCM:AES256+EECDH:AES256+EDH";
  
  ssl_protocols TLSv1 TLSv1.1 TLSv1.2 TLSv1.3;
  ssl_session_cache builtin:1000 shared:SSL:10m;
  
  ssl_prefer_server_ciphers on;
  
  add_header Strict-Transport-Security "max-age=31536000; includeSubDomains" always;
  add_header X-Frame-Options SAMEORIGIN;
  add_header X-Content-Type-Options nosniff;
   
  location / {
  proxy_pass http://docservice;
  proxy_http_version 1.1;
  proxy_next_upstream error timeout http_502; #Определяет, в каких случаях Nginx будет перенаправлять запрос на следующий сервер в upstream
  proxy_next_upstream_timeout 2s; #Ограничивает время, в течение которого Nginx будет пытаться перенаправить запрос на другой сервер
  proxy_next_upstream_tries 3; #Ограничивает количество попыток перенаправления запроса на другой сервер
  }
}
}

regfs.conf

server {
  listen 7777;
 
location / {
  proxy_pass http://backend_reg;
  proxy_http_version 1.1;
  }
}

upstream.conf

upstream backend_api { #укажите адреса нод вынесенных api
        server 192.168.27.73:38033;
        server 192.168.27.143:38033;
}
upstream backend_reg{ #укажите адреса нод вынесенных registry+filestorage
        server 192.168.27.153:7777;
        server 192.168.27.109:7777;
}

6.2. Перенесите с КС следующие каталоги

/var/www/r7-office/admin

/var/www/r7-office/calendar

/var/www/r7-office/cddisk

/var/www/r7-office/cdmail

/var/www/r7-office/contacts

/var/www/r7-office/projects

6.3. Опциональная развертка дополнительных нод Nginx

Пример реализации нескольких нод Nginx Пример реализации внешнего балансировщика Nginx для архитектуры High Available

7. Вынос processing

по ссылке https://support.r7-office.ru/corporate-server2024/settings_cs-r7disk/vynos-servisa-processing-red-os-beta/

При включенной службе firewalld необходимо добавить порт 7777 в исключения для внутреннего интерфейса.

7.1. На установленном КС

7.1.1 Заархивируйте необходимые файлы и директории

tar czvf processing.tar.gz --selinux /opt/r7-office/Processing /var/log/r7-office/CDDisk/R7.Storage.Server.Processing.Host /var/log/r7-office/CDDisk/Processing /etc/supervisord.conf /etc/supervisord.d /var/r7-office/filestorage_temp_proc

7.1.2. Узнайте uid и gid пользователя cddisk

id cddisk

7.2. На ВМ с ролью Processing

7.2.1. Настройка NFS

Укажите в /etc/fstab

192.168.26.247:/mnt/disk/filestorage_temp_proc /var/r7-office/filestorage_temp_proc nfs defaults 0 2

где ip указывается адрес nfs

Примонтируйте каталог

mount -a

7.2.2. Перенесите архив с КС и распакуйте

tar xzvf processing.tar.gz --selinux -C /

7.2.3. Произведите установку на ВМ роли Processing

sudo dnf install dotnet-sdk-3.1 postgresql-odbc supervisor -y

7.2.4. Создайте группу и пользователя

groupadd -g 972 cddisk
useradd -u 972 -g 972 cddisk

7.2.5. Удалите лишние конфигурационные файлы

rm -f /etc/supervisord.d/{cddisk-api,cddisk-filestorage,cddisk-registry,cddisk-ssoapi,cddisk-searchapi}.ini

7.2.6. Отредактируйте файл

/etc/supervisord.d/cddisk.ini

Приведите к виду

[group:cddisk]
programs=processing

7.2.7. Отредактируйте файл

/opt/r7-office/Processing/appsettings.json

Хост с Registry

Укажите ip с внешним прокси сервером

"serviceRegistry": {
  "address": "http://192.168.27.35:7777"
},

Укажите ip HAProxy и корректные данные по доступу к БД и Rabbitmq из пункта

"ConnectionStrings": {
    "R7StorageServerUserActions": "Database=cddisk;Username=cddisk;Password=cddisk;Host=192.168.27.83;Port=5000;",
    "R7StorageServer": "Database=cddisk;Username=cddisk;Password=cddisk;Host=192.168.27.83;Port=5000;",
    "CommunityRepository": "Server=localhost;UserID=root;Password=test;Database=r7-office",
    "Payments": "Database=Payments;Username=cddisk;Password=cddisk;Host=192.168.27.83;Port=5000;",
    "GeoNames": "Database=GeoNames;Username=cddisk;Password=cddisk;Host=192.168.27.83;Port=5000;"
  },
"DbType": "postgre",
  "rabbitMq": {
    "host": "192.168.27.83",
    "username": "r7office",
    "password": "r7office",
    "timeout": 10
  }

7.2.8. Перезапустите сервис и добавьте в автозагрузку

systemctl enable supervisord.service

systemctl restart supervisord.service

7.2.9. Повторите действия для последующих нод Processing

8. Вынос search

по ссылке https://support.r7-office.ru/corporate-server2024/settings_cs-r7disk/vynos-servisa-search-red-os-beta/

При включенной службе firewalld необходимо добавить порт 2664.

8.1. На установленном КС

8.1.1. Заархивируйте необходимые файлы и директории

tar czvf search.tar.gz —selinux /opt/r7-office/SearchApi /var/log/r7-office/CDDisk/SearchApi /var/log/r7-office/CDDisk/Bsa.Search.Api.Host /etc/supervisord.d /var/r7-office/searchindex

8.1.2. Узнайте uid и gid пользователя cddisk

id cddisk

8.2. На ВМ с ролью Search

8.2.1. Настройка NFS

Укажите в /etc/fstab

192.168.26.247:/mnt/search /var/r7-office/searchindex nfs defaults 0 2

где ip указывается адрес nfs

Примонтируйте каталог

mount -a

Перенесите архив с КС и распакуйте

tar xzvf search.tar.gz --selinux -C /

8.2.2. Произведите установку

sudo dnf install dotnet-sdk-3.1 postgresql-odbc supervisor -y

8.2.3. Создайте группу и пользователя

groupadd -g 972 cddisk
useradd -u 972 -g 972 cddisk

8.2.4. Удалите лишние конфигурационные файлы

rm -f /etc/supervisord.d/{cddisk-api,cddisk-filestorage,cddisk-registry,cddisk-ssoapi,cddisk-processing,cddisk-ssoapi}.ini

8.2.5. Отредактируйте файл

/etc/supervisord.d/cddisk.ini

Приведите к виду

[group:cddisk]
programs=searchapi

8.2.6. Перезапустите сервис и добавьте в автозагрузку

systemctl enable supervisord.service

systemctl restart supervisord.service

8.2.7. Повторите действия для последующих нод Search

9. Вынос api

по ссылке https://support.r7-office.ru/corporate-server2024/settings_cs-r7disk/vynos-servisa-api-red-os-beta/

При включенной службе firewalld необходимо добавить порт 38033 и 38034.

9.1. На установленном КС

9.1.1. Заархивируйте необходимые файлы и директории

tar czvf api.tar.gz --selinux /opt/r7-office/Api/ /opt/r7-office/Sso.Api /var/log/r7-office/CDDisk/R7.Storage.Server.Api.Host /var/log/r7-office/CDDisk/R7.Sso.Api.Host /var/log/r7-office/CDDisk/Api /var/log/r7-office/CDDisk/R7.Sso.Api.Host /etc/supervisord.conf /etc/supervisord.d /var/r7-office/filestorage_temp

9.1.2. Узнайте uid и gid пользователя cddisk

id cddisk

9.2. На ВМ с ролью API

9.2.1. Настройка NFS

Укажите в /etc/fstab

192.168.26.247:/mnt/disk/filestorage_temp /var/r7-office/filestorage_temp nfs defaults 0 2

где ip указывается адрес nfs

Примонтируйте каталог

mount -a

9.2.2. Перенесите архив с КС и распакуйте

tar xzvf api.tar.gz --selinux -C /

9.2.3. Произведите установку на ВМ роли Processing

sudo dnf install dotnet-sdk-3.1 postgresql-odbc supervisor -y

9.2.4. Создайте группу и пользователя

groupadd -g 972 cddisk
useradd -u 972 -g 972 cddisk

9.2.5. Удалите лишние конфигурационные файлы

rm -f /etc/supervisord.d/{cddisk-processing,cddisk-filestorage,cddisk-registry,cddisk-searchapi}.ini

9.2.6. Отредактируйте файл

/etc/supervisord.d/cddisk.ini

Приведите к виду

[group:cddisk]
programs=api,apisso

9.2.7. Отредактируйте файл

/opt/r7-office/Api/appsettings.json

Хост с Registry

Укажите ip с внешним прокси сервером

"serviceRegistry": {
  "address": "http://192.168.27.35:7777"
},

Укажите ip HAProxy и корректные данные по доступу к БД и Rabbitmq из пункта

"ConnectionStrings": {
    "R7StorageServerUserActions": "Database=cddisk;Username=cddisk;Password=cddisk;Host=192.168.27.83;Port=5000;",
    "R7StorageServer": "Database=cddisk;Username=cddisk;Password=cddisk;Host=192.168.27.83;Port=5000;",
    "CommunityRepository": "Server=localhost;UserID=root;Password=test;Database=r7-office",
    "Payments": "Database=Payments;Username=cddisk;Password=cddisk;Host=192.168.27.83;Port=5000;",
    "GeoNames": "Database=GeoNames;Username=cddisk;Password=cddisk;Host=192.168.27.83;Port=5000;"
  },
"DbType": "postgre",
  "rabbitMq": {
    "host": "192.168.27.83",
    "username": "r7office",
    "password": "r7office",
    "timeout": 10
  }

9.2.8. Отредактируйте файл

/opt/r7-office/Sso.Api/appsettings.json

Хост с Registry

Укажите ip с внешним прокси сервером

"serviceRegistry": {
  "address": "http://192.168.27.35:7777"
},

Укажите ip HAProxy и корректные данные по доступу к БД и Rabbitmq из пункта

"ConnectionStrings": {
    "R7StorageServerUserActions": "Database=cddisk;Username=cddisk;Password=cddisk;Host=192.168.27.83;Port=5000;",
    "R7StorageServer": "Database=cddisk;Username=cddisk;Password=cddisk;Host=192.168.27.83;Port=5000;",
    "CommunityRepository": "Server=localhost;UserID=root;Password=test;Database=r7-office",
    "Payments": "Database=Payments;Username=cddisk;Password=cddisk;Host=192.168.27.83;Port=5000;",
    "GeoNames": "Database=GeoNames;Username=cddisk;Password=cddisk;Host=192.168.27.83;Port=5000;"
  },
"keyPhraze": "3_Dd1d05fnaddf",
  "rabbitMq": {
    "host": "192.168.27.83",
    "username": "r7office",
    "password": "r7office",
    "timeout": 10
  }

9.2.9. Перезапустите сервис и добавьте в автозагрузку

systemctl enable supervisord.service

systemctl restart supervisord.service
supervisorctl restart all

9.2.10. Повторите действия для последующих нод API

10. Вынос registry+filestorage

При включенной службе firewalld необходимо добавить порт 11581 и 11580.

10.1. На установленном КС

10.1.1. Заархивируйте необходимые файлы и директории

tar czvf regfs.tar.gz --selinux /opt/r7-office/FileStorage /opt/r7-office/Service.Registry /var/log/r7-office/CDDisk/FileStorage /var/log/r7-office/CDDisk/Service.Registry /etc/supervisord.conf /etc/supervisord.d /var/r7-office/filestorage

10.1.2. Узнайте uid и gid пользователя cddisk

id cddisk

10.2. На ВМ с ролью Registry+Filestorage

10.2.1. Настройка NFS

Укажите в /etc/fstab

192.168.26.247:/mnt/disk/filestorage /var/r7-office/filestorage nfs defaults 0 2

где ip указывается адрес nfs

Примонтируйте каталог

mount -a

10.2.2. Перенесите архив с КС и распакуйте

tar xzvf regfs.tar.gz --selinux -C /

10.2.3. Произведите установку

sudo dnf install dotnet-sdk-3.1 postgresql-odbc supervisor -y

10.2.4. Создайте группу и пользователя

groupadd -g 972 cddisk
useradd -u 972 -g 972 cddisk

10.2.5. Удалите лишние конфигурационные файлы

rm -f /etc/supervisord.d/{cddisk-processing,cddisk-searchapi,cddisk-ssoapi,cddisk-api}.ini

10.2.6. Отредактируйте файл

/etc/supervisord.d/cddisk.ini

Приведите к виду

[group:cddisk]
programs=filestorage,registry

10.2.7. Отредактируйте файл

/opt/r7-office/Service.Registry/appsettings.json

"Clients": [
    {
      "id": "IFileStorageService",
      "host": "http://192.168.27.153:11580/"
    },
    {
      "id": "IFileStorageRestService",
      "host": "http://192.168.27.153:11580/"
    },
    {
      "id": "IFolderStorageRestService",
      "host": "http://192.168.27.153:11580/"
    },
 
    { "id": "ITcpFolderStorageService",
      "Address": "192.168.27.153",
      "Port": "11581"
    },
    { "id": "ITcpFileStorageService",
      "Address": "192.168.27.153",
      "Port": "11581"
    },
    {
      "id": "ISearchService",
      "host": "http://192.168.26.187:2664"
    },
    {
      "id": "ISearchService",
      "host": "http://192.168.26.36:2664"
    }
  ],
  "ServiceRegistry": {
    "Host": "http://192.168.27.153:7777"
  }
}

, где

  • 192.168.27.153 — адрес текущего сервера
  • 192.168.26.187 и 192.168.26.36 — адреса нод Search

10.2.8. Отредактируйте файл

/opt/r7-office/FileStorage/appsettings.json

Укажите адрес текущего сервера

"FileStorage": {
    "Host": "http://192.168.27.153:11580"
  }

10.2.9. Повторите действия для других нод Registry+filestorage

11. Проверка работы сервиса

Перейдите по dns имени внешнего nginx (настройка производилась в пункте 6), используя имя cddisk.test3.s7-office.site.

По умолчанию логин и пароль superadmin

Перейдите по ссылкам из стартовой страницы для проверки работы приложения.

Была ли полезна статья?
Позвольте нам стать лучше