• Post category:Настройки
  • Запись изменена:18.07.2025

Содержание

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

0. Схема

Вынос сервиса Api. Astra Linux 1.7. beta

0.1. Описание

Сервис API получает запросы пользователей. Долгие запросы отправляются в брокер очередей. Быстрые запросы к данным выполняются напрямую в БД или в сервисе Поиска. Также выполняется запросы imap к почтовому серверу.

1. Выполните установку Корпоративного портала 2024

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

# Добавляем службы:
sudo firewall-cmd --permanent --zone=public --add-service=http
sudo firewall-cmd --permanent --zone=public --add-service=https
  
# Перезапускаем службу firewalld:
sudo firewall-cmd --reload
  
# Проверяем правила для зоны public:
sudo firewall-cmd --zone=public --list-all

Установить согласно инструкции.

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

2.1. Установите ключ репозитория

sudo wget -O - https://packages.microsoft.com/keys/microsoft.asc | sudo gpg --dearmor | sudo tee /etc/apt/trusted.gpg.d/microsoft.asc.gpg > /dev/null

2.2. Добавьте репозиторий

sudo wget https://packages.microsoft.com/config/debian/10/prod.list -O /etc/apt/sources.list.d/microsoft-prod.list && sudo apt update

2.3. Установите dotnet

sudo wget https://packages.microsoft.com/debian/10/prod/pool/main/d/dotnet-host/dotnet-host-7.0.3-x64.deb && sudo apt -y install ./dotnet-host*.deb && sudo rm ./dotnet-host*.deb

2.4. Установите остальные пакеты

sudo apt install supervisor aspnetcore-runtime-3.1 aspnetcore-targeting-pack-3.1 autoconf automake autotools-dev binutils binutils-common binutils-x86-64-linux-gnu dotnet-apphost-pack-3.1 dotnet-hostfxr-3.1 dotnet-runtime-3.1 dotnet-runtime-deps-3.1 dotnet-sdk-3.1 dotnet-targeting-pack-3.1 libbinutils libltdl-dev libodbc1 m4 netstandard-targeting-pack-2.1 odbcinst odbcinst1debian2 unixodbc-dev

3. На ВМ с КП24

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

# Откройте
# Доступ к БД
sudo firewall-cmd --permanent --zone=public --add-service=postgresql
# Доступ к очереди
sudo firewall-cmd --permanent --zone=public --add-service=amqp
# Доступ к сервису registry
sudo firewall-cmd --permanent --zone=public --add-port=7777/tcp
# Доступ к сервису search
sudo firewall-cmd --permanent --zone=public --add-port=2664/tcp
# Доступ к сервису хранения
sudo firewall-cmd --permanent --zone=public --add-port=11581/tcp
sudo firewall-cmd --permanent --zone=public --add-port=11580/tcp
 
# Перезапустите службу firewalld
sudo firewall-cmd --reload
  
# Проверьте правила для зоны public
sudo firewall-cmd --zone=public --list-all

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

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

3.2. Перенесите удобным Вам способом на ВМ с ролью API

Например, через scp:

scp api.tar.gz ipВМapi:/root/

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

id cddisk

Вывод:

id cddisk
uid=120(cddisk) gid=132(cddisk) группы=132(cddisk)

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

rm /etc/supervisor/conf.d/cddisk-api.conf

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

vi /etc/supervisor/conf.d/cddisk.conf

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

[group:cddisk]
programs=processing,filestorage,searchapi,registry,apisso

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

systemctl restart supervisor.service
supervisorctl restart all

3.6. Открыть доступ к RabbitMQ

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

nano /etc/rabbitmq/rabbitmq.conf

Приведите в нём параметр к виду (если файла или их нет, то создайте):

listeners.tcp.default = 127.0.0.1:5672
listeners.tcp.other_ip = 192.168.27.77:5672

Где:

  • listeners.tcp.default — слушается интерфейс 127.0.0.1 на порту 5672;
  • listeners.tcp.other_ip — слушается интерфейс 192.168.27.77 на порту 5672.

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

systemctl restart rabbitmq-server
3.6.2.1. Проверьте, что все интерфейсы слушаются
netstat -tulpan | grep 5672

Вывод:

netstat -tulpan | grep 5672
tcp 0 0 127.0.0.1:5672 0.0.0.0:* LISTEN 15118/beam.smp
tcp 0 0 192.168.27.77:5672 0.0.0.0:* LISTEN 15118/beam.smp

3.6.3. Создайте хост и пользователя

3.6.3.1. Создайте пользователя для Процессинга
rabbitmqctl add_user api api

Где:

  • api — имя пользователя;
  • api — пароль пользователя.
3.6.3.2. Выдайте права пользователю
rabbitmqctl set_permissions -p / api ".*" ".*" ".*"
3.6.3.3. Создайте хост

С данного хоста будет разрешено подключение:

rabbitmqctl add_vhost 192.168.25.234

Где:

  • 192.168.25.234 — IP-адрес сервера с API. Если таких ВМ несколько, то выполните для каждого IP-адреса.
3.6.3.4. Дайте права для ВМ с Процессингом
rabbitmqctl set_permissions -p 192.168.25.234 api ".*" ".*" ".*"

Где:

  • 192.168.25.234 — IP-адрес сервера с API. Если таких ВМ несколько, то выполните для каждого IP-адреса;
  • api — имя созданного в п.3.6.3.1 пользователя.

3.7. Настроить доступ к БД

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

vi /etc/postgresql/11/main/pg_hba.conf

Добавьте следующую строку:

host cddisk cddisk 192.168.25.234/32 md5

Где:

  • cddisk — имя базы данных;
  • cddisk — имя пользователя, с доступом к БД cddisk;
  • 192.168.25.234/32 — IP-адрес, с которого разрешено подключение;
  • md5 — метод авторизации.

Если ВМ с API несколько, то добавьте строку для каждой.

3.7.2. Отредактируйте файл postgresql.conf

nano /etc/postgresql/11/main/postgresql.conf

Приведите следующие:

#listen_addresses = 'localhost'
#port = 5432

Параметры к виду:

listen_addresses = 'localhost,192.168.27.77'
port = 5432

Где:

  • listen_addresses — на каких интерфейсах слушает PostgreSQL подключения;
  • port — порт, который слушает сервис PostgreSQL.

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

systemctl restart postgresql

3.8. Отредактируйте файл сервиса Registry

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

Приведите параметры к виду:

},
"AllowedHosts": "*",
"Clients": [
  {
    "id": "IFileStorageService",
    "host": "http://192.168.27.77:11580/"
  },
  {
    "id": "IFileStorageRestService",
    "host": "http://192.168.27.77:11580/"
  },
  {
    "id": "IFolderStorageRestService",
    "host": "http://192.168.27.77:11580/"
  },
 
  { "id": "ITcpFolderStorageService",
    "Address": "192.168.27.77",
    "Port": "11581"
  },
  { "id": "ITcpFileStorageService",
    "Address": "192.168.27.77",
    "Port": "11581"
  },
  {
    "id": "ISearchService",
    "host": "http://192.168.27.77:2664"
  }
],
"ServiceRegistry": {
  "Host": "http://+:7777"
}

Где:

  • 192.168.27.77 — IP-адрес ВМ, где находится сервис filestorage и сервис search. Если эти ВМ являются разными, то указать верные значения.

3.9. Отредактируйте appsettings файл сервиса Filestorage

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

Приведите параметры к виду:

},
"AllowedHosts": "*",
"FileStorage": {
  "Host": "http://+:11580"
}

3.10. Отредактируйте filestorage файл сервиса Filestorage

vi /opt/r7-office/FileStorage/filestorage.json
Приведите параметры к виду
"Connection": {
  "Tcp": {
    "Address": "0.0.0.0",
    "Port": 11581
  }

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

supervisorctl restart all

3.12. Отредактируйте файлы Nginx

3.12.1. Добавьте upstream

В файле:

/etc/nginx/conf.d/cddisk.conf

Добавьте блок:

upstream backend_api {
        server 192.168.27.226:38033;
}

Где:

  • 192.168.27.226 — IP-адрес сервера с API;
  • 38033 — порт, который слушает сервис API.

Если серверов несколько, то продублируйте строки в данном блоке, указав IP-адрес второго сервера, например:

upstream backend_api {
        server 192.168.27.226:38033;
        server 192.168.27.171:38033;
}

3.12.2. Измените файлы сайтов

/etc/nginx/sites-available/admin
/etc/nginx/sites-available/calendar
/etc/nginx/sites-available/cddisk
/etc/nginx/sites-available/cdmail
3.12.2.1. Исправьте location/api

Исходный:

location /api {
    proxy_pass http://localhost:38033/api;
}

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

location /api {
    proxy_pass http://backend_api/api;
}

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

nginx -t

3.13.4. Перезапустите Nginx

systemctl restart nginx

4. На ВМ с Api

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

# Добавляем службы:
sudo firewall-cmd --permanent --zone=public --add-port=38033/tcp
  
# Перезапускаем службу firewalld:
sudo firewall-cmd --reload
  
# Проверяем правила для зоны public:
sudo firewall-cmd --zone=public --list-all

4.1. Создание группы и пользователя cddisk

Из п.3.3 Вы узнали uid и gid пользователя.

4.1.1. Создайте группу

groupadd -g 132 cddisk

Где:

  • 132 — id группы;
  • cddisk — имя группы.

В случаи если данный id уже занят, можно поменять командой groupmod -g <свободный_id> -o <имя_группы>.

4.1.2. Создайте пользователя

useradd -u 120 -g 132 cddisk

Где:

  • 120 — id пользователя;
  • 132 — id группы;
  • cddisk — имя пользователя.

В случаи если данный id уже занят, можно поменять командой usermod -u <свободный_id><пользователь>.

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

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

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

rm /etc/supervisor/conf.d/{cddisk-processing,cddisk-filestorage,cddisk-registry,cddisk-ssoapi,cddisk-searchapi}.conf

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

vi /etc/supervisor/conf.d/cddisk.conf

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

[group:cddisk]
programs=api

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

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

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

4.5.1. Хост с Registry

В данном примере, это IP ВМ с КС 2024, т.к. на нём и сервис Registry.

  • Укажите верный IP-адрес.
"serviceRegistry": {
  "address": "http://192.168.27.77:7777"
},

4.5.2. Хост с БД

В данном примере, это IP ВМ с КС 2024, т.к. СУБД установлена на нём.

  • Укажите верный IP-адрес, т.к. остальные данные не изменяли.
"R7StorageServerUserActions": "Database=cddisk;Username=cddisk;Password=СЕКРЕТ;Host=192.168.27.77;Port=5432;",
"R7StorageServer": "Database=cddisk;Username=cddisk;Password=СЕКРЕТ;Host=192.168.27.77;Port=5432;",

4.5.3. Хост с RabbitMQ

Укажите верный IP-адрес, пользователя и пароль:

"rabbitMq": {
  "host": "192.168.27.77",
  "username": "api",
  "password": "api",
  "timeout": 10
},

В данном примере, это IP-адрес ВМ с КС 2024, а пользователь был создан в п.3.6.3.

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

systemctl restart supervisor.service
supervisorctl restart all

5. Проверьте работу портала

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