Различия

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

Ссылка на это сравнение

Предыдущая версия справа и слева Предыдущая версия
Следующая версия
Предыдущая версия
product:settings:system:install_linux [07.07.2025 11:04] – [Необходимые пакеты ОС] ekaterina.menkhuzinaproduct:settings:system:install_linux [08.10.2025 07:36] (текущий) – [Выбор языка интерфейса системы] ekaterina.menkhuzina
Строка 154: Строка 154:
 </code> </code>
  
 +<callout type="primary" icon="true">Приведен пример с анонимным подключением. Строка подключения может отличаться в зависимости от политик безопасности организации.</callout>
 +
 +Выполнить настройку https и локального сертификата:
 +<code sh>
 +dotnet dev-certs https
 +dotnet dev-certs https --trust
 +</code>
 \\ \\
 \\ \\
Строка 159: Строка 166:
 1. Загрузить и распаковать файлы приложения ADVANTA на сервер. 1. Загрузить и распаковать файлы приложения ADVANTA на сервер.
  
-2. Создать файл конфигурации приложения (образцы находятся по пути: ''<версия приложения>/SL/config/''). Пример созданного файла конфигурации ''client.config'':+2. Создать файл конфигурации приложения (образцы находятся по пути: ''<версия приложения>/SL/config/''). Созданный файл конфигурации разместить в основном каталоге приложения: ''/opt/advanta-app/Advanta/client.config''. Пример созданного файла конфигурации ''client.config'':
  
 <code xml> <code xml>
Строка 167: Строка 174:
     <section name="unity" type="Microsoft.Practices.Unity.Configuration.UnityConfigurationSection, Microsoft.Practices.Unity.Configuration" />     <section name="unity" type="Microsoft.Practices.Unity.Configuration.UnityConfigurationSection, Microsoft.Practices.Unity.Configuration" />
     <!--<section name="ldapService" type="Config.LDAPConfigurationSection, smcorelib"/>     <!--<section name="ldapService" type="Config.LDAPConfigurationSection, smcorelib"/>
-    <section name="adDomains" type="Config.ADDomainsConfiguration, smcorelib"/>-->+    <section name="adDomains" type="Config.ADDomainsConfiguration, smcorelib"/> 
 +    <section name="openIdConnect" type="Config.OpenIdConnectConfigurationSection, smcorelib"/> 
 +    <section name="hashiCorpVault" type="Config.HashiCorpVaultConfigurationSection, smcorelib"/>-->
   </configSections>   </configSections>
 </code> </code>
Строка 174: Строка 183:
 <code xml> <code xml>
   <connectionStrings>   <connectionStrings>
-    <add name="db" providerName="Npgsql" connectionString="User ID=postgres;Password=P@ssw0rd;Host=SERV-07;Port=5432;Database=Gazprom;MaxPoolSize=1024;Timeout=60;Max Auto Prepare=100;Auto Prepare Min Usages=3;" /> +    <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=SERV-07;Port=5432;Database=Gazprom;MaxPoolSize=1024;Timeout=60;Max Auto Prepare=100;Auto Prepare Min Usages=3;" /> +    <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=SERV-07;Port=5432;Database=Gazprom;MaxPoolSize=1024;Timeout=60;Max Auto Prepare=100;Auto Prepare Min Usages=3;" />+    <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>   </connectionStrings>
 </code> </code>
Строка 188: Строка 197:
 <code xml> <code xml>
   <appSettings>   <appSettings>
-    <add key="WebPath" value="https://domain:5000" />+    <add key="WebPath" value="https://192.168.16.250:5000" />
     <add key="TimeZone" value="+5" />     <add key="TimeZone" value="+5" />
     <add key="autologin" value="false" />     <add key="autologin" value="false" />
-    <add key="FilesRootPath" value="/SL_Files" />+    <add key="FilesRootPath" value="C:\SL_Files" />
     <add key="BusTransportType" value="PostgreSql" />     <add key="BusTransportType" value="PostgreSql" />
     <add key="NegotiationByEmailTimeout" value="120" />     <add key="NegotiationByEmailTimeout" value="120" />
-    <!-- Настройки списка внешних URL при переадресации -->+    <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="AllowedUrlRedirects" value="https://www.wikipedia.org;https://www.deepl.com/translator" />
- --> +    -->
-    <!-- Настройки Системы для архивации файлов -->+
     <!--     <!--
-    <add key="DocumentsArchiveLifeTimeHours" value="168" /> +    <add key="DocumentsArchiveLifeTimeHours" value="168" />    
     <add key="MaxTotalFileSize" value="2097152000" />     <add key="MaxTotalFileSize" value="2097152000" />
     <add key="MaxFileCount" value="500" />     <add key="MaxFileCount" value="500" />
- <add key="MaxDocumentsArchivingActionCount" value="3" /> +    <add key="MaxDocumentsArchivingActionCount" value="3" /> 
- <add key="MaxFullPathLength" value="150" />+    <add key="MaxFullPathLength" value="150" />
     <add key="MinFolderNameLength" value="3" />     <add key="MinFolderNameLength" value="3" />
- <add key="MinRootFolderNameLength" value="30" />   +    <add key="MinRootFolderNameLength" value="30" />   
-  +     
- <add key="DocumentsArchivingService" value="Remote" /+    <add key="DocumentsArchivingService" value="Remote" /> 
- --+    -->
-    <!-- Параметры при выборе локального сервиса архивации файлов -->+
     <!--     <!--
     <add key="DocumentsArchivingService" value="Local" />     <add key="DocumentsArchivingService" value="Local" />
Строка 222: Строка 231:
     <add key="PathToTemporaryArchiveFlat" value="C:\Temp"/>     <add key="PathToTemporaryArchiveFlat" value="C:\Temp"/>
     -->     -->
-    <add key="EnableTestODataEndPoint" value="1" /> 
-    <add key="EnableSwagger" value="1" /> 
-    <add key="ApplicationId" value="eebe4dc586b3" /> 
   </appSettings>   </appSettings>
 </code> </code>
Строка 252: Строка 258:
       <add name="DOMAIN_NAME" login="login" password="password" ldappath="LDAP://DC=domain_name,DC=local"/>       <add name="DOMAIN_NAME" login="login" password="password" ldappath="LDAP://DC=domain_name,DC=local"/>
     </domains>     </domains>
-  </adDomains>-->+  </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">   <unity xmlns="http://schemas.microsoft.com/practices/2010/unity">
     <container>     <container>
-      <!-- Search index on disk 
       <register type="System.IO.DirectoryInfo, mscorlib" mapTo="System.IO.DirectoryInfo, mscorlib" name="searchIndexPath">       <register type="System.IO.DirectoryInfo, mscorlib" mapTo="System.IO.DirectoryInfo, mscorlib" name="searchIndexPath">
         <constructor>         <constructor>
-     <param name="path" value="d:\LuceneIndex" /> +                <param name="path" value="/var/advanta-app/search" /> 
-     </constructor>+            </constructor>
       </register>       </register>
       <register type="Lucene.Net.Store.Directory, Lucene.Net" mapTo="Lucene.Net.Store.SimpleFSDirectory, Lucene.Net">       <register type="Lucene.Net.Store.Directory, Lucene.Net" mapTo="Lucene.Net.Store.SimpleFSDirectory, Lucene.Net">
         <constructor>         <constructor>
-       <param name="path" dependencyName="searchIndexPath" /> +              <param name="path" dependencyName="searchIndexPath" /> 
-     </constructor> +            </constructor> 
-      </register>--+      </register> 
-      <!--<register type="SL.Storage.IFileStorageProvider, smcorelib" mapTo="SL.Storage.LocalFileStorageProvider, smcorelib">+      <register type="SL.Storage.IFileStorageProvider, smcorelib" mapTo="SL.Storage.LocalFileStorageProvider, smcorelib">
         <constructor>         <constructor>
-          <param name="documentsFolder" value="[DocumentsFolder]" type="string"></param>+          <param name="documentsFolder" value="/var/advanta-app/documents" type="string"></param>
         </constructor>         </constructor>
-      </register>-->+      </register>
       <register type="SmartSuite.Data.Persistence.StorageProviderFactory, SmartSuite.Data" mapTo="SmartSuite.PostgreSQL.PgStorageProviderFactory, SL.PostgreSQL" />       <register type="SmartSuite.Data.Persistence.StorageProviderFactory, SmartSuite.Data" mapTo="SmartSuite.PostgreSQL.PgStorageProviderFactory, SL.PostgreSQL" />
-      <register type="SL.App.ServerObjects.IServerObjectsProvider, SL.App" mapTo="SL.App.ServerObjects.PostgreSQL.ServerObjectsProvider, 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.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="P2M.Cubes.Data.IPivotDataManager, smcorelib" mapTo="SL.PostgreSQL.Data.PivotDataManager, SL.PostgreSQL" />
-      <!-- Вариант, когда нужно хранить файлы в Базе данных (в виде двоичных полей)--> +      <!--<register type="SL.Storage.IFileStorageProvider, smcorelib" mapTo="SL.Storage.SqlFileStorageProvider, smcorelib">
-      <register type="SL.Storage.IFileStorageProvider, smcorelib" mapTo="SL.Storage.SqlFileStorageProvider, smcorelib">+
         <constructor>         <constructor>
           <param name="connectionStringName" value="db" type="string">           <param name="connectionStringName" value="db" type="string">
           </param>           </param>
         </constructor>         </constructor>
-      </register> +      </register>--> 
-      <!-- +       
-      Вариант, когда не нужно файлы хранить в БД, а нужно складывать в каталог на жестком диске (при этом в БД будут храниться только ссылки на них) +      <!--<register type="SL.Storage.IFileStorageProvider, smcorelib" mapTo="SL.Storage.LocalFileStorageProvider, smcorelib">
-      <register type="SL.Storage.IFileStorageProvider, smcorelib" mapTo="SL.Storage.LocalFileStorageProvider, smcorelib">+
         <constructor>         <constructor>
-          <param name="documentsFolder" type="string" value="C:\LocalFileStorage" />+          <param name="documentsFolder" type="string" value="/var/advanta-app/documents" />
         </constructor>         </constructor>
-      </register>+      </register>-->
       <register type="Advanta.Files.IFileStorageProvider, Advanta.Infrastructure"       <register type="Advanta.Files.IFileStorageProvider, Advanta.Infrastructure"
- mapTo="SL.Storage.LocalFileStorageProvider, smcorelib">+                mapTo="SL.Storage.LocalFileStorageProvider, smcorelib">
         <constructor>         <constructor>
-          <param name="documentsFolder" type="string" value="C:\LocalFileStorage" />+          <param name="documentsFolder" type="string" value="/var/advanta-app/documents" />
         </constructor>         </constructor>
       </register>       </register>
-      -->+     
     </container>     </container>
   </unity>   </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> </configuration>
 </code> </code>
Строка 310: Строка 326:
   "Logging": {   "Logging": {
     "LogLevel": {     "LogLevel": {
-      "Default": "Information",+      "Default": "Debug",
       "Microsoft.AspNetCore": "Warning"       "Microsoft.AspNetCore": "Warning"
     }     }
   },   },
 +  "ASPNETCORE_ENVIRONMENT": "Development",
  
-"Kestrel": {+  "Kestrel": {
     "Endpoints": {     "Endpoints": {
       "Http": {       "Http": {
-        "Url": "https://192.168.1.62:5000"+        "Url": "https://192.168.16.250:5000"
       },       },
     }     }
Строка 324: Строка 341:
  
   "AllowedHosts": "*",   "AllowedHosts": "*",
-  "appSettings":+    "appSettings":
-    "AppName": "streamline", +        "AppName": "streamline", 
-    "FirstUserMail": "support@advanta-group.ru", +        "FirstUserMail": "support@advanta-group.ru", 
-    "support": "bug@advanta-group.ru", +        "support": "bug@advanta-group.ru", 
-    "statistics": "statistics@advanta-group.ru", +        "statistics": "statistics@advanta-group.ru", 
-    "ConfigurationSettingsFile": "_Resources\\Config\\ConfigFiles\\ConfigurationSettings.xml", +        "ConfigurationSettingsFile": "_Resources\\Config\\ConfigFiles\\ConfigurationSettings.xml", 
-    "Security_PagesConfig": "_Resources\\Config\\ConfigFiles\\SecuritySettings.xml", +        "Security_PagesConfig": "_Resources\\Config\\ConfigFiles\\SecuritySettings.xml", 
-    "PortletsConfig_File": "_Resources\\Config\\PortletEngine\\EngineConfig.xml", +        "PortletsConfig_File": "_Resources\\Config\\PortletEngine\\EngineConfig.xml", 
-    "Projects_StatusFile": "_Resources\\Config\\P2M\\Projects\\ProjectStatuses.xml", +        "Projects_StatusFile": "_Resources\\Config\\P2M\\Projects\\ProjectStatuses.xml", 
-    "Projects_PriorityFile": "_Resources\\Config\\P2M\\Projects\\ProjectPriority.xml", +        "Projects_PriorityFile": "_Resources\\Config\\P2M\\Projects\\ProjectPriority.xml", 
-    "errorMode": "debug", +        "errorMode": "debug", 
-    "ValidationSettings:UnobtrusiveValidationMode": "None" +        "ValidationSettings:UnobtrusiveValidationMode": "None", 
-  }+        "SoapServicesAspNetCompatibility" "false" 
 +    }, 
 +    "FormOptions":
 +        "ValueCountLimit": "2048" 
 +    }
 } }
 </code> </code>
Строка 348: Строка 369:
  
 <callout type="info" icon="true"> <callout type="info" icon="true">
-На данный момент доступно языка на выбор:+На данный момент доступно два языка на выбор:
   * русский (по-умолчанию);   * русский (по-умолчанию);
-  * английский; +  * английский.
-  * чешский; +
-  * украинский.+
 </callout> </callout>
  
Строка 360: Строка 379:
   - Найти строку:<code sql>   - Найти строку:<code sql>
 <globalization culture="ru-RU" uiCulture="ru-Ru" fileEncoding="windows-1251" requestEncoding="utf-8" responseEncoding="utf-8" /></code> <globalization culture="ru-RU" uiCulture="ru-Ru" fileEncoding="windows-1251" requestEncoding="utf-8" responseEncoding="utf-8" /></code>
-  - Изменить в ней значение параметра ''uiCulture'' на+  - Изменить в ней значение параметра ''uiCulture'' на ''en'' , если нужен английский язык интерфейса.
-    * ''uk-UA'' , если нужен украинский язык интерфейса. +
-    * ''cs-CZ'' , если нужен чешский язык интерфейса. +
-    * ''en'' , если нужен английский язык интерфейса.+
  
 <callout type="primary" icon="true">Для возврата к русскому языку нужно установить значение ''ru-Ru''.</callout> <callout type="primary" icon="true">Для возврата к русскому языку нужно установить значение ''ru-Ru''.</callout>
  
 ==== Получение лицензии ==== ==== Получение лицензии ====
-Необходимо получить у менеджера ADVANTA файл ''sl.lic'' и скопировать его в ''<версия приложения>/Advanta/''.+  - Необходимо получить у менеджера ADVANTA архив GetLicenseInfo и распаковать его на сервере. 
 +  - Сгенерировать файл запроса лицензии:<code sh>dotnet Advanta.GetLicenseInfo.dll</code> 
 +  - Сгенерированный файл ''_sl.dat'' отправить менеджеру ADVANTA. 
 +  - Получить от менеджера ADVANTA файл лицензии ''sl.lic'' и скопировать его в /''opt/advanta-app/Advanta/''
 +  - Запускать приложение в папке ''/opt/advanta-app/Advanta/'' командой:<code sh>dotnet Advanta.dll</code>
  
-(в разработке)+==== Убедиться в работоспособности приложения ==== 
 +Выполнить настройку службы ADVANTA: 
 + 
 +1. Создать файл службы ''/etc/systemd/system/Advanta.service''. Пример файла службы ''Advanta.service'': 
 +<code> 
 +[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 
 +</code> 
 + 
 +<code bash> 
 +systemctl daemon-reload 
 +</code> 
 + 
 +<callout type="info" icon="true">Путь к исполняемому файлу ''/usr/bin/dotnet'' может отличаться в зависимости от дистрибутива.</callout> 
 + 
 +2. Добавить созданную службу в автозапуск
 +<code bash> 
 +systemctl enable advanta 
 +</code> 
 + 
 +После выполнения всех настроек и проверки корректного включения и работы приложения ADVANTA, необходимо выполнить: 
 +<code sh> 
 +dotnet /opt/advanta-app/Updates/Bin/Advanta.Migration/Advanta.Migration.dll /opt/advanta-app/Advanta/client.config 
 +</code>
 ==== Сервис для обеспечения работы таймера ==== ==== Сервис для обеспечения работы таймера ====
 В кросс-платформенной версии данный сервис встроен в платформу. Установка отдельного фонового приложения для обеспечения работы таймера как для версии 3.хх -- не требуется.  В кросс-платформенной версии данный сервис встроен в платформу. Установка отдельного фонового приложения для обеспечения работы таймера как для версии 3.хх -- не требуется.