Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

Сервер БД

...

...

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

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

...

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

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

    Code Block
    languagebash
    psql --version

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

    Code Block
    languagebash
    nano /etc/postgresql/14/main/postgresql.conf

...

  1. Изменить в секции # - Connection Settings

...

  1. -

...

  1. значение параметра listen_

...

  1. addresses с localhost  на *
    должно получиться:

    Code Block
    languagebash
    listen_addresses = '*' 

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

    Code Block
    languagebash
    nano /etc/postgresql/14/main/pg_hba.conf

...

  1. Изменить в секции # IPv4 Local connections:

...

  1.  значение параметра ADDRESS с 127.0.0.1/32  на 0.0.0.0/0

    Code Block
    languagebash
    # IPv4 local connections:
     
    

...

  1. host     

...

  1.  all     

...

  1.  all     

...

  1.  0.0.0.0/

...

  1. 0     

...

  1.  scram-sha-256

...

  1. Перезапустить службу:

    Code Block
    languagebash
    sudo systemctl restart postgresql

...

  1. Проверить выполняется ли прослушивание на порту 5432 для всех активных адресов:

    Code Block
    languagebash
    netstat -ltnp
     
    

...

  1. tcp     

...

  1.  0     

...

  1.  0 0.0.0.0:

...

  1. 5432     

...

  1.  0.0.0.0:*

...

  1.      

...

  1.  LISTEN     

...

  1.  14569/postgres

...

  1. Добавить пользователя postgres в группу владельца директории, из которой выполняются действия:

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

    Code Block
    languagebash
    ls –la

...

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

    Code Block
    languagebash
    sudo usermod -aG dir_owner_group postgres

...

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

    Code Block
    languagebash
    chmod -R 775 .

...

  1. Войти в cli postgresql от имени пользователя postgres:

    Code Block
    languagebash
    sudo -u postgres psql

...

  1. Создать пользователя с ролью суперпользователя:

    Code Block
    languagebash
    postgres-#CREATE USER vitrodbuser WITH PASSWORD '@pwd4vitro!' SUPERUSER;

...

  1. Создать новую базу данных с именем vitrodb:

    Code Block
    languagebash
    postgres-#CREATE DATABASE vitrodb with owner = vitrodbuser encoding = 'UTF8' connection limit = -1;

...

  1. Создать новую базу данных с именем workflow:

    Code Block
    languagebash
    postgres-#CREATE DATABASE workflow with owner = vitrodbuser encoding = 'UTF8' connection limit = -1;

...

  1. Отключиться от cli postgresql:

    Code Block
    languagebash
    postgres-# \q

...

  1. Скачать и распаковать дистрибутив:

    Code Block
    languagebash
    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
  2. Инициализация базы данных
    1. Версия дистрибутива 24.1.38 или выше:

...

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

      Code Block
      languagebash
      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

...

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

      Code Block
      languagebash
      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:

...

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

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

...

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

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

...

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

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

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

...

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

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

...

  1. Скачать и распаковать дистрибутив:

    Code Block
    languagebash
    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

...

  1. Скопировать папку файлового хранилища в расположение, в которое смонтирован раздел для хранения:

    Code Block
    languagebash
    sudo cp -r ~/Vitro.Server.MultiPlatform.Linux-xx.x.xx.xx/DB/VitroFileStorage /mnt/storage

...

  1. Сменить владельца для папки файлового хранилища:

    Code Block
    languagebash
    sudo chown -R www-data:www-data /mnt/storage/VitroFileStorage

18. Внести изменения в конфигурационные файлы:

  • перейти в папку с конфигурационными файлами:
  1. Скопировать папку Vitro в расположение /etc/:

    Code Block
    languagebash

...

  1. sudo cp -r ~/Vitro.Server.

...

  1. MultiPlatform.Linux-xx.x.xx.xx/Vitro/

...

  1.  /etc/
  2. Внести изменения в конфигурационные файлы:
    1. Файл db.json:

      Code Block
      languagebash
      sudo nano /etc/Vitro/db.json

...

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

      Code Block
      language

...

    1. bash

...

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

...

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

      Code Block
      language

...

    1. bash
      "FileStoragePath": "/mnt/storage/VitroFileStorage",

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

      Code Block
      language

...

    1. bash

...

    1. "TempPath": "/tmp",

...

    1. Файл workflow.json:

      Code Block
      language

...

    1. bash

...

    1. sudo nano /etc/Vitro/workflow.json

...

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

      Code Block
      language

...

    1. bash

...

    1. "ConnectionString": "server=vitrodbserver;database=workflow;user id=vitrodbuser;password=@pwd4vitro!;Include Error Detail=true",

...

    1. Изменить параметр "BaseUrl", указав корректный Url сайта:

      Code Block
      language

...

    1. bash

...

    1. "BaseUrl": "http://www.example.com",

...

    1. Изменить параметр "PortalUrl", указав корректный Url сайта:

      Code Block
      language

...

    1. bash
      "PortalUrl": "http://www.example.com",

...

    1. Изменить параметр "BasePath",  указав корректный корректный относительный путь для Url:

      Code Block
      language

...

    1. bash

...

    1. "BasePath":

...

    1.  "/workflow/manager",

...

    1. Указать логин/пароль учетной записи администратора:

      Code Block
      language

...

    1. bash

...

    1. "Login": "admin",
      "Password": "admin"

...

    1. Файл mail.json:
      Указать адрес и порт SMTP сервера

...

    1. :

      Code Block
      language

...

    1. bash
      "

...

    1. Host":

...

    1.  "smtp.example.

...

    1. ru",
      "

...

    1. Port": 

...

    1. 587,

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

      Code Block
      languagebash
      "Login": "mail@example.ru",
      "

...

    1. Password":

...

    1.  "

...

    1. 123456"

...

    1. ,

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

      Code Block
      languagebash

...

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

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

      Code Block
      languagebash
      "EnableSsl": true,

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

  1. Скопировать папку приложения Vitro.Server.Core.

...

  1. Web в желаемое расположение:

    Code Block
    languagebash
    sudo cp -r ~/Vitro.Server.MultiPlatform.Linux

...

  1. -xx.x.xx.xx/Vitro

...

  1. .Server.Core.Web /usr/

...

  1. local

...

  1. Сменить владельца для папки приложения:

    Code Block
    languagebash
    sudo chown -R www-data:www-data /usr/local/Vitro.Server.Core.Web

...

  1. Установить атрибут "Исполняемый" для файла Vitro.Server.Core.Web:

    Code Block
    languagebash
    sudo chmod +x /usr/local/Vitro.Server.Core.Web/Vitro.Server.Core.Web

...

  1. Создать и отредактировать файл модуля systemd для запуска службы:

    Code Block
    languagebash
    sudo nano /lib/systemd/system/vitro-server.service

...

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

    Code Block
    languagebash
    [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

...

  1. Применить изменения и запустить службу:

    Code Block
    language

...

  1. bash
    sudo systemctl enable vitro-server
     
    sudo systemctl start vitro-server

...

  1. Проверить выполняется ли прослушивание на порту, заданном в файле модуля (здесь 4615) для адреса Lo интерфейса:

    Code Block
    language

...

  1. bash
    netstat -ltnp
     
    Proto Recv-Q Send-Q Local 

...

  1. Address     

...

  1.  Foreign 

...

  1. Address     

...

  1.  State     

...

  1.  PID/Program name
     
    ...
     
    

...

  1. tcp             

...

  1. 0           

...

  1. 0 127.0.0.1:

...

  1. 4615       

...

  1. 0.0.0.0:*

...

  1.                    

...

  1.  LISTEN   -
     
    ...

...

  1. Скопировать папку приложения в желаемое расположение:

    Code Block
    languagebash
    sudo cp -r ~/Vitro.Server.MultiPlatform.Linux-xx.x.xx.xx/Vitro.Server.Workflow.Manager.Web /usr/local

27. Скопировать папку Vitro в папку приложения:

Code Block
languagebash
sudo cp -r Vitro.Server.MultiPlatform.Linux-xx.x.xx.xx/Vitro /usr/local/Vitro.Server.Workflow.Manager.Web/Vitro

...

  1. Сменить владельца для папки приложения:

    Code Block
    languagebash
    sudo chown -R www-data:www-data /usr/local/Vitro.Server.Workflow.Manager.Web

...

  1. Установить атрибут "Исполняемый" для файла Workflow.Manager.Web:

    Code Block
    languagebash
    sudo chmod +x /usr/local/Vitro.Server.Workflow.Manager.Web/Vitro.Server.Workflow.Manager.Web

...

  1. Создать и отредактировать файл модуля systemd для запуска службы:

    Code Block
    languagebash
    sudo nano /lib/systemd/system/vitro-workflow.service

...

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

    Code Block
    languagebash
    [Unit]
    Description=Vitro Workflow Manager .NET Web Application
    

...

  1.   
    [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
    

...

  1.   
    [Install]
    WantedBy=multi-user.target

...

  1. Применить изменения и запустить службу:

    Code Block
    languagebash
    sudo systemctl enable vitro-workflow
    

...

  1.   
    sudo systemctl start vitro-workflow

...

  1. Проверить выполняется ли прослушивание на порту, заданном в файле модуля (здесь 4616) для адреса Lo интерфейса:

    Code Block
    languagebash
    netstat -ltnp
    

...

  1.   
    Proto Recv-Q Send-Q Local Address      Foreign Address      State      PID/Program name
    

...

  1.   
    ...
    

...

  1.   
    tcp             0           0 127.0.0.1:4616       0.0.0.0:*                    LISTEN   -
    

...

  1.   
    ...

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

...

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

...

  1. pfx 

    Code Block
    languagebash
    curl "https://linkTo/example.ru.pfx" --output 'example.ru.pfx'

...

  1. Для получения из *.pfx сертификата сервера в формате pem выполнить: 

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

...

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

...

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

    Code Block
    languagebash
    openssl pkcs12 -in example.ru.pfx -nocerts -out example.ru.key

...

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

...

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

    Code Block
    languagebash
    openssl rsa -in example.ru.key -out example.ru.pem

...

  1. Скопировать полученные файлы сертификата и незащищенного паролем приватного ключа в /etc/ssl/private (либо иное удобное расположение)

...

  1. Code Block
    languagebash
    sudo cp 

...

  1. example.ru.* /etc/ssl/private

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

...

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

    Code Block
    language

...

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

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

...

  1. bash
    sudo nano 

...

  1. /etc/nginx/sites-available/default

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

    Code Block
    languagebash
    # Default server configuration
    #
     
    server {
          

...

  1.   listen 80 default_server;
            

...

  1. listen [::]:80 default_server;
     
            

...

  1. # Only allow access if the host is correct
            

...

  1. if ( $host != "vitro.example.ru" ){
                

...

  1. return 444; #CONNECTION CLOSED WITHOUT RESPONSE
    

...

  1.         }
            
            #permanent redirekt from http to https
          

...

  1.   

...

  1. return 301 https://$host$request_uri;
    }
     
    server {
            

...

  1. # SSL configuration
          

...

  1.   

...

  1. #
            

...

  1. listen 443 ssl default_server;
            

...

  1. listen [::]:443 ssl default_server;
     
            

...

  1. server_name vitro.example.ru;
     
            

...

  1. ssl_certificate

...

  1.      

...

  1. /etc/ssl/private/example.ru.pem;
            

...

  1. ssl_certificate_key /etc/ssl/private/example.ru.key;
     
          

...

  1.   # Only allow access if the host is correct
          

...

  1.   

...

  1. if ( $host != "vitro.example.ru" ){
                

...

  1. return 444; #CONNECTION CLOSED WITHOUT RESPONSE
            

...

  1. }
     
            

...

  1. proxy_buffer_size   

...

  1. 1M;
          

...

  1.   proxy_buffers   

...

  1. 4 1M;
      

...

  1.       proxy_read_timeout 1h;
            

...

  1. proxy_send_timeout 1h;

...

  1. 
     
            

...

  1. location / {
                  

...

  1.   #proxying traffic to upstream application (Vitro.Server.Core.Web)
                  

...

  1.   proxy_pass http://127.0.0.1:4615;
            

...

  1. }
    

...

  1.   
            

...

  1. location /workflow/manager {
    

...

  1.                 proxy_pass http://localhost:4616/workflow/manager;
            

...

  1. }  
    }

...

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

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

      Code Block
      language

...

    1. bash
      client_max_body_size 100000M;

...

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

...

    1. Ключи для помещения в секцию server (или location):

      Code Block
      language

...

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

...

  1. nginx.conf


  1. Code Block
    language

...

  1. bash
    sudo nano /etc/nginx/nginx.conf

...

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

    Code Block
    languagebash
    proxy_cache_path 

...

  1.  /var/cache/nginx 

...

  1.  levels=1:2   

...

  1.  keys_zone=STATIC:10m inactive=24h 

...

  1.  max_size=1g;

...

  1. Итоговые конфигурационные файлы:

    Code Block
    language

...

  1. bash
    title/etc/nginx/nginx.conf
    user www-data;
    worker_processes auto;
    pid /run/nginx.pid;
    include /etc/nginx/modules-enabled/*.conf;
    events {
    

...

  1.     worker_connections 768;
    

...

  1.     # multi_accept on;
    }
    http {
    

...

  1.     ##
    

...

  1.     # Basic Settings
    

...

  1.     ##
    

...

  1.     sendfile on;
    

...

  1.     tcp_nopush on;
    

...

  1.     types_hash_max_size 2048;
    

...

  1.     # server_tokens off;
    

...

  1.     # server_names_hash_bucket_size 64;
    

...

  1.     # server_name_in_redirect off;
    

...

  1.     include /etc/nginx/mime.types;
    

...

  1.     default_type application/octet-stream;
    

...

  1.     ##
    

...

  1.     # SSL Settings
    

...

  1.     ##
    

...

  1.     ssl_protocols TLSv1 TLSv1.1 TLSv1.2 TLSv1.3; # Dropping SSLv3, ref: POODLE
    

...

  1.     ssl_prefer_server_ciphers on;
    

...

  1.     ##
    

...

  1.     # Logging Settings
    

...

  1.     ##
    

...

  1.     access_log /var/log/nginx/access.log;
    

...

  1.     error_log /var/log/nginx/error.log;
    

...

  1.     ##
    

...

  1.     # Gzip Settings
    

...

  1.     ##
    

...

  1.     gzip on;
         
        

...

  1. proxy_cache_path 

...

  1.  /var/cache/nginx 

...

  1.  levels=1:2

...

  1.    

...

  1.  keys_zone=STATIC:10m inactive=24h 

...

  1.  max_size=1g;
    

...

  1.      
        # gzip_vary on;
    

...

  1.     # gzip_proxied any;
    

...

  1.     # gzip_comp_level 6;
    

...

  1.     # gzip_buffers 16 8k;
    

...

  1.     # gzip_http_version 1.1;
    

...

  1.     # gzip_types text/plain text/css application/json application/javascript text/xml application/xml application/xml+rss text/javascript;
    

...

  1.     ##
    

...

  1.     # Virtual Host Configs
    

...

  1.     ##
    

...

  1.     include /etc/nginx/conf.d/*.conf;
    

...

  1.     include /etc/nginx/sites-enabled/*;
    }
    Code Block
    language

...

  1. bash
    title/etc/nginx/sites-available/default
    # Default server configuration
    #
     
    server

...

  1.  {
            listen 80 default_server;
            

...

  1. listen [::]:80 default_server;
     
          

...

  1.   # Only allow access if the host is correct
            

...

  1. if ( $host != "vitro.example.ru" ){
                

...

  1. return 444; #CONNECTION CLOSED WITHOUT RESPONSE
            

...

  1. }
          

...

  1.   
          

...

  1.   

...

  1. #permanent redirekt from http

...

  1.  to https
            return 301 https://$host$request_uri;
    }
     
    server {
            

...

  1. # SSL configuration
          

...

  1.   #
            

...

  1. listen 443 ssl default_server;
          

...

  1.   

...

  1. listen [::]:443 ssl default_server;
     
            

...

  1. server_name vitro.example.ru;
    

...

  1.  
            client_max_body_size 100000M;
     
          

...

  1.   

...

  1. ssl_certificate     

...

  1. /etc/ssl/private/example.ru.pem;
    

...

  1.       

...

  1.   ssl_certificate_key /etc/ssl/private/example.ru.key;
     
            

...

  1. # Only allow access if the host is correct
          

...

  1.   

...

  1. if ( $host != "vitro.example.ru" ){
                

...

  1. return 444; #CONNECTION CLOSED WITHOUT RESPONSE
          

...

  1.   }          
     
          

...

  1.   

...

  1. proxy_buffer_size   

...

  1. 1M;
          

...

  1.   

...

  1. proxy_buffers   

...

  1. 4 1M;
    

...

  1.         

...

  1. proxy_read_timeout 1h;
            

...

  1. proxy_send_timeout 1h;

...

  1.  
     
            

...

  1. location / {
                  

...

  1.   #proxying traffic to upstream application (Vitro.Server.Core.Web)
                  

...

  1.   proxy_pass http://127.0.0.1:4615;
    

...

  1.                 proxy_buffering        on;         }
    

...

  1.   
            

...

  1. location /workflow/manager {
                  

...

  1.   proxy_pass http://localhost:4616/workflow/manager;
            

...

  1. }
    }

...

  1. Выполнить перезагрузку службы nginx:

    Code Block
    language

...

  1. bash
    sudo systemctl reload nginx

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

  1. Перейти на вкладку Workflow Defenitions в Elsa
    Code Block
    languagebash
    http://vitro.example.ru/workflow/manager/workflow-definitions
    где vitro.example.ru - адрес сайта
     
  2. Нажать Нажать Create workflow 
    Image RemovedImage Added
  3. Нажать Import 
    Image RemovedImage Added

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

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

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