Инструкция по разворачиванию сервиса
«Правовая помощь онлайн»
Cервис состоит из следующих компонентов:
- Приложения TrueConf Server
- Веб-приложение (комплекс приложений) обеспечивающих процесс взаимодействия пользователя с системой.
Аппаратные требования для развертывания сервиса
- Веб-приложение:
- ЦПУ: 4
- ОЗУ: 8 Гб
- HDD: 80 Гб
- Trueconf сервер:
- Аппаратные требования описаны на официальной странице разработчика
Сетевые настройки
-
TrueconfServer: для корректной работы сервиса должны быть доступны из сети интернет порты:
Порт Транспорт Протокол 4307 tcp trueconf 443 tcp https 80 tcp http 53000-55000 udp/tcp WebRTC -
Веб-приложение:
Порт Транспорт Протокол 443 tcp https 80 tcp http
В случае, когда Trueconf Server и Веб-приложение находится во внутренней сети предприятия и не имеют белых IP адресов, необходимо дополнительно настроить proxy server (nginx, ha-proxy, traefik, … ). Пример конфигурационных файлов для nginx proxy можно найти в Приложении.
Системные требования:
Для разворачивания веб-приложения необходима операционная система семейства Linux со следующим установленным ПО:
docker
версии не ниже 20.10.9docker-compose
не ниже v2.9.0
Перед запуском сервиса необходимо на отдельном хосте установить и сконфигурировать сервер TrueConf следуя инструкциям на официальной странице поставщика ПО.
После установки, регистрации и базовой настройки сервера TrueConf, необходимо дополнительно произвести настройки для обеспечения взаимодействия с веб-приложением.
- Добавить пользователя для API OAuth2 авторизации на сервере TrueConf
- Сгенерировать ключ API
- Включить поддержку HTTPS
Конфигурирование веб-приложения производится настройкой следующих файлов из поставки:
- .env – отвечает за базовые настройки сервиса
- .smtp – отвечает за настройки smtp транспорта отправки e-mail участникам системы
- docker-compose.yml – отвечает за запуск сервисов веб-приложения
Файл .env содержит следующие переменные:
# Мнемоника для авторизации на шлюзе ЕСИА
OAUTH_CLIENT_ID=TEST161
#Секретный ключ для шифрования данных пользователя в системе (может быть любой)
SECRET_KEY_BASE=6981adf43fcb543c9a7e5e4da548f263806105bc0fdd5d758
#Перечень получаемых данных пользователя
ESIA_SCOPE=openid fullname id_doc birthdate snils email mobile addresses
#Сертификат для взаимодействия со шлюзом ЕСИА
ESIA_CERT_FILE=cert_HELPONLINE29.cer
#Ключ для взаимодействия со шлюзом ЕСИА
ESIA_KEY_FILE=gost_secret_HELPONLINE29.key
#Для тестовый среды
TEST_OAUTH_CLIENT_ID=HELP161
TEST_ESIA_CERT_FILE=cert_HELP161.cer
TEST_ESIA_KEY_FILE=gost_secret_HELP161.key
#Имя хоста по которому доступен сервер Trueconf
TRUECONF_HOST=https://trueconf.mfc.ru/
#ID приложения OAuth2 авторизации
TRUECONF_CLIENT_ID=9a98712333ad886b4754fee25bccd8a887b1ce9b
#SECRET приложения OAuth2 авторизации
TRUECONF_SECRET=20625843c50bb3a9803eeb42b28f6a1f58b0c4eb
#Ключ для доступа к API сервера TrueConf
TRUECONF_ROOT_TOKEN=JXrHdXKGnA4OSj2zrQznej1Ip5SQQzKK
#Номер тестовой конференции созданной на сервере TrueConf
TRUECONF_TEST_CONFERENCE=8832247236
#
ALLOW_TODAY_RECEPTION=true
TRUECONF_RECORDS_CLIENT_ID=22f355c0bf8bbfcfff62dc572fb839448973fcc7
TRUECONF_RECORDS_SECRET=efa8314b5b6b437f6b8bcce9b190aafc0a8cfe35
Файл .smtp содержит следующие переменные:
#Письма будут приходить от имени данного пользователя
EMAIL_FROM=helponline@mfc.ru
#
SMTP_ADDRESS=127.0.0.1
SMTP_PORT=25
SMTP_DOMAIN=mfc.ru
SMTP_USER_NAME=helponline@mfc.ru
SMTP_PASSWORD=the_best_passwd
SMTP_AUTHENTIFICATION=plain
SMTP_ENABLE_STARTTLS_AUTO=false
Файл docker-compose.yml содержит инструкции по запуску основного сервиса Web приложения и дополнительных вспомогательных микросервисов:
version: "2"
services:
db:
restart: always
image: postgres:9.6
container_name: priem-db
environment:
- POSTGRES_HOST_AUTH_METHOD=trust
volumes:
- ./db:/var/lib/postgresql/data
priem:
restart: always
image: priem.harbor.rnds.pro/priem/mfc-reception:latest
container_name: priem-rails
ports:
- 127.0.0.1:12889:80
tmpfs: /tmp
command: ['/home/app/docker/start.sh']
extra_hosts:
- "trueconf.mfc.ru:192.168.1.100"
- "helponline.mfc.ru:192.168.1.99"
volumes:
- ./data/uploads:/home/app/storage/uploads
- ./data/keys:/home/app/config/keys
env_file:
- ./smtp.env
environment:
- DOMAIN=https://helponline.mfc.ru
- RAILS_ENV=production
- NODE_ENV=production
- TRUECONF_HOST=${TRUECONF_HOST}
- TRUECONF_CLIENT_ID=${TRUECONF_CLIENT_ID}
- TRUECONF_SECRET=${TRUECONF_SECRET}
- TRUECONF_ROOT_TOKEN=${TRU3ECONF_ROOT_TOKEN}
- TRUECONF_TEST_CONFERENCE=${TRUECONF_TEST_CONFERENCE}
- YA_METRIC=${YA_METRIC}
- ESIA_SCOPE=${ESIA_SCOPE}
- OAUTH_REDIRECT=https://helponline.mfc.ru/users/auth/esia_oauth/callback
- OAUTH_LOGOUT_REDIRECT=https://helponline.mfc.ru/users/sign_out
- OAUTH_CLIENT_ID=${OAUTH_CLIENT_ID}
- ESIA_CERT_FILE=${ESIA_CERT_FILE}
- ESIA_KEY_FILE=${ESIA_KEY_FILE}
- TEST_OAUTH_REDIRECT=https://helponline.mfc.ru/users/auth/esia_oauth_test/callback
- TEST_OAUTH_LOGOUT_REDIRECT=https://helponline.mfc.ru/users/sign_out
- TEST_OAUTH_CLIENT_ID=${TEST_OAUTH_CLIENT_ID}
- TEST_ESIA_CERT_FILE=${TEST_ESIA_CERT_FILE}
- TEST_ESIA_KEY_FILE=${TEST_ESIA_KEY_FILE}
- CRYPTO_PROVIDER=openssl
- API_IDENTIFIER=mfc_identifier
- API_SECRET=mfc_secret
- DATABASE_NAME=mfc_reception
- DATABASE_HOST=db
#
- SECRET_KEY_BASE=${SECRET_KEY_BASE}
- WKHTMLTOPDF_BIN=/usr/bin/wkhtmltopdf
- SHOW_ABOUT_TEST=false
- REDIS_URL=redis://redis:6379/1
- ALLOW_TODAY_RECEPTION=${ALLOW_TODAY_RECEPTION}
- PDF_LAYOUT=${PDF_LAYOUT}
- OAUTH_IGNORES_STATE=${OAUTH_IGNORES_STATE}
- TRUECONF_RECORD_KEEP_DAYS=${TRUECONF_RECORD_KEEP_DAYS}
- TRUECONF_RECORDS_CLIENT_ID=${TRUECONF_RECORDS_CLIENT_ID}
- TRUECONF_RECORDS_SECRET=${TRUECONF_RECORDS_SECRET}
- TIME_ZONE=${TIME_ZONE}
worker:
restart: always
image: priem.harbor.rnds.pro/priem/mfc-reception:3cf7a35a
container_name: priem-worker
tmpfs: /tmp
command: ['/home/app/docker/start_worker.sh']
extra_hosts:
- "trueconf.mfc.ru:192.168.1.100"
- "helponline.mfc.ru:192.168.1.99"
volumes:
- ./data/uploads:/home/app/storage/uploads
env_file:
- ./smtp.env
environment:
- DOMAIN=https://helponline.mfc.ru
- RAILS_ENV=production
- NODE_ENV=production
- TRUECONF_HOST=${TRUECONF_HOST}
- TRUECONF_CLIENT_ID=${TRUECONF_CLIENT_ID}
- TRUECONF_SECRET=${TRUECONF_SECRET}
- TRUECONF_ROOT_TOKEN=${TRUECONF_ROOT_TOKEN}
- TRUECONF_TEST_CONFERENCE=${TRUECONF_TEST_CONFERENCE}
- OAUTH_REDIRECT=https://helponline.mfc.ru/users/auth/esia_oauth/callback
- OAUTH_LOGOUT_REDIRECT=https://helponline.mfc.ru/users/sign_out
- OAUTH_CLIENT_ID=${OAUTH_CLIENT_ID}
- TEST_OAUTH_REDIRECT=https://helponline.mfc.ru/users/auth/esia_oauth_test/callback
- TEST_OAUTH_LOGOUT_REDIRECT=https://helponline.mfc.ru/users/sign_out
- TEST_OAUTH_CLIENT_ID=${TEST_OAUTH_CLIENT_ID}
- TEST_ESIA_CERT_FILE=${TEST_ESIA_CERT_FILE}
- TEST_ESIA_KEY_FILE=${TEST_ESIA_KEY_FILE}
- ESIA_CERT_FILE=${ESIA_CERT_FILE}
- ESIA_KEY_FILE=${ESIA_KEY_FILE}
- CRYPTO_PROVIDER=openssl
- API_IDENTIFIER=mfc_identifier
- API_SECRET=mfc_secret
- DATABASE_NAME=mfc_reception
- DATABASE_HOST=db
- SECRET_KEY_BASE=${SECRET_KEY_BASE}
- WKHTMLTOPDF_BIN=/usr/bin/wkhtmltopdf
- REDIS_URL=redis://redis:6379/1
- TRUECONF_USER_PREFIX=${TRUECONF_USER_PREFIX}
- ALLOW_TODAY_RECEPTION=${ALLOW_TODAY_RECEPTION}
- PDF_LAYOUT=${PDF_LAYOUT}
- TIME_ZONE=${TIME_ZONE}
redis:
restart: unless-stopped
container_name: priem-redis
stop_grace_period: 30s
logging:
options:
max-size: '50m'
max-file: '3'
driver: json-file
tmpfs: /tmp
image: redis
rufus:
restart: unless-stopped
image: priem.harbor.rnds.pro/priem/mfc-reception:3cf7a35a
container_name: priem-rufus
stop_grace_period: 30s
logging:
options:
max-size: '50m'
max-file: '3'
driver: json-file
tmpfs: /tmp
extra_hosts:
- "trueconf.mfc.ru:192.168.1.100"
- "helponline.mfc.ru:192.168.1.99"
command: ['/home/app/docker/start_rufus.sh']
volumes:
- ./data/uploads:/home/app/storage/uploads
env_file:
- smtp.env
environment:
- DOMAIN=https://helponline.mfc.ru
- RAILS_ENV=production
- NODE_ENV=production
- TRUECONF_HOST=${TRUECONF_HOST}
- TRUECONF_CLIENT_ID=${TRUECONF_CLIENT_ID}
- TRUECONF_SECRET=${TRUECONF_SECRET}
- TRUECONF_ROOT_TOKEN=${TRUECONF_ROOT_TOKEN}
- TRUECONF_TEST_CONFERENCE=${TRUECONF_TEST_CONFERENCE}
- OAUTH_REDIRECT=https://helponline.mfc.ru/users/auth/esia_oauth/callback
- OAUTH_LOGOUT_REDIRECT=https://helponline.mfc.ru/users/sign_out
- OAUTH_CLIENT_ID=${OAUTH_CLIENT_ID}
- TEST_OAUTH_REDIRECT=https://helponline.mfc.ru/users/auth/esia_oauth_test/callback
- TEST_OAUTH_LOGOUT_REDIRECT=https://helponline.mfc.ru/users/sign_out
- TEST_OAUTH_CLIENT_ID=${TEST_OAUTH_CLIENT_ID}
- TEST_ESIA_CERT_FILE=${TEST_ESIA_CERT_FILE}
- TEST_ESIA_KEY_FILE=${TEST_ESIA_KEY_FILE}
- ESIA_CERT_FILE=${ESIA_CERT_FILE}
- ESIA_KEY_FILE=${ESIA_KEY_FILE}
- CRYPTO_PROVIDER=openssl
- API_IDENTIFIER=mfc_identifier
- API_SECRET=mfc_secret
- DATABASE_NAME=mfc_reception
- DATABASE_HOST=db
- SECRET_KEY_BASE=${SECRET_KEY_BASE}
- WKHTMLTOPDF_BIN=/usr/bin/wkhtmltopdf
- REDIS_URL=redis://redis:6379/1
- TRUECONF_USER_PREFIX=${TRUECONF_USER_PREFIX}
- ALLOW_TODAY_RECEPTION=${ALLOW_TODAY_RECEPTION}
- PDF_LAYOUT=${PDF_LAYOUT}
Запуск сервисов после редактирования файлов настройки, осуществляется командой:
docker-compose up -d
Остановка сервисов:
docker-compose down
⚠️ Если производится перенос пилотного проекта с облака на другой сервер, необходимо пренести зарегистрированных пользователей в TrueConf Server. Инструкция как это сделать, есть в Приложении
Резервное копирование данных
В процессе работы веб-сервиса, его состояние сохраняется в базу данных
Для переодического сохранения данных (бэкапа БД) можно выполнить следующие действия:
- Остановить сервис:
docker-compose down
илиdockder-compose pause
- Скопировать и заархивировать папку с файлами базы данных
- Восстановить работу сервиса:
docker-compose up -d
илиdocker-compose unpause
Алтернативно можно использовать утилиту pg_dump
Приложение
Пример конфигурационного файла nginx для TrueConf Server
server {
listen 80 default_server; ## слушаем 80 порт
listen [::]:80 default_server;
listen 443 ssl default_server; ## слушаем 443 порт
listen [::]:443 ssl default_server;
ssl_certificate /etc/cert/server.crt; ## указываем файл сертификата
ssl_certificate_key /etc/cert/server.key; ## указываем файл ключа
root /var/www/html;
index index.html index.htm;
server_name trueconf.mfc29.ru; ## указываем доменное имя сервера
location / {
proxy_pass https://192.168.1.100; ## указываем локальный IP TC сервера
proxy_ssl_verify off;
proxy_set_header Host $host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Real-IP $remote_addr;
}
location /websocket/ {
proxy_pass http://192.168.87.1:4307/websocket/; ## Локальный IP TC сервера
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "Upgrade";
proxy_set_header Host $host;
}
}
Пример конфигурационного файла nginx для Веб-сервиса
map $http_upgrade $connection_upgrade {
default upgrade;
'' close;
}
upstream rails-mfc.ru {
server 127.0.0.1:12889 fail_timeout=0;
}
server {
server_name helponline.mfc.ru; ## указываем доменное имя сервера
reset_timedout_connection on;
charset UTF-8;
location / {
proxy_set_header Host $host;
proxy_set_header X-Forwarded-Host $host;
proxy_set_header X-Forwarded-Server $host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_buffering on;
proxy_buffers 8 8k;
proxy_buffer_size 16k;
proxy_set_header X-Real-IP $remote_addr;
proxy_pass http://rails-mfc.ru;
}
location /cable {
proxy_pass http://rails-mfc.ru;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection $connection_upgrade;
}
listen 443 ssl; ## слушаем 443 порт
ssl_certificate /etc/cert/server.crt; ## указываем файл сертификата
ssl_certificate_key /etc/cert/server.key; ## указываем файл ключа
}
server {
server_name helponline.mfc.ru; ## указываем доменное имя сервера
if ($host = helponline.mfc.ru) {
return 301 https://$host$request_uri; ## Перенаправляем пользователя с http на https
}
listen 80 ;
return 404;
}
Код для переноса ранее зарегистрированных пользователй в веб-сервисе на новую установку Trueconf Server
User.all.each do |user|
begin
user.create_trueconf_user!
rescue Exception => err
puts err
end
end