Инструкция по разворачиванию сервиса
«Правовая помощь онлайн»


Cервис состоит из следующих компонентов:

  • Приложения TrueConf Server
  • Веб-приложение (комплекс приложений) обеспечивающих процесс взаимодействия пользователя с системой.

Аппаратные требования для развертывания сервиса

  1. Веб-приложение:
    • ЦПУ: 4
    • ОЗУ: 8 Гб
    • HDD: 80 Гб
  2. 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.9
  • docker-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. Инструкция как это сделать, есть в Приложении

Резервное копирование данных

В процессе работы веб-сервиса, его состояние сохраняется в базу данных

Для переодического сохранения данных (бэкапа БД) можно выполнить следующие действия:

  1. Остановить сервис: docker-compose down или dockder-compose pause
  2. Скопировать и заархивировать папку с файлами базы данных
  3. Восстановить работу сервиса: 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
  • Инструкция по разворачиванию сервиса «Правовая помощь онлайн»
  • Аппаратные требования для развертывания сервиса
  • Сетевые настройки
  • Системные требования:
  • Файл .env содержит следующие переменные:
  • Файл .smtp содержит следующие переменные:
  • Файл docker-compose.yml содержит инструкции по запуску основного сервиса Web приложения и дополнительных вспомогательных микросервисов:
  • Резервное копирование данных
  • Приложение
  • Пример конфигурационного файла nginx для TrueConf Server
  • Пример конфигурационного файла nginx для Веб-сервиса
  • Код для переноса ранее зарегистрированных пользователй в веб-сервисе на новую установку Trueconf Server