Сервер БД

  1. Установка необходимых пакетов ПО из репозиториев:

    sudo apt-get update && sudo apt-get upgrade
    sudo apt-get install unzip curl postgresql postgresql-client postgresql-contrib


    Важно!

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


    Важно!

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

  2. Отредактировать конфигурационные файлы postgresql:

    Проверяем версию postgresql

    psql --version

    Открываем конфигурационный файл postgresql.conf с учетом установленной версии

    nano /etc/postgresql/14/main/postgresql.conf

    Изменить в секции # - Connection Settings - значение параметра listen_addresses с localhost  на *
    должно получиться:

    listen_addresses = '*' 

    Открываем конфигурационный файл pg_hba.conf с учетом установленной версии

    nano /etc/postgresql/14/main/pg_hba.conf

    Изменить в секции # IPv4 Local connections:  значение параметра ADDRESS с 127.0.0.1/32  на 0.0.0.0/0

    # IPv4 local connections:
     
    host      all      all      0.0.0.0/0      scram-sha-256
  3. Перезапустить службу:

    sudo systemctl restart postgresql
  4. Проверить выполняется ли прослушивание на порту 5432 для всех активных адресов:

    netstat -ltnp
     
    tcp      0      0 0.0.0.0:5432      0.0.0.0:*      LISTEN      14569/postgres
  5. Добавить пользователя postgres в группу владельца директории, из которой выполняются действия:

    Проверка владельца текущей папки (обозначена ".")

    ls –la

    Добавление пользователя postgres в группу владельца

    sudo usermod -aG dir_owner_group postgres
  6. Изменить права группе владельца директории (дать права на изменение). В данном случае путь до директории - . (текущая директория):

    chmod -R 775 .
  7. Войти в cli postgresql от имени пользователя postgres:

    sudo -u postgres psql
  8. Создать пользователя с ролью суперпользователя:

    postgres-#CREATE USER vitrodbuser WITH PASSWORD '@pwd4vitro!' SUPERUSER;
  9. Создать новую базу данных с именем vitrodb:

    postgres-#CREATE DATABASE vitrodb WITH OWNER = vitrodbuser ENCODING = 'UTF8' LOCALE_PROVIDER = 'icu' ICU_LOCALE = 'ru-u-kn-true' TEMPLATE = template0 CONNECTION_LIMIT = -1;
  10. Создать новую базу данных с именем workflow:

    postgres-#CREATE DATABASE workflow WITH OWNER = vitrodbuser ENCODING = 'UTF8' LOCALE_PROVIDER = 'icu' ICU_LOCALE = 'ru-u-kn-true' TEMPLATE = template0 CONNECTION_LIMIT = -1;
  11. Отключиться от cli postgresql:

    postgres-# \q
  12. Скачать и распаковать дистрибутив:

    curl "https://linkTo/Vitro.Server.MultiPlatform.Linux-xx.x.xx.xx.zip" --output 'Vitro.Server.MultiPlatform.Linux-xx.x.xx.xx.zip'
     
    sudo unzip Vitro.Server.MultiPlatform.Linux-xx.x.xx.xx.zip
  13. Инициализация базы данных
    1. Версия дистрибутива 24.1.38 или выше:

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

      sudo cp ~/Vitro.Server.MultiPlatform.Linux-xx.x.xx.xx/DB/Install/db_func_create.sql /tmp
      sudo cp ~/Vitro.Server.MultiPlatform.Linux-xx.x.xx.xx/DB/Install/db_table_create.sql /tmp
      sudo cp ~/Vitro.Server.MultiPlatform.Linux-xx.x.xx.xx/DB/Install/db_data_init.sql /tmp

      Запустить инициализацию базы из скриптов:

      sudo -u postgres psql -U postgres -d vitrodb -f /tmp/db_func_create.sql -f /tmp/db_table_create.sql -f /tmp/db_data_init.sql
    2. Версия дистрибутива ниже 24.1.38:

      Скопировать в доступное для пользователей расположение (к примеру tmp) файл резервной копии базы данных:

      sudo cp ~/Vitro.Server.MultiPlatform.Linux-xx.x.xx.xx/DB/vitro.bak /tmp

      Запустить восстановление БД из бэкапа:

      sudo -u postgres pg_restore -v -U vitrodbuser -h localhost -d vitrodb /tmp/vitro.bak

      Запустить восстановление БД из бекапа (для файлов с расширением sql):

      sudo -u postgres psql -U vitrodbuser -h localhost -d vitrodb < /tmp/vitro.bak.sql

Сервер приложений/фронт энд:

  1. Установка необходимых пакетов ПО из репозиториев:

    sudo apt-get update && sudo apt-get upgrade
    sudo apt-get install unzip curl nginx nginx-extras libgdiplus

    Без libgdiplus не будут работать почтовые уведомления
  2. Скачать и распаковать дистрибутив:

    curl "https://linkTo/Vitro.Server.MultiPlatform.Linux-xx.x.xx.xx.zip" --output 'Vitro.Server.MultiPlatform.Linux-xx.x.xx.xx.zip'
     
    sudo unzip Vitro.Server.MultiPlatform.Linux-xx.x.xx.xx.zip
  3. Скопировать папку файлового хранилища в расположение, в которое смонтирован раздел для хранения:

    sudo cp -r ~/Vitro.Server.MultiPlatform.Linux-xx.x.xx.xx/DB/VitroFileStorage /mnt/storage
  4. Сменить владельца для папки файлового хранилища:

    sudo chown -R www-data:www-data /mnt/storage/VitroFileStorage
  5. Скопировать папку Vitro в расположение /etc/:

    sudo cp -r ~/Vitro.Server.MultiPlatform.Linux-xx.x.xx.xx/Vitro/ /etc/
  6. Настроить уровень доступа на папке:

    sudo chmod 500 /etc/Vitro/
  7. Сменить владельца для папки:
    sudo chown -R www-data:www-data /etc/Vitro
  8. Внести изменения в конфигурационные файлы:
    1. Файл db.json:

      sudo nano /etc/Vitro/Server/Conf/db.json

      Изменить строку соединения, указав в качестве значения для атрибута "server" имя или IP сервера БД, а в качестве значения для атрибута "database" название созданной в п.9 базы данных:

      "ConnectionString": "server=vitrodbserver;database=vitrodb;user id=vitrodbuser;password=@pwd4vitro!",

      Изменить параметр "FileStoragePath", указав корректный путь к папке файлового хранилища:

      "FileStoragePath": "/mnt/storage/VitroFileStorage",

      изменить параметр "TempPath", указав корректный путь к папке временных файлов:

      "TempPath": "/tmp",
    2. Файл workflow.json:

      sudo nano /etc/Vitro/Server/Conf/workflow.json

      Изменить строку соединения, указав в качестве значения для атрибута "server" имя или IP сервера БД, а в качестве значения для атрибута "database" название созданной в п.10 базы данных:

      "ConnectionString": "server=vitrodbserver;database=workflow;user id=vitrodbuser;password=@pwd4vitro!;Include Error Detail=true",
    3. Файл mail.json:
      Указать адрес и порт SMTP сервера:

      "Host": "smtp.example.ru",
      "Port": 587,

      Указать данные УЗ для подключения к SMTP серверу:

      "Login": "mail@example.ru",
      "Password": "123456",

      Указать адрес отправителя:

      "FromAddress": "mail@example.ru",
      "FromName": "mail@example.ru",

      Указать используется ли SSL для подключения к SMTP серверу:

      "EnableSsl": true,

      Убедиться, что в файле есть параметр SecureSocketOptions:

      "SecureSocketOptions": "StartTls"

      Остальные параметры оставить по умолчанию.

  9. Скопировать папку приложения Vitro.Server.Core.Web в желаемое расположение:

    sudo cp -r ~/Vitro.Server.MultiPlatform.Linux-xx.x.xx.xx/Vitro.Server.Core.Web /usr/local
  10. Сменить владельца для папки приложения:

    sudo chown -R www-data:www-data /usr/local/Vitro.Server.Core.Web
  11. Установить атрибут "Исполняемый" для файла Vitro.Server.Core.Web:

    sudo chmod +x /usr/local/Vitro.Server.Core.Web/Vitro.Server.Core.Web
  12. Создать и отредактировать файл модуля systemd для запуска службы:

    sudo nano /lib/systemd/system/vitro-server.service

    Содержимое файла модуля:

    [Unit]
    Description=Vitro .NET Web Application
     
    [Service]
    WorkingDirectory=/usr/local/Vitro.Server.Core.Web
    ExecStart=/usr/local/Vitro.Server.Core.Web/Vitro.Server.Core.Web --urls http://localhost:4615
    Restart=always
    # Restart service after 10 seconds if the dotnet service crashes:
    RestartSec=10
    KillSignal=SIGINT
    SyslogIdentifier=dotnet-example
    User=www-data
    SyslogIdentifier=Vitro-server
     
    [Install]
    WantedBy=multi-user.target
  13. Применить изменения и запустить службу:

    sudo systemctl enable vitro-server
     
    sudo systemctl start vitro-server
  14. Проверить выполняется ли прослушивание на порту, заданном в файле модуля (здесь 4615) для адреса Lo интерфейса:

    netstat -ltnp
     
    Proto Recv-Q Send-Q Local Address      Foreign Address      State      PID/Program name
     
    ...
     
    tcp             0           0 127.0.0.1:4615       0.0.0.0:*                    LISTEN   -
     
    ...
  15. Скопировать папку приложения в желаемое расположение:

    sudo cp -r ~/Vitro.Server.MultiPlatform.Linux-xx.x.xx.xx/Vitro.Server.Workflow.Manager.Web /usr/local
  16. Сменить владельца для папки приложения:

    sudo chown -R www-data:www-data /usr/local/Vitro.Server.Workflow.Manager.Web
  17. Установить атрибут "Исполняемый" для файла Workflow.Manager.Web:

    sudo chmod +x /usr/local/Vitro.Server.Workflow.Manager.Web/Vitro.Server.Workflow.Manager.Web
  18. Создать и отредактировать файл модуля systemd для запуска службы:

    sudo nano /lib/systemd/system/vitro-workflow.service

    Содержимое файла модуля:

    [Unit]
    Description=Vitro Workflow Manager .NET Web Application
      
    [Service]
    WorkingDirectory=/usr/local/Vitro.Server.Workflow.Manager.Web
    ExecStart=/usr/local/Vitro.Server.Workflow.Manager.Web/Vitro.Server.Workflow.Manager.Web --urls http://localhost:4616
    Restart=always
    # Restart service after 10 seconds if the dotnet service crashes:
    RestartSec=10
    KillSignal=SIGINT
    SyslogIdentifier=dotnet-example
    User=www-data
    SyslogIdentifier=Vitro-workflow
      
    [Install]
    WantedBy=multi-user.target
  19. Применить изменения и запустить службу:

    sudo systemctl enable vitro-workflow
      
    sudo systemctl start vitro-workflow
  20. Проверить выполняется ли прослушивание на порту, заданном в файле модуля (здесь 4616) для адреса Lo интерфейса:

    netstat -ltnp
      
    Proto Recv-Q Send-Q Local Address      Foreign Address      State      PID/Program name
      
    ...
      
    tcp             0           0 127.0.0.1:4616       0.0.0.0:*                    LISTEN   -
      
    ...

Конвертация комплекта сертификата '*'.pfx в crt/pem средствами OpenSSL

  1. Скачать сертификат в формате *.pfx 

    curl "https://linkTo/example.ru.pfx" --output 'example.ru.pfx'
  2. Для получения из *.pfx сертификата сервера в формате pem выполнить: 

    openssl pkcs12 -in example.ru.pfx -clcerts -nokeys -out example.ru.pem

    В процессе будет запрошен пароль.

  3. для получения из *.pfx приватного ключа в формате pem выполнить: 

    openssl pkcs12 -in example.ru.pfx -nocerts -out example.ru.enc.key

    В процессе будет запрошен пароль. Далее будет запрошен новый пароль для нового файла ключа (в этом случае в качестве пароля вводится НЕ пустое значение, любой пароль).

  4. Для получения незащищенного паролем приватного ключа (из защищенного паролем файла ключа полученного на предыдущем шаге) выполнить: 

    openssl rsa -in example.ru.enc.key -out example.ru.key
  5. Скопировать полученные файлы сертификата и незащищенного паролем приватного ключа в /etc/ssl/private (либо иное удобное расположение)

    sudo cp example.ru.* /etc/ssl/private

Настройка обратного проксирования

  1. Настроить обратное проксирование при помощи nginx, отредактировав конфигурационный файл:

    sudo nano /etc/nginx/sites-available/default

    Должно получиться:

    # Default server configuration
    #
     
    server {
            listen 80 default_server;
            listen [::]:80 default_server;
     
            # Only allow access if the host is correct
            if ( $host != "vitro.example.ru" ){
                return 444; #CONNECTION CLOSED WITHOUT RESPONSE
            }
            
            #permanent redirekt from http to https
            return 301 https://$host$request_uri;
    }
     
    server {
            # SSL configuration
            #
            listen 443 ssl default_server;
            listen [::]:443 ssl default_server;
     
            server_name vitro.example.ru;
     
            ssl_certificate     /etc/ssl/private/example.ru.pem;
            ssl_certificate_key /etc/ssl/private/example.ru.key;
     
            # Only allow access if the host is correct
            if ( $host != "vitro.example.ru" ){
                return 444; #CONNECTION CLOSED WITHOUT RESPONSE
            }
     
            proxy_buffer_size   1M;
            proxy_buffers   4 1M;
            proxy_read_timeout 1h;
            proxy_send_timeout 1h;
     
            location / {
                    #proxying traffic to upstream application (Vitro.Server.Core.Web)
                    proxy_pass http://127.0.0.1:4615;
            }
      
            location /workflow/manager {
                    proxy_pass http://localhost:4616/workflow/manager;
            }  
    }

    Необходимые настройки:

    1. Для обеспечения загрузки больших файлов добавить в конфигурационный файл сайта Nginx в явном виде значение параметра client_max_body_size

      client_max_body_size 100000M;
    2. Для исключения переполнения корневого раздела диска, необходимо включить в Nginx кеширование для обратного проксирования.
      Ключи для помещения в секцию server (или location):

      proxy_buffering        on;
  2. Также для исключения переполнения корневого раздела диска, необходимо включить в Nginx кеширование для обратного проксирования в файле /etc/nginx/nginx.conf

    sudo nano /etc/nginx/nginx.conf

    Ключ для размещения в конфигурационном файле:

    proxy_cache_path  /var/cache/nginx  levels=1:2    keys_zone=STATIC:10m inactive=24h  max_size=1g;
  3. Итоговые конфигурационные файлы:

    /etc/nginx/nginx.conf
    user www-data;
    worker_processes auto;
    pid /run/nginx.pid;
    include /etc/nginx/modules-enabled/*.conf;
    events {
        worker_connections 768;
        # multi_accept on;
    }
    http {
        ##
        # Basic Settings
        ##
        sendfile on;
        tcp_nopush on;
        types_hash_max_size 2048;
        # server_tokens off;
        # server_names_hash_bucket_size 64;
        # server_name_in_redirect off;
        include /etc/nginx/mime.types;
        default_type application/octet-stream;
        ##
        # SSL Settings
        ##
        ssl_protocols TLSv1 TLSv1.1 TLSv1.2 TLSv1.3; # Dropping SSLv3, ref: POODLE
        ssl_prefer_server_ciphers on;
        ##
        # Logging Settings
        ##
        access_log /var/log/nginx/access.log;
        error_log /var/log/nginx/error.log;
        ##
        # Gzip Settings
        ##
        gzip on;
         
        proxy_cache_path  /var/cache/nginx  levels=1:2    keys_zone=STATIC:10m inactive=24h  max_size=1g;
         
        # gzip_vary on;
        # gzip_proxied any;
        # gzip_comp_level 6;
        # gzip_buffers 16 8k;
        # gzip_http_version 1.1;
        # gzip_types text/plain text/css application/json application/javascript text/xml application/xml application/xml+rss text/javascript;
        ##
        # Virtual Host Configs
        ##
        include /etc/nginx/conf.d/*.conf;
        include /etc/nginx/sites-enabled/*;
    }
    /etc/nginx/sites-available/default
    # Default server configuration
    #
     
    server {
            listen 80 default_server;
            listen [::]:80 default_server;
     
            # Only allow access if the host is correct
            if ( $host != "vitro.example.ru" ){
                return 444; #CONNECTION CLOSED WITHOUT RESPONSE
            }
            
            #permanent redirekt from http to https
            return 301 https://$host$request_uri;
    }
     
    server {
            # SSL configuration
            #
            listen 443 ssl default_server;
            listen [::]:443 ssl default_server;
     
            server_name vitro.example.ru;
     
            client_max_body_size 100000M;
     
            ssl_certificate     /etc/ssl/private/example.ru.pem;
            ssl_certificate_key /etc/ssl/private/example.ru.key;
     
            # Only allow access if the host is correct
            if ( $host != "vitro.example.ru" ){
                return 444; #CONNECTION CLOSED WITHOUT RESPONSE
            }          
     
            proxy_buffer_size   1M;
            proxy_buffers   4 1M;
            proxy_read_timeout 1h;
            proxy_send_timeout 1h; 
     
            location / {
                    #proxying traffic to upstream application (Vitro.Server.Core.Web)
                    proxy_pass http://127.0.0.1:4615;
                    proxy_buffering        on; 
                    proxy_set_header X-Real-IP $remote_addr;
                    proxy_set_header         X-Forwarded-For     $proxy_add_x_forwarded_for;
                    proxy_set_header         X-Forwarded-Proto   $scheme;
                    proxy_set_header Host $host; 
    		}
      
            location /workflow/manager {
                    proxy_pass http://localhost:4616/workflow/manager;
            }
    }
  4. Выполнить перезагрузку службы nginx:

    sudo systemctl reload nginx

Добавление шаблонов рабочих процессов

  1. Перейти на вкладку Workflow Defenitions в Elsa

    http://vitro.example.ru/workflow/manager/workflow-definitions
  2. Нажать Create workflow 


  3. Нажать Import 


  4. Выбрать файл шаблона из папки workflows дистрибутива


  5. После загрузки шаблона нажать Publish 


  6. Перейти обратно на вкладку Workflow defenitions  и убедиться, что шаблон создан
  7. Таким образом добавить все шаблоны из папки workflows дистрибутива

Настройка системы

Необходимо указать адрес портала в ключе Site.PortalUrl.

Для этого нужно:

  1. Перейти в список Конфигурация пространства Центр Администрирования (список по умолчанию скрыт).
  2. Открыть папку Общие настройки 
  3. Для ключа Адрес портала указать в поле Значение (строка) адрес портала в виде https://example.com

    Важно!
    Адрес портала не должен заканчиваться символом слэша.

Добавление лицензии

Для работы серверной части требуется лицензионный ключ.

Если лицензионного ключа нет, то запросы на обновление элементов выдают ошибку "Лицензионные ограничения".

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

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

Ссылка на список выведена в сайдбар:

  • No labels