Установка и настройка системы под Linux

Инструкция для размещения ADVANTA на сервере с ОС Linux и СУБД PostgreSQL

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

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

Данная инструкция предполагает установку на OC Astra Linux.

Если у вас для системы ADVANTA используется БД MS SQL, развернутая на отдельном сервере под управлением ОС Windows, то инструкцию по подготовке сервера базы данных можно найти здесь.

Если же у вас для системы ADVANTA база данных будет развертываться под ОС Linux, то используется БД PostgreSQL. Перед началом настройки БД PostgreSQL необходимо включить сетевые репозитории и выполнить установку пакетов:

deb cdrom:[OS Astra Linux 1.7.2 1.7_x86-64 DVD ]/ 1.7_x86-64 contrib main non-free
deb https://download.astralinux.ru/astra/stable/1.7_x86-64/repository-main/ 1.7_x86-64 main contrib non-free
deb https://download.astralinux.ru/astra/stable/1.7_x86-64/repository-update/ 1.7_x86-64 main contrib non-free
deb https://download.astralinux.ru/astra/stable/1.7_x86-64/repository-base/ 1.7_x86-64 main contrib non-free
deb https://download.astralinux.ru/astra/stable/1.7_x86-64/repository-extended/ 1.7_x86-64 main contrib non-free
deb https://download.astralinux.ru/astra/stable/1.7_x86-64/repository-extended/ 1.7_x86-64 astra-ce
apt update
apt install postgresql-14

Далее необходимо выполнить первичную настройку СУБД PostgreSQL:

1. Выполнить вход в сессию служебного пользователя postgres:

su - postgres

Работая в сессии служебного пользователя postgres установить пароль администратора СУБД:

psql -c "alter user postgres with password '<указать_пароль>'"
  • Вместо текста <пароль> указать устанавливаемый пароль;
  • Пароль заключается в одинарные кавычки;
  • Вся команда заключается в двойные кавычки.

Завершить работу в сессии служебного пользователя postgres:

exit

2. Наcтроить удаленный доступ к СУБД, для чего в конфигурационном файле /etc/postgresql/14/main/postgresql.conf скорректировать параметр listen_addresses:

listen_addresses = '<указать_ip>'

3. В файле /etc/postgresql/14/main/pg_hba.conf добавить строку:

host    all             all             <указать_подсеть>            scram-sha-256

4. Добавить разрешающее правило файрволла для порта 5432:

ufw allow 5432/tcp

5. Перезагрузить службу postgresql:

systemctl restart postgresql

Далее необходимо создать пустую БД:

su - postgres
psql
CREATE DATABASE "a2nta_db"
WITH
OWNER = postgres
ENCODING = 'UTF8'
LC_COLLATE = 'ru_RU.UTF-8'
LC_CTYPE = 'ru_RU.UTF-8'
TABLESPACE = pg_default
CONNECTION LIMIT = -1;
 
ALTER DATABASE "a2nta_db" SET search_path TO "$user", public, dbo;
 
CREATE EXTENSION IF NOT EXISTS "uuid-ossp";
 
GRANT TEMPORARY, CONNECT ON DATABASE a2nta_db TO PUBLIC;
 
GRANT ALL ON DATABASE a2nta_db TO postgres WITH GRANT OPTION;

После создания базы данных необходимо выполнить восстановление предоставленного в дистрибутиве дампа базы данных в новую созданную БД a2nta_db.

В данный момент по умолчанию дамп БД предоставляется только для MS SQL. Дамп БД для PostgreSQL предоставляется по запросу.

Подробную инструкцию по подготовке сервера базы данных можно найти на отдельной странице Настройка базы данных PostgreSQL.

Для работы сервера приложений ADVANTA необходимо установить в операционной системе следующие стандартные пакеты (из репозитория ОС):

curl gnupg2 ca-certificates lsb-release debian-archive-keyring wget apt-transport-https

Веб-сервер/Прокси (последняя стабильная версия из репозитория ОС или от вендора):

nginx

Среды .Net (варианты установки):

wget http://archive.ubuntu.com/ubuntu/pool/main/libx/libxkbfile/libxkbfile1_1.1.0-1_amd64.deb
apt install ./libxkbfile1_1.1.0-1_amd64.deb
apt install ca-certificates
wget -O - https://packages.microsoft.com/keys/microsoft.asc | gpg --dearmor | tee /etc/apt/trusted.gpg.d/microsoft.asc.gpg > /dev/null
wget https://packages.microsoft.com/config/debian/10/prod.list -O /etc/apt/sources.list.d/microsoft-prod.list
apt update
apt install dotnet-sdk-6.0
Установка среды .Net также может быть выполнена из официальных репозиториев дистрибутива.

Далее необходимо включить сетевые репозитории и выполнить установку пакетов (операции выполняются под учетной записью администратора сервера):

deb cdrom:[OS Astra Linux 1.7.0 1.7_x86-64 DVD ]/ 1.7_x86-64 contrib main non-free
deb https://dl.astralinux.ru/astra/stable/1.7_x86-64/repository-main/     1.7_x86-64 main contrib non-free
deb https://dl.astralinux.ru/astra/stable/1.7_x86-64/repository-update/   1.7_x86-64 main contrib non-free
deb https://dl.astralinux.ru/astra/stable/1.7_x86-64/repository-base/     1.7_x86-64 main contrib non-free
deb https://dl.astralinux.ru/astra/stable/1.7_x86-64/repository-extended/ 1.7_x86-64 main contrib non-free astra-ce backports
apt update
apt install curl
apt install gnupg2
apt install apt-transport-https
apt install nginx
apt install cifs-utils
apt install libldap2-dev
 
apt install libldap-common
 
apt install libldap-2.4-2

В случае, если документы Системы лежат на SMB шаре, отредактировать файл /etc/fstab, добавив в него строку подключения/монтирования:

//192.168.X.X/documents/a2nta /mnt/documents/a2nta cifs guest 0 0

Опционально, можно установить базовые шрифты от MS (для использования в отчетах типа «Электронная таблица») и обновить кэш шрифтов сервера:

apt install ttf-mscorefonts-installer
fc-cache -f -v

Опционально. Для использования авторизации в системе ADVANTA через службу Active Directory необходимо установить библиотеку

apt install libldap2-dev libldap-common libldap-2.4-2
Приведен пример с анонимным подключением. Строка подключения может отличаться в зависимости от политик безопасности организации.

Выполнить настройку https и локального сертификата:

dotnet dev-certs https
dotnet dev-certs https --trust



1. Загрузить и распаковать файлы приложения ADVANTA на сервер.

2. Создать файл конфигурации приложения (образцы находятся по пути: <версия приложения>/SL/config/). Созданный файл конфигурации разместить в основном каталоге приложения: /opt/advanta-app/Advanta/client.config. Пример созданного файла конфигурации client.config:

<?xml version="1.0"?>
<configuration>
  <configSections>
    <section name="unity" type="Microsoft.Practices.Unity.Configuration.UnityConfigurationSection, Microsoft.Practices.Unity.Configuration" />
    <!--<section name="ldapService" type="Config.LDAPConfigurationSection, smcorelib"/>
    <section name="adDomains" type="Config.ADDomainsConfiguration, smcorelib"/>
    <section name="openIdConnect" type="Config.OpenIdConnectConfigurationSection, smcorelib"/>
    <section name="hashiCorpVault" type="Config.HashiCorpVaultConfigurationSection, smcorelib"/>-->
  </configSections>

Теги:

  <connectionStrings>
    <add name="db" providerName="Npgsql" connectionString="User ID=postgres;Password=P@ssw0rd;Host=192.168.16.46;MaxPoolSize=1000;Port=5432;Database=chd-perf-test;EF Template Database=chd-perf-test;Pooling=false" />
    <add name="dbCubes" providerName="Npgsql" connectionString="User ID=postgres;Password=P@ssw0rd;Host=192.168.16.46;MaxPoolSize=1000;Port=5432;Database=chd-perf-test;EF Template Database=chd-perf-test;Pooling=false" />
    <add name="busDb" providerName="Npgsql" connectionString="User ID=postgres;Password=P@ssw0rd;Host=192.168.16.46;MaxPoolSize=1000;Port=5432;Database=chd-perf-test;EF Template Database=chd-perf-test;Pooling=false" />
  </connectionStrings>

Значения:

  • connectionString – строка подключения к базе данных;
  • User – пользователь для базы данных;
  • Password – пароль пользователя.

Теги:

  <appSettings>
    <add key="WebPath" value="https://192.168.16.250:5000" />
    <add key="TimeZone" value="+5" />
    <add key="autologin" value="false" />
    <add key="FilesRootPath" value="C:\SL_Files" />
    <add key="BusTransportType" value="PostgreSql" />
    <add key="NegotiationByEmailTimeout" value="120" />
    <add key="ApplicationId" value="81c341c9da40" />
    <add key="EnableSwagger" value="1" />
    <add key="EnableTestODataEndPoint" value="1" />
    <!--
    <add key="AllowedUrlRedirects" value="https://www.wikipedia.org;https://www.deepl.com/translator" />
    -->
    <!--
    <add key="DocumentsArchiveLifeTimeHours" value="168" />    
    <add key="MaxTotalFileSize" value="2097152000" />
    <add key="MaxFileCount" value="500" />
    <add key="MaxDocumentsArchivingActionCount" value="3" />
    <add key="MaxFullPathLength" value="150" />
    <add key="MinFolderNameLength" value="3" />
    <add key="MinRootFolderNameLength" value="30" />  
 
    <add key="DocumentsArchivingService" value="Remote" />
    -->
    <!--
    <add key="DocumentsArchivingService" value="Local" />
    <add key="Bus_DocumentsArchivingCommandsQueue:NumberOfWorkers" value="1"/>
    <add key="Bus_DocumentsArchivingCommandsQueue:MaxParallelism" value="3"/>
    <add key="ProfilerLogEnable" value="true"/>
    <add key="IsWriteToProfilerLogAllRequests" value="true"/>
    <add key="ProfilerAllLogsSizeLimitMegaBytes" value="10"/>
    <add key="CompressionLevel" value="Optimal|Fastest|NoCompression"/>
    <add key="TemporaryArchiveFlat" value="Memory|FileSystem"/>
    <add key="PathToTemporaryArchiveFlat" value="C:\Temp"/>
    -->
  </appSettings>

Параметр value – это ссылка, которая отображается в уведомлениях из системы, рассылаемых на почтовые ящики.

Внимание!

Для системы ADVANTA необходимо настроить маршрутизацию таким образом, чтобы сервер мог подключиться к самому себе по внешнему адресу.

Пример: внешний адрес сервера 192.168.1.62:5000, сервер IIS должен корректно заходить по этому адресу. В файле конфигурации системы ADVANTA client.config необходимо указать корректный путь в параметре WebPath. Для приведенного выше примера:

<add key="WebPath" value="https://192.168.1.62:5000" />

Для этого нужно в настройках Bindings (привязки, в настройках IIS) сайта указать тот внешний адрес системы, но без указания протокола и названия приложения.

Теги:

  <!--<ldapService ldapPath="LDAP://" baseDN="">
    <authenticationTypes>
      <add authenticationType="Secure" />
      <add authenticationType="Signing" />
      <add authenticationType="Sealing" />
    </authenticationTypes>
  </ldapService>
 
  <adDomains>
    <domains>
      <add name="DOMAIN_NAME" login="login" password="password" ldappath="LDAP://DC=domain_name,DC=local"/>
    </domains>
  </adDomains>
  <openIdConnect>
    <providers>
      <add caption="caption" clientId="clientId" metadataURL="metadataURL" authenticationType="authenticationType" enabled="false"/>
    </providers>
  </openIdConnect>-->
  <unity xmlns="http://schemas.microsoft.com/practices/2010/unity">
    <container>
      <register type="System.IO.DirectoryInfo, mscorlib" mapTo="System.IO.DirectoryInfo, mscorlib" name="searchIndexPath">
        <constructor>
                <param name="path" value="/var/advanta-app/search" />
            </constructor>
      </register>
      <register type="Lucene.Net.Store.Directory, Lucene.Net" mapTo="Lucene.Net.Store.SimpleFSDirectory, Lucene.Net">
        <constructor>
              <param name="path" dependencyName="searchIndexPath" />
            </constructor>
      </register>
      <register type="SL.Storage.IFileStorageProvider, smcorelib" mapTo="SL.Storage.LocalFileStorageProvider, smcorelib">
        <constructor>
          <param name="documentsFolder" value="/var/advanta-app/documents" type="string"></param>
        </constructor>
      </register>
      <register type="SmartSuite.Data.Persistence.StorageProviderFactory, SmartSuite.Data" mapTo="SmartSuite.PostgreSQL.PgStorageProviderFactory, SL.PostgreSQL" />
      <register type="SL.App.ServerObjects.IServerObjectsProvider, SL.App.ServerObjects" mapTo="SL.App.ServerObjects.PostgreSQL.ServerObjectsProvider, SL.PostgreSQL" />
      <register type="P2M.Cubes.Data.IDirectoryDataManager, smcorelib" mapTo="SL.PostgreSQL.Data.DirectoryDataManager, SL.PostgreSQL" />
      <register type="P2M.Cubes.Data.IPivotDataManager, smcorelib" mapTo="SL.PostgreSQL.Data.PivotDataManager, SL.PostgreSQL" />
      <!--<register type="SL.Storage.IFileStorageProvider, smcorelib" mapTo="SL.Storage.SqlFileStorageProvider, smcorelib">
        <constructor>
          <param name="connectionStringName" value="db" type="string">
          </param>
        </constructor>
      </register>-->
 
      <!--<register type="SL.Storage.IFileStorageProvider, smcorelib" mapTo="SL.Storage.LocalFileStorageProvider, smcorelib">
        <constructor>
          <param name="documentsFolder" type="string" value="/var/advanta-app/documents" />
        </constructor>
      </register>-->
      <register type="Advanta.Files.IFileStorageProvider, Advanta.Infrastructure"
                mapTo="SL.Storage.LocalFileStorageProvider, smcorelib">
        <constructor>
          <param name="documentsFolder" type="string" value="/var/advanta-app/documents" />
        </constructor>
      </register>
 
    </container>
  </unity>
  <!--
  <hashiCorpVault address="" roleId="" secretId="">
    <containers>
      <add id="dbPasswords" version="V1" mountPoint="kv-v1" path="dbPasswords"/>
      <add id="adDomainPasswords" version="V2" mountPoint="kv-v2" path="adDomainPasswords"/>
    </containers>
  </hashiCorpVault>
  -->
</configuration>

3. В файле <версия приложения>/Advanta/appsettings.json необходимо указать URL, по которому будет открываться приложение. Пример листинга конфигурационного файла appsettings.json:

{
  "ConnectionStrings": {
    "DefaultConnection": "Server=(localdb)\\mssqllocaldb;Database=aspnet-Advanta-53bc9b9d-9d6a-45d4-8429-2a2761773502;Trusted_Connection=True;MultipleActiveResultSets=true"
  },
  "Logging": {
    "LogLevel": {
      "Default": "Debug",
      "Microsoft.AspNetCore": "Warning"
    }
  },
  "ASPNETCORE_ENVIRONMENT": "Development",

  "Kestrel": {
    "Endpoints": {
      "Http": {
        "Url": "https://192.168.16.250:5000"
      },
    }
  },

  "AllowedHosts": "*",
    "appSettings": {
        "AppName": "streamline",
        "FirstUserMail": "support@advanta-group.ru",
        "support": "bug@advanta-group.ru",
        "statistics": "statistics@advanta-group.ru",
        "ConfigurationSettingsFile": "_Resources\\Config\\ConfigFiles\\ConfigurationSettings.xml",
        "Security_PagesConfig": "_Resources\\Config\\ConfigFiles\\SecuritySettings.xml",
        "PortletsConfig_File": "_Resources\\Config\\PortletEngine\\EngineConfig.xml",
        "Projects_StatusFile": "_Resources\\Config\\P2M\\Projects\\ProjectStatuses.xml",
        "Projects_PriorityFile": "_Resources\\Config\\P2M\\Projects\\ProjectPriority.xml",
        "errorMode": "debug",
        "ValidationSettings:UnobtrusiveValidationMode": "None",
        "SoapServicesAspNetCompatibility" :  "false"
    },
    "FormOptions": {
        "ValueCountLimit": "2048"
    }
}
Рекомендуется при разворачивании Системы использовать протокол https, вместо http, т.к. протокол http считается устаревшим.

Раздел Системы с диаграммой Ганта доступен только при работе Системы через https.

Информация о переводе Системы с протокола http на использование протокола https находится на отдельной странице.

На данный момент доступно 4 языка на выбор:
  • русский (по-умолчанию);
  • английский;
  • чешский;
  • украинский.

Для выбора языка, отличного от русского, нужно:

  1. Открыть на редактирование файл globalization.config.
  2. Найти строку:
    <globalization culture="ru-RU" uiCulture="ru-Ru" fileEncoding="windows-1251" requestEncoding="utf-8" responseEncoding="utf-8" />
  3. Изменить в ней значение параметра uiCulture на:
    • uk-UA , если нужен украинский язык интерфейса.
    • cs-CZ , если нужен чешский язык интерфейса.
    • en , если нужен английский язык интерфейса.
Для возврата к русскому языку нужно установить значение ru-Ru.
  1. Необходимо получить у менеджера ADVANTA архив GetLicenseInfo и распаковать его на сервере.
  2. Сгенерировать файл запроса лицензии:
    dotnet Advanta.GetLicenseInfo.dll
  3. Сгенерированный файл _sl.dat отправить менеджеру ADVANTA.
  4. Получить от менеджера ADVANTA файл лицензии sl.lic и скопировать его в /opt/advanta-app/Advanta/.
  5. Запускать приложение в папке /opt/advanta-app/Advanta/ командой:
    dotnet Advanta.dll

Выполнить настройку службы ADVANTA:

1. Создать файл службы /etc/systemd/system/Advanta.service. Пример файла службы Advanta.service:

[Unit]
Description=Advanta Service

[Service]
# will set the Current Working Directory (CWD). Worker service will have issues without this setting
WorkingDirectory=/opt/advanta-app/Advanta
# systemd will run this executable to start the service
# if /usr/bin/dotnet doesn't work, use `which dotnet` to find correct dotnet executable path
ExecStart=/usr/bin/dotnet /opt/advanta-app/Advanta/Advanta.dll
# to query logs using journalctl, set a logical name here
SyslogIdentifier=AdvantaService

# Use your username to keep things simple.
# If you pick a different user, make sure dotnet and all permissions are set correctly to run the app
# To update permissions, use 'chown yourusername -R /srv/HelloWorld' to take ownership of the folder and files,
# Use 'chmod +x /srv/HelloWorld/HelloWorld' to allow execution of the executable file
User=root
# ensure the service restarts after crashing
Restart=always
# amount of time to wait before restarting the service
RestartSec=5
# This environment variable is necessary when dotnet isn't loaded for the  pecified user.
# To figure out this value, run 'env | grep DOTNET_ROOT' when dotnet has been loaded into your shell.
Environment=DOTNET_ROOT=/usr/share/dotnet

[Install]
WantedBy=multi-user.target
systemctl daemon-reload
Путь к исполняемому файлу /usr/bin/dotnet может отличаться в зависимости от дистрибутива.

2. Добавить созданную службу в автозапуск:

systemctl enable advanta

После выполнения всех настроек и проверки корректного включения и работы приложения ADVANTA, необходимо выполнить:

dotnet /opt/advanta-app/Updates/Bin/Advanta.Migration/Advanta.Migration.dll /opt/advanta-app/Advanta/client.config

В кросс-платформенной версии данный сервис встроен в платформу. Установка отдельного фонового приложения для обеспечения работы таймера как для версии 3.хх – не требуется.