Сервер БД
...
...
Установка необходимых пакетов ПО из репозиториев:
Code Block language bash sudo apt-get update && sudo apt-get upgrade sudo apt-get install unzip curl postgresql postgresql-client postgresql-contrib
...
- Отредактировать конфигурационные файлы postgresql:
Проверяем версию postgresql
Code Block language bash psql --versionОткрываем конфигурационный файл postgresql.conf с учетом установленной версии
Code Block language bash nano /etc/postgresql/14/main/postgresql.conf
...
Изменить в секции # - Connection Settings
...
-
...
значение параметра listen_
...
addresses с localhost на *
должно получиться:Code Block language bash listen_addresses = '*'Открываем конфигурационный файл pg_hba.conf с учетом установленной версии
Code Block language bash nano /etc/postgresql/14/main/pg_hba.conf
...
Изменить в секции # IPv4 Local connections:
...
значение параметра ADDRESS с 127.0.0.1/32 на 0.0.0.0/0
Code Block language bash # IPv4 local connections:
...
host
...
all
...
all
...
0.0.0.0/
...
0
...
scram-sha-256
...
Перезапустить службу:
Code Block language bash sudo systemctl restart postgresql
...
Проверить выполняется ли прослушивание на порту 5432 для всех активных адресов:
Code Block language bash netstat -ltnp
...
tcp
...
0
...
0 0.0.0.0:
...
5432
...
0.0.0.0:*
...
...
LISTEN
...
14569/postgres
...
Добавить пользователя postgres в группу владельца директории, из которой выполняются действия:
Проверка владельца текущей папки (обозначена ".")
Code Block language bash ls –la
...
Добавление пользователя postgres в группу владельца
Code Block language bash sudo usermod -aG dir_owner_group postgres
...
Изменить права группе владельца директории (дать права на изменение). В данном случае путь до директории - . (текущая директория):
Code Block language bash chmod -R 775 .
...
Войти в cli postgresql от имени пользователя postgres:
Code Block language bash sudo -u postgres psql
...
Создать пользователя с ролью суперпользователя:
Code Block language bash postgres-#CREATE USER vitrodbuser WITH PASSWORD '@pwd4vitro!' SUPERUSER;
...
Создать новую базу данных с именем vitrodb:
Code Block language bash postgres-#CREATE DATABASE vitrodb with owner = vitrodbuser encoding = 'UTF8' connection limit = -1;
...
Создать новую базу данных с именем workflow:
Code Block language bash postgres-#CREATE DATABASE workflow with owner = vitrodbuser encoding = 'UTF8' connection limit = -1;
...
Отключиться от cli postgresql:
Code Block language bash postgres-# \q
...
Скачать и распаковать дистрибутив:
Code Block language bash 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
- Инициализация базы данных
- Версия дистрибутива 24.1.38 или выше:
- Версия дистрибутива 24.1.38 или выше:
...
Скопировать в доступное для пользователей расположение (к примеру tmp) файлы инициализации базы данных:
Code Block language bash 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
...
Запустить инициализацию базы из скриптов:
Code Block language bash 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- Версия дистрибутива ниже 24.1.38:
...
Скопировать в доступное для пользователей расположение (к примеру tmp) файл резервной копии базы данных:
Code Block language bash sudo cp ~/Vitro.Server.MultiPlatform.Linux-xx.x.xx.xx/DB/vitro.bak /tmp
...
Запустить восстановление БД из бэкапа:
Code Block language bash sudo -u postgres pg_restore -v -U vitrodbuser -h localhost -d vitrodb /tmp/vitro.bak
...
Запустить восстановление БД из бекапа (для файлов с расширением sql):
Code Block language bash sudo -u postgres psql -U vitrodbuser -h localhost -d vitrodb < /tmp/vitro.bak.sql
Сервер приложений/фронт энд:
...
Установка необходимых пакетов ПО из репозиториев:
Code Block language bash sudo apt-get update && sudo apt-get upgrade sudo apt-get install unzip curl nginx nginx-extras libgdiplus
...
Скачать и распаковать дистрибутив:
Code Block language bash 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
...
Скопировать папку файлового хранилища в расположение, в которое смонтирован раздел для хранения:
Code Block language bash sudo cp -r ~/Vitro.Server.MultiPlatform.Linux-xx.x.xx.xx/DB/VitroFileStorage /mnt/storage
...
Сменить владельца для папки файлового хранилища:
Code Block language bash sudo chown -R www-data:www-data /mnt/storage/VitroFileStorage
18. Внести изменения в конфигурационные файлы:
- перейти в папку с конфигурационными файлами:
Скопировать папку Vitro в расположение /etc/:
Code Block language bash
...
sudo cp -r ~/Vitro.Server.
...
MultiPlatform.Linux-xx.x.xx.xx/Vitro/
...
/etc/- Внести изменения в конфигурационные файлы:
Файл db.json:
Code Block language bash sudo nano /etc/Vitro/db.json
...
Изменить строку соединения, указав в качестве значения для атрибута "server" имя или IP сервера БД, а в качестве значения для атрибута "database" название созданной в п.9 базы данных:
Code Block language
...
bash
...
"ConnectionString": "server=vitrodbserver;database=vitrodb;user id=vitrodbuser;password=@pwd4vitro!",
...
Изменить параметр "FileStoragePath", указав корректный путь к папке файлового хранилища:
Code Block language
...
bash "FileStoragePath": "/mnt/storage/VitroFileStorage",изменить параметр "TempPath", указав корректный путь к папке временных файлов:
Code Block language
...
bash
...
"TempPath": "/tmp",
...
Файл workflow.json:
Code Block language
...
bash
...
sudo nano /etc/Vitro/workflow.json
...
Изменить строку соединения, указав в качестве значения для атрибута "server" имя или IP сервера БД, а в качестве значения для атрибута "database" название созданной в п.10 базы данных:
Code Block language
...
bash
...
"ConnectionString": "server=vitrodbserver;database=workflow;user id=vitrodbuser;password=@pwd4vitro!;Include Error Detail=true",
...
Изменить параметр "BaseUrl", указав корректный Url сайта:
Code Block language
...
bash
...
"BaseUrl": "http://www.example.com",
...
Изменить параметр "PortalUrl", указав корректный Url сайта:
Code Block language
...
bash "PortalUrl": "http://www.example.com",
...
Изменить параметр "BasePath", указав корректный корректный относительный путь для Url:
Code Block language
...
bash
...
"BasePath":
...
"/workflow/manager",
...
Указать логин/пароль учетной записи администратора:
Code Block language
...
bash
...
"Login": "admin", "Password": "admin"
...
Файл mail.json:
Указать адрес и порт SMTP сервера
...
:
Code Block language
...
bash "
...
Host":
...
"smtp.example.
...
ru", "
...
Port":
...
587,Указать данные УЗ для подключения к SMTP серверу:
Code Block language bash "Login": "mail@example.ru", "
...
Password":
...
"
...
123456"
...
,Указать адрес отправителя:
Code Block language bash
...
"FromAddress": "mail@example.ru", "FromName": "mail@example.ru",Указать используется ли SSL для подключения к SMTP серверу:
Code Block language bash "EnableSsl": true,Остальные параметры оставить по умолчанию.
Скопировать папку приложения Vitro.Server.Core.
...
Web в желаемое расположение:
Code Block language bash sudo cp -r ~/Vitro.Server.MultiPlatform.Linux
...
-xx.x.xx.xx/Vitro
...
.Server.Core.Web /usr/
...
local
...
Сменить владельца для папки приложения:
Code Block language bash sudo chown -R www-data:www-data /usr/local/Vitro.Server.Core.Web
...
Установить атрибут "Исполняемый" для файла Vitro.Server.Core.Web:
Code Block language bash sudo chmod +x /usr/local/Vitro.Server.Core.Web/Vitro.Server.Core.Web
...
Создать и отредактировать файл модуля systemd для запуска службы:
Code Block language bash sudo nano /lib/systemd/system/vitro-server.service
...
Содержимое файла модуля:
Code Block language bash [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
...
Применить изменения и запустить службу:
Code Block language
...
bash sudo systemctl enable vitro-server sudo systemctl start vitro-server
...
Проверить выполняется ли прослушивание на порту, заданном в файле модуля (здесь 4615) для адреса Lo интерфейса:
Code Block language
...
bash 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 - ...
...
Скопировать папку приложения в желаемое расположение:
Code Block language bash sudo cp -r ~/Vitro.Server.MultiPlatform.Linux-xx.x.xx.xx/Vitro.Server.Workflow.Manager.Web /usr/local
27. Скопировать папку Vitro в папку приложения:
| Code Block | ||
|---|---|---|
| ||
sudo cp -r Vitro.Server.MultiPlatform.Linux-xx.x.xx.xx/Vitro /usr/local/Vitro.Server.Workflow.Manager.Web/Vitro |
...
Сменить владельца для папки приложения:
Code Block language bash sudo chown -R www-data:www-data /usr/local/Vitro.Server.Workflow.Manager.Web
...
Установить атрибут "Исполняемый" для файла Workflow.Manager.Web:
Code Block language bash sudo chmod +x /usr/local/Vitro.Server.Workflow.Manager.Web/Vitro.Server.Workflow.Manager.Web
...
Создать и отредактировать файл модуля systemd для запуска службы:
Code Block language bash sudo nano /lib/systemd/system/vitro-workflow.service
...
Содержимое файла модуля:
Code Block language bash [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
...
Применить изменения и запустить службу:
Code Block language bash sudo systemctl enable vitro-workflow
...
sudo systemctl start vitro-workflow
...
Проверить выполняется ли прослушивание на порту, заданном в файле модуля (здесь 4616) для адреса Lo интерфейса:
Code Block language bash 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
...
Скачать сертификат в формате *.
...
pfx
Code Block language bash curl "https://linkTo/example.ru.pfx" --output 'example.ru.pfx'
...
Для получения из *.pfx сертификата сервера в формате pem выполнить:
Code Block language bash openssl pkcs12 -in example.ru.pfx -clcerts -nokeys -out example.ru.pem
...
В процессе будет запрошен пароль.
...
для получения из *.pfx приватного ключа в формате pem выполнить:
Code Block language bash openssl pkcs12 -in example.ru.pfx -nocerts -out example.ru.key
...
В процессе будет запрошен пароль. Далее будет запрошен новый пароль для нового файла ключа (в этом случае в качестве пароля вводится НЕ пустое значение, любой пароль).
...
Для получения незащищенного паролем приватного ключа (из защищенного паролем файла ключа полученного на предыдущем шаге) выполнить:
Code Block language bash openssl rsa -in example.ru.key -out example.ru.pem
...
Скопировать полученные файлы сертификата и незащищенного паролем приватного ключа в /etc/ssl/private (либо иное удобное расположение)
...
Code Block language bash sudo cp
...
example.ru.* /etc/ssl/private
Настройка обратного проксирования
...
Настроить обратное проксирование при помощи nginx, отредактировав конфигурационный файл:
Code Block language
...
sudo nano /etc/nginx/sites-available/defaultдолжно получиться:
...
bash sudo nano
...
/etc/nginx/sites-available/defaultДолжно получиться:
Code Block language bash # 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;
...
} }
...
Необходимые настройки:
Для обеспечения загрузки больших файлов добавить в конфигурационный файл сайта Nginx в явном виде значение параметра client_max_body_size
Code Block language
...
bash client_max_body_size 100000M;
...
Для исключения переполнения корневого раздела диска, необходимо включить в Nginx кеширование для обратного проксирования.
...
Ключи для помещения в секцию server (или location):
Code Block language
...
bash proxy_buffering on;
Также для исключения переполнения корневого раздела диска, необходимо включить в Nginx кеширование для обратного проксирования в файле /etc/nginx/
...
nginx.conf
Code Block language
...
bash sudo nano /etc/nginx/nginx.conf
...
Ключ для размещения в конфигурационном файле:
Code Block language bash proxy_cache_path
...
/var/cache/nginx
...
levels=1:2
...
keys_zone=STATIC:10m inactive=24h
...
max_size=1g;
...
Итоговые конфигурационные файлы:
Code Block language
...
bash title /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/*; }
Code Block language
...
bash title /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; }
...
...
location /workflow/manager {
...
proxy_pass http://localhost:4616/workflow/manager;
...
} }
...
Выполнить перезагрузку службы nginx:
Code Block language
...
bash sudo systemctl reload nginx
Добавление шаблонов рабочих процессов
- Перейти на вкладку Workflow Defenitions в Elsa
где vitro.example.ru - адрес сайтаCode Block language bash http://vitro.example.ru/workflow/manager/workflow-definitions
- Нажать Нажать Create workflow
- Нажать Import
- Выбрать файл шаблона из папки workflows дистрибутива
- После загрузки шаблона нажать Publish
- Перейти обратно на вкладку Workflow defenitions и убедиться, что шаблон создан
- Таким образом добавить все шаблоны из папки workflows дистрибутива







