Сервер БД
...
...
Установка необходимых пакетов ПО из репозиториев:
Code Block language bash sudo apt-get update && sudo apt-get upgrade sudo apt-get install unzip curl postgresql postgresql-client postgresql-contrib
...
Warning title Важно! Нужно учесть, что по умолчанию файлы баз данных размещаются на системном разделе. Для переноса хранилища на другой раздел следуйте инструкции.
Warning title Важно! Настройки логирования по умолчанию не являются оптимальными и могут очень быстро заполнить диск логами. Нужно выполнить настройку по инструкции.
- Отредактировать конфигурационные файлы 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'
...
LOCALE_PROVIDER = 'icu' ICU_LOCALE =
...
'ru-u-kn-true' TEMPLATE = template0 CONNECTION_LIMIT = -1;Создать новую базу данных с именем workflow:
Code Block language bash postgres-#CREATE DATABASE workflow
...
WITH
...
OWNER = vitrodbuser
...
ENCODING = 'UTF8'
...
LOCALE_PROVIDER = 'icu' ICU_LOCALE = 'ru-u-kn-true' TEMPLATE = template0 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
...
Warning Без 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/
...
Настроить уровень доступа на папке
...
:
Code Block language bash sudo chmod 500 /etc/Vitro/
- Сменить владельца для папки:
Code Block sudo chown -R www-data:www-data /etc/Vitro - Внести изменения в конфигурационные файлы:
Файл db.json:
Code Block language bash sudo nano /etc/Vitro/Server/Conf/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/Server/Conf/workflow.json
...
Изменить строку соединения, указав в качестве значения для атрибута "server" имя или IP сервера БД, а в качестве значения для атрибута "database" название созданной в п.10 базы данных:
Code Block language
...
bash
...
"ConnectionString": "server=vitrodbserver;database=workflow;user id=vitrodbuser;password=@pwd4vitro!;Include Error Detail=true",
...
Файл 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":
...
- указать логин/пароль учетной записи администратора:
...
| language | js |
|---|---|
| title | Json |
...
"mail@example.ru", "FromName": "
...
mail@example.ru",
...
Указать используется ли SSL для подключения к SMTP серверу
...
:
Code Block language
...
bash
...
"
...
EnableSsl":
...
true,Убедиться, что в файле есть параметр SecureSocketOptions:
Code Block language bash "SecureSocketOptions": "StartTls"Остальные параметры оставить по умолчанию.
Скопировать папку приложения 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 -
...
21. Сменить владельца для папки приложения:
...
| language | bash |
|---|
...
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
...
Сменить владельца для папки приложения:
Code Block language bash sudo
...
chown -
...
R www-data:www-data /usr/local/Vitro.Server.Workflow.Manager.Web
...
Установить атрибут "
28. Сменить владельца для папки приложения:
| Code Block | ||
|---|---|---|
| ||
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.enc.key
...
В процессе будет запрошен пароль. Далее будет запрошен новый пароль для нового файла ключа (в этом случае в качестве пароля вводится НЕ пустое значение, любой пароль).
...
Для получения незащищенного паролем приватного ключа (из защищенного паролем файла ключа полученного на предыдущем шаге) выполнить:
Code Block language bash openssl rsa -in example.ru.enc.key -out example.ru.
...
key
...
Скопировать полученные файлы сертификата и незащищенного паролем приватного ключа в /etc/ssl/private (либо иное удобное расположение)
...
Code Block language bash sudo cp
...
example.ru.* /etc/ssl/private
Настройка обратного проксирования
...
| Anchor | ||||
|---|---|---|---|---|
|
Настроить обратное проксирование при помощи nginx, отредактировав конфигурационный файл:
Code Block language
...
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;
...
...
...
proxy_set_header X-Real-IP $remote_addr; proxy_
...
set_header
...
4. Выполнить перезагрузку службы nginx:
| Code Block | ||
|---|---|---|
| ||
sudo systemctl reload nginx |
Добавление шаблонов рабочих процессов
...
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; } }Выполнить перезагрузку службы nginx:
Code Block language bash sudo systemctl reload nginx
Добавление шаблонов рабочих процессов
Перейти на вкладку Workflow Defenitions в Elsa
Code Block language bash http://vitro.example.ru/workflow/manager/workflow-definitions- Нажать Create workflow
- Нажать Import
- Выбрать файл шаблона из папки workflows дистрибутива
- После загрузки шаблона нажать Publish
- Перейти обратно на вкладку Workflow defenitions и убедиться, что шаблон создан
- Таким образом добавить все шаблоны из папки workflows дистрибутива
Настройка системы
Необходимо указать адрес портала в ключе Site.PortalUrl.
Для этого нужно:
- Перейти в список Конфигурация пространства Центр Администрирования (список по умолчанию скрыт).
- Открыть папку Общие настройки
Для ключа Адрес портала указать в поле Значение (строка) адрес портала в виде https://example.com
Warning Важно!
Адрес портала не должен заканчиваться символом слэша.
Добавление лицензии
Для работы серверной части требуется лицензионный ключ.
Если лицензионного ключа нет, то запросы на обновление элементов выдают ошибку "Лицензионные ограничения".
Лицензионный ключ предоставляется по запросу к менеджеру и должен быть запрошен повторно перед обновлением системы.
После установки лицензионный ключ необходимо разместить в списке Лицензии пространства Центр администрирования.
Ссылка на список выведена в сайдбар:
...




