image001

© Syntellect 2019


1. Системные требования для серверов Linux

Требования к программной конфигурации сервера приложений на Linux

Система может запуститься и работать на других похожих дистрибутивах, но мы не гарантируем отсутствие непредвиденных проблем в этом случае.

Требования к программной конфигурации сервера БД на Linux
  • Операционная система Linux любой из перечисленных выше версий, или же любая ОС Linux, поддерживаемая сообществом PostgreSQL.

  • СУБД PostgreSQL 9.6 или старше.

1.1. Ограничения сервера приложений на Linux

Для сервера приложений, развёрнутого на Linux, не поддерживаются следующие функции:

  1. Автоматическая Windows-авторизация (авторизация в домене Active Directory по паре логин/пароль возможна через LDAP)

  2. Синхронизация с Active Directory (плагин Chronos)

  3. Потоковое сканирование (плагин Chronos)

2. Установка TESSA

Для установки платформы TESSA перейдите к разделу, который соответствует выбранному дистрибутиву Linux, и выполните по порядку последующие пункты данного раздела.

Если это ваша первая установка системы на Linux, то мы рекомендуем обратиться к разделу Установка на Ubuntu / Debian / Astra Linux, в котором установка описана наиболее подробным образом для пользователей, не имеющих опыта администрирования Linux. Также устанавливайте Desktop-версию дистрибутива, которая поставляется с оконным интерфейсом (GUI), с помощью которого проще будет выполнять такие операции, как распаковка архива и копирование файлов. В серверных версиях обычно по умолчанию доступна только командная строка.

Даже если у вас большой опыт в администрировании Linux, мы рекомендуем хотя бы бегло просмотреть раздел Установка на Ubuntu / Debian / Astra Linux, чтобы составить представление о полном спектре необходимых настроек. Для других дистрибутивов Linux инструкция приводится в сокращённом виде без комментариев к каждой настройке.

3. Установка на Ubuntu / Debian / Astra Linux

В этой инструкции мы подразумеваем, что при установке была указана учётная запись администратора с именем "tessa". По инструкции система будет установлена в домашнюю папку этого пользователя /home/tessa, где приложения будут автоматически иметь права доступа на все используемые файлы.
Если это ваша первая установка системы на Linux и вы не являетесь опытным администратором Linux, мы рекомендуем придерживаться такого сценария, т.е. указать пользователя с именем "tessa" (и любым паролем). При установке системы в папку, отличную от домашней папки, или при запуске сервисов с правам специальных групп пользователей (например, www-data для веб-сервисов) потребуется также средствами Linux настроить права доступа к папке с файлами (и потенциально к другим папкам, к которым потребуется право на изменение).
Переключение языка ввода, в зависимости от дистрибутива и настроек, может по умолчанию выполняться сочетаниями клавиш Shift+Alt, Ctrl+Shift или Win+Пробел.
Установка Astra Linux тестировалась на релизах Special Edition Смоленск 1.6 и Common Edition Орёл 2.11.5.

Для установки системы в Linux потребуется активно использовать терминал (окно консоли). Терминал можно открыть сочетанием клавиш Ctrl+Shift+T (только Ubuntu и Linux Mint) или найти его в главном меню (для Astra Linux - Пуск → Системные → Терминал Fly; для Debian/Fedora нажмите "Обзор" в левом верхнем углу, после чего с клавиатуры введите Терминал).

В терминале доступны сочетания клавиш:
  • Ctrl+Shift+C или Ctrl+Insert (Astra Linux): копирование в буфер обмена терминала.

  • Ctrl+Shift+V или Shift+Insert (Astra Linux): вставка из буфера обмена терминала.

  • Ctrl+U: очистка текущей введённой команды (удаляет текст от позиции курсора до начала строки).

  • Ctrl+L: очистка окна терминала путём его прокрутки вниз.

  • Ctrl+Z: прервать выполнение команды, которая сейчас выполняется.

В ходе установки мы будет использовать текстовый редактор nano. В нём используются сочетания клавиш:

  • Ctrl+Shift+V или Shift+Insert: вставка из буфера обмена терминала.

  • Shift+стрелки или Shift+PageUp/PageDown: выделение текста.

  • Ctrl+K: удаление выделенного текста или текущей строки, если текст не выделен. Удалённый текст помещается в буфер обмена редактора (он не зависит от буфера обмена терминала).

  • Alt+6 (в справке обозначено как M+^): копирование текущей строки или выделенного текста в буфер обмена редактора.

  • Ctrl+U: вставка текста из буфера обмена редактора в текущую позицию курсора.

  • Alt+T: удалить текст от позиции курсора до конца файла.

  • Для выхода с сохранением изменений используйте Ctrl+X, нажмите Y для подтверждения, что изменения будут сохранены, и затем Enter для подтверждения имени файла. Для выхода без сохранения изменений вместо Y введите N.

3.1. Подготовка дистрибутива TESSA

Распакуйте архив со сборкой. Например, в домашней папке создайте папку build и распакуйте архив в неё. Из этой папки мы будем выполнять автоматизированную установку системы. После завершения установки папку можно будет удалить.

Архив предоставляется в формате .7z, поэтому распаковать его встроенными средствами Linux не всегда возможно. Если архив не открывается встроенным приложением (по двойному клику), то для его открытия потребуется или установить приложение-архиватор с поддержкой формата .7z (обратитесь в раздел Распаковка архивов .7z или к документации вашего дистрибутива).
Альтернативно архив можно распаковать на компьютере Windows или Mac, используя программу 7-zip https://7-zip.org/ Далее создайте архив формата zip (можно опять же с помощью 7-zip), содержащий папки: Configuration, Fixes, linux. Именно эти три папки понадобятся при установке системы на Linux. Такой архив можно перенести на компьютер с установленным Linux и распаковать его встроенным приложением: открываем файл двойным кликом, и нажимаем в окне кнопку "Распаковать" ("Extract"), выбираем целевую папку и ждём завершения.

Откройте окно терминала и перейдите в подпапку linux относительно папки с распакованным архивом. Если вы распаковали архив в предложенную выше папку, то выполните команду:

cd ~/build/linux

Теперь выполните команду, которая инициализирует права на выполнение скриптов и приложений, необходимые для использования системы:

chmod 755 init.sh && ./init.sh

После этого скопируйте папки chronos и web из папки linux в место, где они будут располагаться при запуске.

Для простоты настройки мы рекомендуем создать папку tessa в домашней папке текущего пользователя, учётную запись которого мы также рекомендовали назвать tessa. Таким образом, полный путь к папке, в которую копируются chronos и web, будет такой: /home/tessa/tessa, где первое значение tessa соответствует имени учётной записи, а второе - имени папки, которую мы создали.
Если вы указали другое название папки или учётной записи, то далее в инструкции замените строку /home/tessa/tessa на ваш путь к папке. В некоторых случаях также потребуется указать права доступа для пользователя, от которого будут выполнятся веб-сервис и Chronos (в инструкции это текущий пользователь). Обратитесь к документации вашего дистрибутива, чтобы определить, каким образом указываются права.

В скопированные папки chronos и web переместите файл лицензии *.tlic. Ссылка на файл лицензии присутствует в конфигурационном файле app.json, откройте его в текстовом редакторе и замените строку Syntellect.tlic на имя вашего файла лицензии. Если файл лицензии назван на русском языке, то убедитесь, что текстовый редактор настроен на кодировку UTF-8 BOM.

3.2. Предварительные настройки системы для Debian

На Debian по умолчанию не устанавливается команда sudo. Для упрощения дальнейших действий, который требуют привилегированных прав у пользователя, установим и настроим sudo.

Откройте терминал и выполните команды:

su -

apt -y install sudo

visudo

Откроется текстовый редактор nano для файла с настройками sudo.

Найдите в нём строку:

root    ALL=(ALL:ALL) ALL

Допишите ниже аналогичную строку для учётной записи tessa:

tessa   ALL=(ALL:ALL) ALL

Сохраните и закройте файл: Ctrl+X, Y, Enter.

Введите в терминале:

exit

Дальнейшие действия выполняются по аналогии с Ubuntu / Astra Linux.

3.3. Предварительные настройки системы

Перед началом установки системы установите все обновления, доступные для вашего дистрибутива. Убедитесь, что компьютер имеет доступ к серверам обновлений (например, есть доступ в Интернет).

Систему TESSA можно установить на дистрибутив, не имеющий доступа к серверам обновлений. В этом случае надо настроить доступ к репозиторию на DVD-диске (или USB-Flash), с которых устанавливался Linux. Это необходимо для установки компонентов, требуемых по инструкции ниже. Обратитесь к документации вашего дистрибутива за описанием настройки репозиториев на DVD-диске.
Отсутствие доступа к серверам обновлений - это потенциальная проблема безопасности, т.к. с момента выпуска используемой версии дистрибутива могли появиться важные обновления безопасности, в т.ч. в ядре Linux. Мы рекомендуем обеспечить сетевой доступ к репозиториям вашей версии Linux. Возможно разворачивание копии репозиториев в сети вашего предприятия. Обратитесь к документации вашего дистрибутива.

Для установки обновлений откройте окно терминала и выполните команду (скопируйте и нажмите Enter):

sudo apt update && sudo apt -y upgrade
Если при этой или любой из последующих инсталляций пакетов, несмотря на ключ -y, система спросит подтверждения, предложив варианты [y/N] или [д/Н], то нажмите y и Enter.

Дождитесь окончания обновлений, после чего перезагрузите компьютер.

Теперь установите зависимости для сервера приложений. Для Ubuntu / Debian / Astra Linux Common Edition в окне терминала выполните:

sudo apt -y install libgdiplus

Для Astra Linux Special Edition в окне терминала выполните:

cd ~

wget http://ftp.ru.debian.org/debian/pool/main/libg/libgdiplus/libgdiplus_4.2-1+b1_amd64.deb

sudo apt install ./libgdiplus_4.2-1+b1_amd64.deb

rm ~/libgdiplus_4.2-1+b1_amd64.deb

Для всех дистрибутивов в окне терминала выполните команду:

sudo ln -s /lib/x86_64-linux-gnu/libdl.so.2 /lib/x86_64-linux-gnu/libdl.so

3.4. Установка PostgreSQL

Установите последнюю версию PostgreSQL из репозиториев для вашего дистрибутива. На момент написания инструкции это были версии PostgreSQL 10.4 для Ubuntu/Debian, и PostgreSQL 9.6 для Astra Linux. Подойдут и более новые версии.

Введите в терминале:

sudo apt -y install postgresql postgresql-contrib

Будет выполнена установка, которая завершится через несколько минут.

Теперь создадим пользователя в PostgreSQL, от имени которого будет выполняться подключение системы к СУБД.

Мы создадим суперпользователя, у которого есть право на создание баз данных, чтобы скрипт установки от имени этого пользователя создал базу данных для TESSA. Возможна более тонкая настройка прав, когда вручную создаётся пустая база данных и в ней прописываются права db_owner для пользователя, используемого для подключения из TESSA к СУБД, при этом сам пользователь не является суперпользователем и получает доступ только к БД TESSA. Для выполнения таких настроек обратитесь к документации PostgreSQL.
sudo -u postgres psql postgres

Откроется консоль команды psql, которая подключена к базе данных "postgres" от имени учётной записи "postgres". Введите в ней имя пользователя (здесь это "tessa") и пароль (здесь это "Master1234").

Именно такие логин/пароль указаны в строках подключения сервисов и утилит в папке со сборкой, поэтому для первой установки можно оставить их как есть.
CREATE USER tessa WITH SUPERUSER PASSWORD 'Master1234';
Это команда для создания пользователя в PostgreSQL. Он не имеет отношения к ранее созданной учётной записи Linux, и используется только для подключения к СУБД в строках подключения (в конфигурационных файлах).

Чтобы убедиться, что пользователь создан, и показать информацию по всем пользователям в PostgreSQL, введите:

\du

Также выведите на экран путь к файлу pg_hba.conf, он понадобится нам в инструкции ниже.

SHOW hba_file;
  • Для Ubuntu и PostgreSQL 10.x это путь /etc/postgresql/10/main/pg_hba.conf

  • Для Debian / Astra Linux и PostgreSQL 9.6 это путь /etc/postgresql/9.6/main/pg_hba.conf

  • Если выведенный вам путь отличается, то используйте его, заменив в командах ниже.

Вы можете установить пароль для суперпользователя "postgres", созданного автоматически при установке PostgreSQL. Пароль суперпользователя не требуется для настройки системы, но иногда может быть полезно его указать. Для этого в консоли psql введите команду \password postgres и затем введите пароль.

Выходим из консоли psql, вводим:

\q

Для Astra Linux Special Edition отключите мандатную безопасность для пользователей, не являющихся учётными записями пользователей Linux. Это необходимо для подключения созданного в Postgres пользователя tessa. Откройте для редактирования файл:

sudo nano /etc/parsec/mswitch.conf

Найдите строку:

zero_if_not_found    no

И замените на yes:

zero_if_not_found    yes

Сохраните и закройте файл: Ctrl+X, Y, Enter.

Мандатную безопасность для таких пользователей можно не отключать, но для этого потребуется подключаться от имени пользователя postgres, прописав его во всех файлах app.json (см. ниже), а также задав ему пароль \password postgres в psql (см. выше). Дополнительно с помощью команды setfacl потребуется предоставить права для пользователя postgres (описано ниже).

Для любого дистрибутива: если вы ввели другие логин/пароль, чем было предложено, то замените их в строках подключения для следующих конфигурационных файлов:

  • ~/build/linux/tools/app.json - конфигурационный файл утилиты tadmin в папке внутри распакованного архива. Утилита будет использована для первичной установки и настройки системы.

  • ~/tessa/web/app.json - конфигурационный файл веб-сервиса.

  • ~/tessa/chronos/app.json - конфигурационный файл сервиса Chronos.

Символ ~ соответствует домашней папке текущего пользователя, он же аналогичен пути /home/tessa, где tessa - имя пользователя.

3.5. Настройка доступа по сети к PostgreSQL

Теперь настроим сетевой доступ к СУБД, чтобы сервисы и утилиты TESSA могли подключиться к БД. Обычно СУБД располагается на отдельном сервере, к которому подключается сервер приложений.

Здесь приведены настройки, для которых подразумевается, что доступ к серверу БД ограничен настройками сетевой инфраструктуры или firewall-ом ОС, либо это тестовая установка. Такие настройки разрешают доступ с любых IP-адресов, что позволяет любому устройству подключиться к СУБД при знании логинов/паролей пользователей PostgreSQL. Обратитесь к документации PostgreSQL, чтобы выполнить более специфичную настройку.

Изменим файл pg_hba.conf. Для этого выполните в терминале для Ubuntu:

sudo nano /etc/postgresql/10/main/pg_hba.conf

Для Debian / Astra Linux:

sudo nano /etc/postgresql/9.6/main/pg_hba.conf

Откроется редактор nano. Прокрутите текст вниз и найдите строку:

local   all             all                                      peer

Замените её на (если в правом столбце уже было trust, то не меняйте настройку):

local   all             all                                      md5

Ниже добавьте строку:

host    all             all             0.0.0.0/0                md5

Теперь ещё ниже может быть строка:

host    all             all             ::1/128                  ident

Если она есть и в правом столбце ident (но не md5 или trust), то замените её на:

host    all             all             ::1/128                  md5

Если нужно подключиться к СУБД от имени суперпользователя postgres по заданному паролю (в приведённой инструкции этого не требуется), то дополнительно найдите строку (если она присутствует):

local   all             postgres                                 peer

Замените её на строку:

local   all             postgres                                 md5

Закройте редактор с сохранением изменений.

Теперь откройте на редактирование файл postgresql.conf, который расположен в той же папке, что и предыдущий файл. Для Ubuntu:

sudo nano /etc/postgresql/10/main/postgresql.conf

Для Debian / Astra Linux:

sudo nano /etc/postgresql/9.6/main/postgresql.conf

Найдите в нём строку listen_addresses (нажмите Ctrl+W и введите искомую строку). Теперь уберите ведущий символ комментария #. И замените следующим образом:

listen_addresses = '*'
Вы можете также указать listen_addresses = 'localhost', если СУБД располагается на том же сервере, что и сервер приложений.

Закройте редактор с сохранением изменений.

Для дистрибутива Astra Linux Special Edition если вы не отключали мандатную безопасность для пользователей Postgres, то дополнительно выполните команды в терминале:

sudo setfacl -Rm u:postgres:rx /etc/parsec/macdb

sudo setfacl -Rm u:postgres:rx /etc/parsec/capdb

Для любого дистрибутива: перезапустите сервис PostgreSQL командой:

sudo systemctl restart postgresql

Чтобы проверить настройки подключения для пользователя tessa, выполните команду:

psql -d postgres -U tessa -W

Если выполняется подключение для пользователя postgres, то введите другую команду:

psql -d postgres -U postgres -W

Потребуется ввести пароль пользователя PostgreSQL, созданного ранее, в этой инструкции был указан пароль Master1234.

Если появилась командная строка psql без сообщений об ошибках, то всё настроено правильно. Теперь можно выйти:

\q

3.6. Настройка веб-сервиса TESSA

Теперь подготовим и запустим веб-сервис.

Убедитесь, что предварительно установили строку подключения к PostgreSQL в файле app.json в папке веб-сервиса. Если вы использовали предложенные выше логин/пароль для пользователя PostgreSQL, то настройку конфигурационного файла выполнять не надо.

Создайте конфигурационный файл веб-сервиса и откройте его на редактирование, используя команду в терминале:

sudo nano /etc/systemd/system/tessa.service

Скопируйте следующий текст:

[Unit]
Description=Syntellect Tessa

[Service]
WorkingDirectory=/home/tessa/tessa/web
ExecStart=/home/tessa/tessa/web/Tessa.Web.Server
Restart=always
RestartSec=10
SyslogIdentifier=tessa
User=tessa
UMask=002
Environment=ASPNETCORE_ENVIRONMENT=Production
Environment=DOTNET_PRINT_TELEMETRY_MESSAGE=false

[Install]
WantedBy=multi-user.target

Закройте редактор с сохранением изменений.

Строка WorkingDirectory содержит путь до папки с веб-сервисом. Строка ExecStart должна содержать тот же путь вместе с именем исполняемого файла Tessa.Web.Server.
Вы можете указать учётную запись, из-под которой запускается веб-сервис, как специальную группу User=www-data, но тогда надо будет выполнить настройку прав для файловой папки, а также указать соответствующую группу в настройках сервиса Chronos. Перед выполнением таких настроек проконсультируйтесь с документацией по команде systemctl и по её формату конфигурационных файлов .service в документации по вашему дистрибутиву Linux.
Для учётной записи, от имени которой запускаются сервисы tessa и chronos, помимо доступа к папкам этих сервисов требуется также обеспечить доступ на чтение и запись к временной папке по пути /tmp/user-name (обычно в операционной системе уже разрешён такой доступ). Для учётной записи tessa это путь /tmp/tessa. По установке прав доступа проконсультируйтесь с документацией по вашему дистрибутиву Linux.

Настройте автозапуск веб-сервиса и запустите его, выполнив команду в терминале:

sudo systemctl enable tessa && sudo systemctl start tessa
Здесь tessa соответствует имени сервиса tessa.service без расширения .service.

Проверьте, что сервис успешно запущен, выполнив команду:

sudo systemctl status tessa

Если всё корректно, то рядом с именем сервиса будет выведён зелёный кружок.

Если режим просмотра статуса не закрылся сам, закройте его нажатием кнопки q.

Если позже вы измените файл сервиса .service, то сначала выполните команду sudo systemctl daemon-reload и затем перезапустите изменённый сервис sudo systemctl restart tessa.
Посмотреть сообщения журнала по всем запущенным службам можно, выполнив команду: sudo journalctl -xe

3.7. Создание самоподписанного сертификата

Соединение с веб-сервисом tessa всегда будет выполняться по протоколу https совместно с протоколом TLS v1.2. Для функционирования протоколов на сервере должен быть установлен файл сертификата, полученный в удостоверяющем центре. Этот сертификат будет использоваться клиентскими приложениями при подключении к сервису, чтобы проверить, что адрес сервера является подлинным. Пользователю сертификат будет виден при доступе к веб-клиенту, слева от адресной строки.

Для тестовой настройки можно использовать самоподписанный сертификат, который выписывается командой openssl.

Откройте терминал и выполните команды:

sudo mkdir -p /etc/pki/tls/certs /etc/pki/tls/private

sudo openssl req -x509 -nodes -days 3650 -newkey rsa:2048 -keyout /etc/pki/tls/private/localhost.key -out /etc/pki/tls/certs/localhost.crt

Вам будет предложено последовательно ввести параметры создаваемого сертификата. На любой из вопросов вы можете ввести Enter, тогда будет использовано значение внутри квадратных скобок.

Пример ввода:

  1. Код страны (Country Name): RU

  2. Область, город или штат (State or Province Name): Moscow

  3. Населённый пункт, город (Locality Name): Moscow

  4. Название компании (Organization Name): Syntellect

  5. Подразделение (Organizational Unit Name): IT

  6. Доменное имя или ваше имя (Common Name): mytessa.ru

  7. Адрес email, обычно не заполняют (Email Address): нажимаем Enter

В командах выше мы указали местоположение файла закрытого ключа /etc/pki/tls/private/localhost.key и файла сертификата /etc/pki/tls/certs/localhost.crt. Вы можете указать другие месторасположения файлов, тогда при настройке веб-сервера ниже потребуется указать пути к вашим файлам.

3.8. Настройка веб-сервера Nginx

Мы рекомендуем использовать веб-сервер Nginx, если он официально поддерживается в вашем дистрибутиве Linux, т.е. если он доступен в репозиториях. Это верно для Ubuntu / Debian.

В Astra Linux по умолчанию в репозиториях доступен Apache и недоступен Nginx. Хотя установка Nginx и возможна подключением внешнего репозитория от Debian, но мы рекомендуем в этом случае установить сервер Apache. Также если имеется инфраструктура, уже настроенная на сервере Apache, то используйте её. Инструкции по настройке в разделе Настройка веб-сервера Apache.

Не устанавливайте и не выполняйте настройку для веб-сервера Nginx, если вы используете веб-сервер Apache.

Откройте окно терминала и установите Nginx:

sudo apt -y install nginx

Дождитесь окончания установки. После этого откройте для редактирования файл:

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

Удалите его содержимое (сочетание клавиш Alt+T) и замените на следующее:

map $remote_addr $proxy_forwarded_elem {
    # IPv4 addresses can be sent as-is
    ~^[0-9.]+$          "for=$remote_addr";

    # IPv6 addresses need to be bracketed and quoted
    ~^[0-9A-Fa-f:.]+$   "for=\"[$remote_addr]\"";

    # Unix domain socket names cannot be represented in RFC 7239 syntax
    default             "for=unknown";
}

map $http_forwarded $proxy_add_forwarded {
    # If the incoming Forwarded header is syntactically valid, append to it
    "~^(,[ \\t]*)*([!#$%&'*+.^_`|~0-9A-Za-z-]+=([!#$%&'*+.^_`|~0-9A-Za-z-]+|\"([\\t \\x21\\x23-\\x5B\\x5D-\\x7E\\x80-\\xFF]|\\\\[\\t \\x21-\\x7E\\x80-\\xFF])*\"))?(;([!#$%&'*+.^_`|~0-9A-Za-z-]+=([!#$%&'*+.^_`|~0-9A-Za-z-]+|\"([\\t \\x21\\x23-\\x5B\\x5D-\\x7E\\x80-\\xFF]|\\\\[\\t \\x21-\\x7E\\x80-\\xFF])*\"))?)*([ \\t]*,([ \\t]*([!#$%&'*+.^_`|~0-9A-Za-z-]+=([!#$%&'*+.^_`|~0-9A-Za-z-]+|\"([\\t \\x21\\x23-\\x5B\\x5D-\\x7E\\x80-\\xFF]|\\\\[\\t \\x21-\\x7E\\x80-\\xFF])*\"))?(;([!#$%&'*+.^_`|~0-9A-Za-z-]+=([!#$%&'*+.^_`|~0-9A-Za-z-]+|\"([\\t \\x21\\x23-\\x5B\\x5D-\\x7E\\x80-\\xFF]|\\\\[\\t \\x21-\\x7E\\x80-\\xFF])*\"))?)*)?)*$" "$http_forwarded, $proxy_forwarded_elem";

    # Otherwise, replace it
    default "$proxy_forwarded_elem";
}

server {
    listen 80;
    listen [::]:80;
    return 301 https://$host$request_uri;
}

server {
    listen 443 ssl http2 default_server;
    listen [::]:443 ssl http2 default_server;

    proxy_connect_timeout     600;
    proxy_send_timeout        600;
    proxy_read_timeout        600;
    send_timeout              600;

    ssl_certificate           /etc/pki/tls/certs/localhost.crt;
    ssl_certificate_key       /etc/pki/tls/private/localhost.key;

    ssl on;
    ssl_session_cache  builtin:1000  shared:SSL:10m;
    ssl_protocols TLSv1.2;
    ssl_ciphers HIGH:!aNULL:!eNULL:!EXPORT:!CAMELLIA:!DES:!MD5:!PSK:!RC4;
    ssl_prefer_server_ciphers on;

    location / {
        proxy_pass         http://localhost:5000/;
        proxy_http_version 1.1;
        proxy_set_header   Upgrade $http_upgrade;
        proxy_set_header   Connection keep-alive;
        proxy_set_header   Host $http_host;
        proxy_set_header   X-Real-IP $remote_addr;
        proxy_set_header   X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header   Forwarded $proxy_add_forwarded;
        proxy_cache_bypass $http_upgrade;
        client_max_body_size    0;
    }
}

Закройте редактор с сохранением изменений.

Сервер Nginx настроен как reverse proxy, принимающий любые сообщения по 443-порту, что соответствует протоколу https, и перенаправляющий трафик на localhost порт 5000, именно на этом порту по умолчанию запущено веб-приложение Tessa.Web.Server. Также в настройках указан redirect любых запросов с порта 80 (протокол http) на порт 443 (т.е. на https). В качестве протокола защиты разрешён только TLS v1.2, самый безопасный протокол на настоящий момент.

Перезапустите веб-сервер, выполнив команду:

sudo systemctl restart nginx

Проверьте, что веб-сервер функционирует, выполнив команду:

sudo systemctl status nginx

Если всё корректно, то рядом с именем сервиса будет выведён зелёный кружок.

Если режим просмотра статуса не закрылся сам, закройте его нажатием кнопки q.

Сервер приложений TESSA построен на основе технологии ASP.NET Core. Особенности по его установке на различные дистрибутивы Linux, не покрываемые настоящим руководством, доступны на MSDN по ссылке: https://docs.microsoft.com/en-us/aspnet/core/host-and-deploy/linux-nginx?view=aspnetcore-2.2&tabs=aspnetcore2x

3.9. Настройка веб-сервера Apache

Мы рекомендуем использовать веб-сервер Apache, если Nginx не поддерживается в вашем дистрибутиве Linux или если уже имеется инфраструктура, настроенная на сервере Apache. В противном случае рассмотрите настройку Nginx в разделе Настройка веб-сервера Nginx.

Не устанавливайте и не выполняйте настройку для веб-сервера Apache, если вы используете веб-сервер Nginx.

Откройте окно терминала и установите Apache:

sudo apt -y install apache2

Дождитесь окончания установки. Установите дополнительные модули Apache:

sudo a2enmod headers proxy proxy_balancer proxy_http rewrite ssl http2

После этого откройте для редактирования файл:

sudo nano /etc/apache2/sites-available/000-default.conf

Удалите его содержимое и замените на следующее:

ServerName localhost
RequestHeader set "X-Forwarded-Proto" expr=%{REQUEST_SCHEME}

<VirtualHost *:80>
    Protocols h2 http/1.1
    RewriteEngine On
    RewriteCond %{HTTPS} !=on
    RewriteRule ^/?(.*) https://%{SERVER_NAME}/$1 [R,L]
</VirtualHost>

<VirtualHost *:443>
    Protocols h2 http/1.1
    ProxyPreserveHost On
    ProxyPass / http://localhost:5000/
    ProxyPassReverse / http://localhost:5000/
    LogLevel warn
    ErrorLog ${APACHE_LOG_DIR}/tessa-error.log
    CustomLog ${APACHE_LOG_DIR}/tessa-access.log common

    SSLEngine on
    SSLCipherSuite EECDH+AESGCM:EDH+AESGCM:AES256+EECDH:AES256+EDH
    SSLProtocol ALL -SSLv2 -SSLv3 -TLSv1 -TLSv1.1
    SSLHonorCipherOrder On
    SSLCertificateFile /etc/pki/tls/certs/localhost.crt
    SSLCertificateKeyFile /etc/pki/tls/private/localhost.key

    Header always set Strict-Transport-Security "max-age=63072000; includeSubdomains;"
    Header always set X-Frame-Options DENY
    Header set X-Content-Type-Options "nosniff"
</VirtualHost>

Закройте редактор с сохранением изменений.

Сервер Apache настроен как reverse proxy, принимающий любые сообщения по 443-порту, что соответствует протоколу https, и перенаправляющий трафик на localhost порт 5000, именно на этом порту по умолчанию запущено веб-приложение Tessa.Web.Server. Также в настройках указан redirect любых запросов с порта 80 (протокол http) на порт 443 (т.е. на https). В качестве протокола защиты разрешён только TLS v1.2, самый безопасный протокол на настоящий момент.

Для дистрибутива Astra Linux Special Edition откройте для редактирования файл:

sudo nano /etc/apache2/apache2.conf

Найдите в нём строку:

# AstraMode on

Замените её на:

AstraMode off

Сохраните файл и закройте редактор.

Для любого дистрибутива: перезапустите веб-сервер, выполнив команду:

sudo systemctl restart apache2

Проверьте, что веб-сервер функционирует, выполнив команду:

sudo systemctl status apache2

Если всё корректно, то рядом с именем сервиса будет выведён зелёный кружок.

Если режим просмотра статуса не закрылся сам, закройте его нажатием кнопки q.

Сервер приложений TESSA построен на основе технологии ASP.NET Core. Особенности по его установке на различные дистрибутивы Linux, не покрываемые настоящим руководством, доступны на MSDN по ссылке: https://docs.microsoft.com/en-us/aspnet/core/host-and-deploy/linux-apache?view=aspnetcore-2.2&tabs=aspnetcore2x

3.10. Установка TESSA на новую базу данных

К настоящему моменту должны быть настроены:

  1. СУБД PostgreSQL

  2. веб-сервис tessa.service

  3. веб-сервер Nginx или Apache

  4. настроенный сертификат

Проверьте, что если вы указали другие логин/пароль для пользователя PostgreSQL, чем было указано в инструкции, то для этого раздела необходимо, чтобы в файлах app.json из папок ~/build/linux/tools и ~/tessa/web были прописаны заданные вами логин/пароль этого пользователя. После изменения параметров перезапустите веб-сервис командой sudo systemctl restart tessa

Перейдите в папку "linux" внутри распакованного архива со сборкой.

cd ~/build/linux

Запустите скрипт установки:

./setup.sh

Скрипт предложит ввести:

  1. Адрес подключения к веб-сервисам. Нажмите Enter, чтобы подтвердить значение по умолчанию https://localhost.

  2. Имя базы данных. Введите tessa и нажмите Enter, это приведёт к созданию новой базы данных с именем tessa.

  3. Путь к файловой папке, где будет расположено содержимое файлов. Нажмите Enter, чтобы использовать путь по умолчанию /home/tessa/tessa/files, тогда в ходе установки будет создана папка files рядом с папкой веб-сервиса web и сервиса chronos.

Если в качестве имени базы данных нажать Enter без указания имени БД, то установка будет выполнена для пустой базы данных, которая указана в конфигурационном файле app.json, причём она уже должна быть создана на момент запуска скрипта. Это полезно в сценариях, когда необходимо предварительно настроить права пользователя PostgreSQL, от которого приложения подключаются к СУБД.

После ввода скрипт выведет заданные настройки. Если при вводе настроек допущена ошибка, то нажмите Ctrl+C, чтобы прервать выполнение скрипта, после чего заново запустите его. Если всё корректно, нажмите любую клавишу, чтобы начать установку.

image005

Установка займёт несколько минут. После завершения установки скрипт предложит перезапустить веб-сервис и запустить Chronos.

Если установка завершилась с ошибкой, то скрипт выведет местоположение файла лога, который содержит текст ошибки. После её исправления удалите базу данных командой tools/tadmin DropDatabase (если она была создана), и после запустите скрипт снова.

Выполните команду в терминале для перезапуска сервиса:

sudo systemctl restart tessa

Теперь проверьте, что сервис функционирует. Для этого в любом веб-браузере (например, в Firefox) откройте страницу по адресу: https://localhost/check или https://127.0.0.1/check (localhost может выдавать ошибку на некоторых инсталляциях).

Если вы использовали самоподписанный сертификат при настройке веб-сервера, то подтвердите, что хотите продолжить, несмотря на проблему с сертификатом. При необходимости добавьте сертификат в исключения веб-браузера.

Откроется страница примерно следующего содержания. Если на странице не заметно ошибок при проверке карточек или представлений (строки снизу), то до настоящего момента все действия выполнены корректно.

image002

3.11. Настройка Chronos

Настроим и запустим сервис Chronos, чтобы он выполнял различные фоновые задачи, в т.ч. пересчёт ролей и замещений.

Чтобы в системе выполнялась конвертация файлов для предпросмотра в веб-клиенте, необходимо, чтобы в системе был установлен LibreOffice или OpenOffice. Установить его следует из репозитория или из магазина приложений, если он уже не установлен, обратитесь к документации по вашему дистрибутиву Linux. В конфигурационном файле app.json в настройке OpenOfficePython указано "python3", этого достаточно, чтобы система самостоятельно подключилась к установленным LibreOffice / OpenOffice и выполнила конвертацию.
Если вы хотите отключить конвертацию файлов офисных форматов для предпросмотра в веб-клиенте, то в app.json в папке Chronos ~/tessa/chronos в настройке OpenOfficePython укажите пустую строку "".

Создайте конфигурационный файл сервиса Chronos и откройте его на редактирование, используя команду в терминале:

sudo nano /etc/systemd/system/chronos.service

Скопируйте следующий текст:

[Unit]
Description=Syntellect Chronos

[Service]
WorkingDirectory=/home/tessa/tessa/chronos
ExecStart=/home/tessa/tessa/chronos/Chronos
Restart=always
RestartSec=10
SyslogIdentifier=chronos
User=tessa
UMask=002
Environment=DOTNET_PRINT_TELEMETRY_MESSAGE=false

[Install]
WantedBy=multi-user.target

Закройте редактор с сохранением изменений.

Строка WorkingDirectory содержит путь до папки с веб-сервисом. Строка ExecStart должна содержать тот же путь вместе с именем исполняемого файла Chronos. В строке User указана учётная запись Linux, которая используется для запуска сервиса Chronos.

Настройте автозапуск сервиса Chronos и запустите его, выполнив команду в терминале:

sudo systemctl enable chronos && sudo systemctl start chronos
Здесь chronos соответствует имени сервиса chronos.service без расширения .service.

Проверьте, что сервис успешно запущен, подождав полминуты (пока сервис Chronos инициализируется) и выполнив команду:

sudo systemctl status chronos

Если всё корректно, то рядом с именем сервиса будет выведён зелёный кружок.

Проверьте, функционирует ли unoconv. Найдите процессы unoconv и LibreOffice среди запущенных процессов (последние две строки):

image008

Процессы могут отсутствовать или появиться и тут же завершиться при запуске сразу после установки. В этом случае либо перезагрузите компьютер, либо закройте, а затем сразу откройте окно терминала, в котором перезапустите сервис Chronos:

sudo systemctl restart chronos

Подождите полминуты и запросите статус для сервиса Chronos. Он должен показать информацию, аналогичную приведённой на изображении выше.

Если режим просмотра статуса не закрылся сам, закройте его нажатием кнопки q.

Также проверьте файл лога log.txt, который должен появится в папке Chronos, по умолчанию в ~/tessa/chronos. В файле не должно быть сообщений-ошибок, которые отмечаются словом ERROR или FATAL, но должны быть информационные сообщения о запуске различных плагинов.

Пока запущен сервис Chronos, вы не сможете открывать приложения LibreOffice / OpenOffice на том же компьютере (на сервере приложений). Это связано с тем, что плагин конвертации файлов использует unoconv, который загружает фоновый процесс офиса в режиме прослушивания, чтобы в дальнейшем использовать его для передачи конвертируемых файлов. Если потребуется запустить какое-либо офисное приложение, то временно остановите Chronos командой sudo systemctl stop chronos, а позже запустите его (или он запустится автоматически при перезапуске компьютера).

3.12. Проверка установленной системы TESSA

Откройте веб-браузер и откройте страницу по адресу: https://localhost или https://127.0.0.1 (localhost может выдавать ошибку на некоторых инсталляциях).

Система должна перенаправить на страницу логина в веб-клиент. Введите логин admin и пароль admin, это выполнит вход от имени администратора TESSA с именем "Admin".

image003

Проверьте, что система действительно конвертирует файлы офисных форматов (например, .docx) из веб-клиента.

Создайте любую карточку, приложите к ней тестовый документ 01.docx небольшого размера (не более 1-2 Мб). Если конвертация даже небольшого файла выполняется уже несколько минут, то скорее всего, пакет unoconv не смог корректно инициализироваться.

В этом случае мы рекомендуем такую последовательность действий:

  1. Перезапустите сервер, на котором запущен Chronos:

    sudo reboot
  2. После запуска остановите сервис Chronos:

    sudo systemctl stop chronos
  3. Если вы используете сервер с GUI, то закройте и тут же откройте окно терминала, с которого выполнялась установка системы.

  4. Скопируйте тестовый документ 01.docx в домашнюю папку и выполните следующую команду:

    unoconv -f pdf -o ~/01.pdf ~/01.docx
  5. Конвертация должна быть выполнена достаточно быстро, после чего искомый файл 01.pdf будет расположен в домашней папке. Откройте его, если содержимое тестового документа конвертировано с ошибками или файл не был создан, то обратитесь к документации вашего дистрибутива и к инструкции по команде unoconv.

  6. Запустите сервис Chronos:

    sudo systemctl start chronos
  7. Теперь проверьте ещё раз конвертацию из веб-клиента. Она должна выполнится успешно спустя не более, чем 1-2 минуты для тестового документа.

Вы успешно установили и настроили типовую конфигурацию платформы TESSA.

3.13. Быстрая установка на Astra Linux

Здесь собраны наборы команд и настроек, которые позволят быстро установить всё необходимое для развёртывания тестового стенда на Astra Linux, релиз Смоленск или Орёл. Команды приводятся без пояснений, поэтому для дополнительной информации прочитайте разделы выше.

Установите систему с учётной записью с именем tessa или замените параметры соответствующих команд ниже.

Распаковываем сборку в новую папку ~/build. Команды выполняйте, копируя их под одной (они разделены пустыми строками).

cd ~/build/linux

chmod 755 init.sh && ./init.sh

Копируем файл лицензии в папки chronos и web, меняем в их файлах app.json имя файла лицензии *.tlic. Далее копируем эти две папки в новую ~/tessa.

sudo apt update && sudo apt -y upgrade

sudo apt -y install postgresql postgresql-contrib apache2

sudo a2enmod headers proxy proxy_balancer proxy_http rewrite ssl

sudo mkdir -p /etc/pki/tls/certs /etc/pki/tls/private

sudo openssl req -x509 -nodes -days 3650 -newkey rsa:2048 -keyout /etc/pki/tls/private/localhost.key -out /etc/pki/tls/certs/localhost.crt

Для Astra Linux Common Edition дополнительно выполните команду:

sudo apt -y install libgdiplus

Для Astra Linux Special Edition дополнительно выполните команды:

cd ~

wget http://ftp.ru.debian.org/debian/pool/main/libg/libgdiplus/libgdiplus_4.2-1+b1_amd64.deb

sudo apt install ./libgdiplus_4.2-1+b1_amd64.deb

rm ~/libgdiplus_4.2-1+b1_amd64.deb

Для всех дистрибутивов:

sudo -u postgres psql postgres
CREATE USER tessa WITH SUPERUSER PASSWORD 'Master1234';
\q
sudo nano /etc/apache2/sites-available/000-default.conf

Замените содержимое файла 000-default.conf на текст из раздела Настройка веб-сервера Apache.

sudo nano /etc/postgresql/9.6/main/pg_hba.conf

Отредактируйте файл pg_hba.conf в соответствии с указаниями в разделе Настройка доступа по сети к PostgreSQL.

sudo nano /etc/postgresql/9.6/main/postgresql.conf

Отредактируйте файл postgresql.conf в соответствии с указаниями в разделе Настройка доступа по сети к PostgreSQL.

sudo nano /etc/systemd/system/tessa.service

Вставьте в файл tessa.service текст из раздела Настройка веб-сервиса TESSA.

sudo systemctl enable tessa && sudo systemctl start tessa

sudo systemctl restart postgresql apache2

Теперь запустите скрипт установки TESSA.

cd ~/build/linux

./setup.sh

На вопросы перед установкой нажимайте: [Enter]; tessa [Enter]; [Enter].

sudo nano /etc/systemd/system/chronos.service

Вставьте в файл chronos.service текст из раздела Настройка Chronos.

sudo systemctl enable chronos && sudo systemctl start chronos

Система установлена и готова к работе.

4. Установка на Linux Mint

Выполните шаги из раздела Подготовка дистрибутива TESSA.

Система использует пакетный менеджер apt, но алиас apt не позволяет указывать параметры команды и неявно использует sudo. Поэтому в инструкции используется полный путь к менеджеру пакетов /usr/bin/apt.

Обновите информацию из репозиториев и обновите установленные пакеты до последних версий.

sudo /usr/bin/apt update && sudo /usr/bin/apt -y upgrade

Дождитесь окончания обновлений, после чего перезагрузите компьютер.

Установите зависимости, которые потребуются серверу приложений TESSA.

/usr/bin/apt -y install libgdiplus

sudo ln -s /lib/x86_64-linux-gnu/libdl.so.2 /lib/x86_64-linux-gnu/libdl.so

4.1. Установка и настройка PostgreSQL

Установите из репозитория и выполните первичную настройку сервера PostgreSQL.

sudo /usr/bin/apt -y install postgresql postgresql-contrib

sudo systemctl enable postgresql && sudo systemctl start postgresql

Создайте пользователя, от которого будут подключаться сервисы и утилиты TESSA.

sudo -u postgres psql postgres
CREATE USER tessa WITH SUPERUSER PASSWORD 'Master1234';
\q

Откройте для редактирования файл pg_hba.conf.

sudo nano /etc/postgresql/10/main/pg_hba.conf

Задайте в нём настройки в соответствии с разделом Настройка доступа по сети к PostgreSQL.

Откройте для редактирования файл postgresql.conf.

sudo nano /etc/postgresql/10/main/postgresql.conf

Найдите в нём строку listen_addresses (нажмите Ctrl+W и введите искомую строку). Теперь уберите ведущий символ комментария #. И замените следующим образом:

listen_addresses = '*'

Закройте редактор с сохранением изменений. Перезапустите сервис PostgreSQL командой:

sudo systemctl restart postgresql

4.2. Настройка веб-сервиса TESSA и создание сертификатов

sudo nano /etc/systemd/system/tessa.service

Вставьте этот текст (сочетание клавиш Ctrl+Shift+V).

Теперь настройте автозапуск сервиса и запустите его, выполнив команду:

sudo systemctl enable tessa && sudo systemctl start tessa

Далее обратитесь к раздел Создание самоподписанного сертификата, чтобы создать сертификаты. Или просто выполните команды:

sudo mkdir -p /etc/pki/tls/certs /etc/pki/tls/private

sudo openssl req -x509 -nodes -days 3650 -newkey rsa:2048 -keyout /etc/pki/tls/private/localhost.key -out /etc/pki/tls/certs/localhost.crt

4.3. Установка и настройка веб-сервера Nginx

sudo /usr/bin/apt -y install nginx
sudo nano /etc/nginx/sites-enabled/default

Удалите содержимое файла (сочетание клавиш Alt+T) и вставьте этот текст (сочетание клавиш Ctrl+Shift+V).

Настройте автозапуск сервера и запустите его, выполнив команду:

sudo systemctl enable nginx && sudo systemctl start nginx

4.4. Установка системы и настройка сервиса Chronos

Чтобы установить систему на новую базу данных, запустите следующие команды:

cd ~/build/linux

./setup.sh

Обратитесь к разделу Установка TESSA на новую базу данных за описанием процесса установки.

Обычно достаточно нажать: [Enter]; tessa [Enter]; [Enter].

По завершении установки перезапустите веб-сервис:

sudo systemctl restart tessa

Теперь выполним настройку Chronos. Создайте файл для сервиса Chronos:

sudo nano /etc/systemd/system/chronos.service

Вставьте этот текст (сочетание клавиш Ctrl+Shift+V).

Теперь настройте автозапуск Chronos и запустите его, выполнив команду:

sudo systemctl enable chronos && sudo systemctl start chronos

Обязательно проверьте, функционирует ли unoconv. Для этого выполните команду (подождав полминуты, пока сервис Chronos инициализируется):

sudo systemctl status chronos

Найдите процессы unoconv и LibreOffice среди запущенных процессов (последние две строки):

image008

Процессы могут отсутствовать или появиться и тут же завершиться при запуске сразу после установки. В этом случае либо перезагрузите компьютер, либо закройте, а затем сразу откройте окно терминала, в котором перезапустите сервис Chronos:

sudo systemctl restart chronos

Подождите полминуты и запросите статус для сервиса Chronos. Он должен показать информацию, аналогичную приведённой на изображении выше.

Обратитесь к разделу Проверка установленной системы TESSA, чтобы проверить работу системы.

5. Установка на RedHat Enterprise Linux / CentOS / Fedora / Oracle Linux / РЕД ОС

Установка РЕД ОС тестировалась на релизе РЕД ОС 7.1 МУРОМ.

Выполните шаги из раздела Подготовка дистрибутива TESSA.

Для RedHat Enterprise Linux требуется настроить к этому моменту подписки в менеджере подписок, выполнив регистрацию на сайте и приняв там условия пользовательских соглашений. За подробной информацией обращайтесь к документации RedHat: https://developers.redhat.com/products/rhel/hello-world

Для RedHat Enterprise Linux добавьте дополнительные подписки на репозитории, выполнив команды:

sudo subscription-manager repos --enable rhel-server-rhscl-7-rpms

sudo subscription-manager repos --enable rhel-7-server-optional-rpms

Для всех дистрибутивов обновите информацию из репозиториев и обновите установленные пакеты до последних версий.

sudo yum -y update && sudo yum -y upgrade
На предложение согласиться на загрузку обновлений "Is this ok [y/d/N]?" введите y и нажмите Enter. Аналогичные действия могут потребоваться на предложение получить ключ для одного или нескольких репозиториев.

Дождитесь окончания обновлений, после чего перезагрузите компьютер.

Для ускорения загрузки обновлений в дальнейшем на RedHat Enterprise Linux, CentOS, Oracle Linux и РЕД ОС можно выполнить команду sudo yum makecache fast. Команда не будет работать на Fedora.

Установите зависимости, которые потребуются серверу приложений TESSA.

Для RedHat Enterprise Linux и Oracle Linux:

cd ~

wget https://www.rpmfind.net/linux/epel/7/x86_64/Packages/l/libgdiplus-2.10-9.el7.x86_64.rpm

sudo yum -y localinstall ~/libgdiplus-2.10-9.el7.x86_64.rpm

rm ~/libgdiplus-2.10-9.el7.x86_64.rpm

Для CentOS (последовательно две команды):

sudo yum -y install epel-release

sudo yum -y install libgdiplus

Для Fedora:

sudo yum -y install libgdiplus

Также для Fedora мы рекомендуем установить редактор nano:

sudo yum -y install nano

Для РЕД ОС:

sudo yum -y install libgdiplus

Для CentOS и РЕД ОС выполните команду:

sudo ln -s /usr/lib64/libdl.so.2 /usr/lib64/libdl.so

5.1. Установка и настройка PostgreSQL

Установите из репозитория и выполните первичную настройку сервера PostgreSQL.

Для RedHat Enterprise Linux:

sudo rpm -Uvh https://yum.postgresql.org/10/redhat/rhel-7-x86_64/pgdg-redhat10-10-2.noarch.rpm

sudo yum -y install postgresql10-server postgresql10-contrib

sudo /usr/pgsql-10/bin/postgresql-10-setup initdb

sudo systemctl enable postgresql-10 && sudo systemctl start postgresql-10

Для CentOS:

sudo rpm -Uvh https://yum.postgresql.org/10/redhat/rhel-7-x86_64/pgdg-centos10-10-2.noarch.rpm

sudo yum -y install postgresql10-server postgresql10-contrib

sudo /usr/pgsql-10/bin/postgresql-10-setup initdb

sudo systemctl enable postgresql-10 && sudo systemctl start postgresql-10

Для Fedora / РЕД ОС:

sudo yum -y install postgresql-server postgresql-contrib

sudo postgresql-setup initdb

sudo systemctl enable postgresql && sudo systemctl start postgresql

Для Oracle Enterprise Linux:

sudo rpm -Uvh https://download.postgresql.org/pub/repos/yum/10/redhat/rhel-7-x86_64/pgdg-oraclelinux10-10-2.noarch.rpm

sudo yum -y install postgresql10-server postgresql10-contrib

sudo /usr/pgsql-10/bin/postgresql-10-setup initdb

sudo systemctl enable postgresql-10 && sudo systemctl start postgresql-10

Создайте пользователя, от которого будут подключаться сервисы и утилиты TESSA.

sudo -u postgres psql postgres
CREATE USER tessa WITH SUPERUSER PASSWORD 'Master1234';
\q

Откройте для редактирования файл pg_hba.conf.

Для RedHat Enterprise Linux / CentOS / Oracle Linux:

sudo nano /var/lib/pgsql/10/data/pg_hba.conf

Для Fedora / РЕД ОС:

sudo nano /var/lib/pgsql/data/pg_hba.conf

Задайте в нём настройки в соответствии с разделом Настройка доступа по сети к PostgreSQL.

Откройте для редактирования файл postgresql.conf.

Для RedHat Enterprise Linux / CentOS / Oracle Linux:

sudo nano /var/lib/pgsql/10/data/postgresql.conf

Для Fedora / РЕД ОС:

sudo nano /var/lib/pgsql/data/postgresql.conf

Найдите в нём строку listen_addresses (нажмите Ctrl+W и введите искомую строку). Теперь уберите ведущий символ комментария #. И замените следующим образом:

listen_addresses = '*'

Закройте редактор с сохранением изменений. Перезапустите сервис PostgreSQL.

Для RedHat Enterprise Linux / CentOS / Oracle Linux:

sudo systemctl restart postgresql-10

Для Fedora / РЕД ОС:

sudo systemctl restart postgresql

5.2. Настройка веб-сервиса TESSA и создание сертификатов

sudo nano /etc/systemd/system/tessa.service

Вставьте этот текст (сочетание клавиш Ctrl+Shift+V).

Теперь настройте автозапуск сервиса и запустите его, выполнив команду:

sudo systemctl enable tessa && sudo systemctl start tessa

Далее обратитесь к раздел Создание самоподписанного сертификата, чтобы создать сертификаты. Или просто выполните команды:

sudo mkdir -p /etc/pki/tls/certs /etc/pki/tls/private

sudo openssl req -x509 -nodes -days 3650 -newkey rsa:2048 -keyout /etc/pki/tls/private/localhost.key -out /etc/pki/tls/certs/localhost.crt

5.3. Установка и настройка веб-сервера Nginx

Для RedHat Enterprise Linux / Oracle Linux требуется настроить репозиторий Nginx:

sudo nano /etc/yum.repos.d/nginx.repo

Вставьте следующий текст (сочетание клавиш Ctrl+Shift+V) и сохраните файл.

[nginx]
name=nginx repo
baseurl=http://nginx.org/packages/rhel/7/$basearch/
gpgcheck=0
enabled=1

Для всех дистрибутивов:

sudo yum -y install nginx

Для RedHat Enterprise Linux / Oracle Linux:

sudo nano /etc/nginx/conf.d/default.conf

Удалите содержимое файла (сочетание клавиш Alt+T) и вставьте этот текст (сочетание клавиш Ctrl+Shift+V).

Для CentOS / Fedora / РЕД ОС:

sudo nano /etc/nginx/nginx.conf

Найдите раздел server { и удалите его (сочетание клавиш Ctrl+K удаляет строку). Удалять строки, начинающиеся с символа комментария #, необязательно.

Вставьте на место удалённого этот текст (сочетание клавиш Ctrl+Shift+V).

Для всех дистрибутивов настройте автозапуск сервера и запустите его, выполнив команду:

sudo systemctl enable nginx && sudo systemctl start nginx

Для работоспособности Nginx отключите SELinux (политики безопасности для принудительного контроля доступа).

Если требуется оставить SELinux включённым, то обратитесь к документации по Nginx и по реализации SELinux в вашем дистрибутиве Linux.
sudo nano /etc/sysconfig/selinux

Найдите строку:

SELINUX=enforcing

Замените её на:

SELINUX=disabled

После изменения этой настройки перезагрузите компьютер.

5.4. Настройка LibreOffice или OpenOffice

Убедитесь, что установлен офисный пакет LibreOffice или OpenOffice.

Для RedHat Enterprise Linux если пакет LibreOffice не установлен (отсутствует в меню приложений в группе "Офис"), то установите его командой:

sudo yum -y install libreoffice

Для Oracle Linux пакет LibreOffice отсутствует в поставке и может быть установлен следующим образом:

  1. Скачайте последнюю версию LibreOffice с официального сайта: https://www.libreoffice.org/download/libreoffice-fresh/?type=rpm-x86_64&version=6.0&lang=en-US

  2. Распакуйте архив и откройте папку с содержимым архива в терминале.

  3. Выполните команду:

    sudo yum -y localinstall RPMS/*.rpm
  4. Теперь скаченный архив и содержимое распакованной папки можно удалить.

Для Oracle Linux также потребуется указать, чтобы unoconv, встроенный в Chronos, использовал Python версии 2 (т.к. Python версии 3 отсутствует для этого дистрибутива). Откройте для редактирования файл app.json в папке Chronos:

nano ~/tessa/chronos/app.json

Найдите в нём строку:

"OpenOfficePython": "python3",

Замените её на:

"OpenOfficePython": "python",

Для Oracle Linux переходите к следующему разделу, устанавливать unoconv не требуется.

Для RedHat Enterprise Linux / CentOS / Fedora / РЕД ОС проверьте, что установлен пакет unoconv:

sudo yum -y install unoconv

В конфигурационном файле сервиса Chronos потребуется указать приложение unoconv для использования вместо встроенного скрипта.

nano ~/tessa/chronos/app.json

Найдите строку:

"UnoconvExternalCommand": null,

Замените её на:

"UnoconvExternalCommand": "unoconv",

При конвертации для приложения unoconv требуются права на папку ~/.cache/dconf. Приложение будет запущено от того же пользователя, что и сервис Chronos (в этой инструкции подразумевается текущий пользователь).

Для установки прав выполните команду (если папка ещё не создана, то будет создана):

mkdir -p ~/.cache/dconf

sudo chown -R $USER ~/.cache/dconf

5.5. Установка системы и настройка сервиса Chronos

Чтобы установить систему на новую базу данных, запустите следующие команды:

cd ~/build/linux

./setup.sh

Обратитесь к разделу Установка TESSA на новую базу данных за описанием процесса установки.

Обычно достаточно нажать: [Enter]; tessa [Enter]; [Enter].

По завершении установки перезапустите веб-сервис:

sudo systemctl restart tessa

Теперь выполним настройку Chronos. Создайте файл для сервиса Chronos:

sudo nano /etc/systemd/system/chronos.service

Вставьте этот текст (сочетание клавиш Ctrl+Shift+V).

Теперь настройте автозапуск Chronos и запустите его, выполнив команду:

sudo systemctl enable chronos && sudo systemctl start chronos

Обязательно проверьте, функционирует ли unoconv. Для этого выполните команду (подождав полминуты, пока сервис Chronos инициализируется):

sudo systemctl status chronos

Найдите процессы unoconv и LibreOffice среди запущенных процессов (последние две строки):

image008

Процессы могут отсутствовать или появиться и тут же завершиться при запуске сразу после установки. В этом случае либо перезагрузите компьютер, либо закройте, а затем сразу откройте окно терминала, в котором перезапустите сервис Chronos:

sudo systemctl restart chronos

Подождите полминуты и запросите статус для сервиса Chronos. Он должен показать информацию, аналогичную приведённой на изображении выше.

Обратитесь к разделу Проверка установленной системы TESSA, чтобы проверить работу системы.

6. Установка на Calculate Linux

Установка Calculate Linux тестировалась на релизе Calculate Linux 17.12.2.

Для простоты настройки при установке укажите имя учётной записи tessa.

Выполните шаги из раздела Подготовка дистрибутива TESSA.

Включите текущего пользователя в sudo:

su

visudo

Найдите строку:

root    ALL=(ALL) ALL

Нажмите i и ниже вставьте строку:

tessa   ALL=(ALL) ALL

Нажмите Esc, чтобы выйти из режима вставки, затем нажмите :x (сначала двоеточие, потом x), и после нажмите Enter.

Введите в терминале:

exit

Обновите информацию из репозиториев и обновите пакетный менеджер до последней версии:

sudo emerge --sync

sudo emerge --oneshot portage
Мы не рекомендуем пересобирать и обновлять все пакеты в репозитории, т.к. это занимает длительное время и может привести к ненадёжной инсталляции. Если вы уверены, что требуется обновить все пакеты, то используйте команду sudo emerge -uDUav @world --with-bdeps=y --keep-going а также обратитесь к документации дистрибутива.

Установите зависимости, которые потребуются серверу приложений TESSA.

sudo emerge dev-dotnet/libgdiplus sys-libs/libunwind

Установите редактор nano, чтобы использовать его из консоли вместо vim (опционально):

sudo emerge app-editors/nano

6.1. Установка и настройка PostgreSQL

Установите из репозитория и выполните первичную настройку сервера PostgreSQL. Установка может занять несколько минут.

sudo USE="ssl uuid xml" emerge dev-db/postgresql

sudo emerge --config dev-db/postgresql

sudo rc-service postgresql-10 start && sudo rc-update add postgresql-10 default

Создайте пользователя, от которого будут подключаться сервисы и утилиты TESSA.

sudo -u postgres psql postgres
CREATE USER tessa WITH SUPERUSER PASSWORD 'Master1234';
\q

Откройте для редактирования файл pg_hba.conf.

sudo nano /etc/postgresql-10/pg_hba.conf

Задайте в нём настройки в соответствии с разделом Настройка доступа по сети к PostgreSQL.

Откройте для редактирования файл postgresql.conf.

sudo nano /etc/postgresql-10/postgresql.conf

Найдите в нём строку listen_addresses (нажмите Ctrl+W и введите искомую строку). Теперь уберите ведущий символ комментария #. И замените следующим образом:

listen_addresses = '*'

Закройте редактор с сохранением изменений. Перезапустите сервис PostgreSQL командой:

sudo rc-service postgresql-10 restart

6.2. Настройка веб-сервиса TESSA и создание сертификатов

sudo nano /etc/init.d/tessa

Вставьте следующий текст (сочетание клавиш Ctrl+Shift+V):

#!/sbin/openrc-run
name="Syntellect Tessa"

DAEMONUSER="tessa"
DAEMONDIR="/home/$DAEMONUSER/tessa/web"
DAEMON="$DAEMONDIR/Tessa.Web.Server"
DAEMONARGS=""
LOGDIR="/home/$DAEMONUSER/tessa/logs"
LOGFILE="$LOGDIR/tessa.log"
PIDFILE="/var/run/tessa.pid"

depend() {
    provide tessa
    before nginx
}

start() {
    ebegin "Starting $name service"
    su - $DAEMONUSER -c "mkdir -p '$LOGDIR'"
    su - $DAEMONUSER -c "rm -f '$LOGFILE'"
    start-stop-daemon --start --name "$name" --user $DAEMONUSER \
        --make-pidfile --pidfile "$PIDFILE" --background \
        --stdout "$LOGFILE" --stderr "$LOGFILE" \
        --chdir "$DAEMONDIR" --umask 002 --exec "$DAEMON" \
        -- $DAEMONARGS
    eend $?
}

stop() {
    ebegin "Stopping $name service"
    start-stop-daemon --stop --pidfile "$PIDFILE"
    rm -f "$PIDFILE"
    eend $?
}

Теперь настройте автозапуск сервиса и запустите его, выполнив команду:

sudo chmod 755 /etc/init.d/tessa && sudo rc-service tessa start && sudo rc-update add tessa default

Далее обратитесь к раздел Создание самоподписанного сертификата, чтобы создать сертификаты. Или просто выполните команды:

sudo mkdir -p /etc/pki/tls/certs /etc/pki/tls/private

sudo openssl req -x509 -nodes -days 3650 -newkey rsa:2048 -keyout /etc/pki/tls/private/localhost.key -out /etc/pki/tls/certs/localhost.crt

6.3. Установка и настройка веб-сервера Nginx

Установите Nginx, выполнив команду в терминале:

sudo emerge www-servers/nginx

Откройте файл конфигурации Nginx:

sudo nano /etc/nginx/nginx.conf

Найдите строку вида:

large_client_header_buffers 4 2k;

И замените её на следующую строку, увеличив тем самым максимальный размер клиентских cookie до 8 Кб (что обычно является значением по умолчанию в других дистрибутивах):

large_client_header_buffers 4 8k;

Найдите раздел server { и удалите его (сочетание клавиш Ctrl+K удаляет строку). Удалять строки, начинающиеся с символа комментария #, необязательно.

Вставьте на место удалённого этот текст (сочетание клавиш Ctrl+Shift+V).

Теперь настройте автозапуск сервера и запустите его, выполнив команду:

sudo rc-service nginx start && sudo rc-update add nginx default

6.4. Установка системы и настройка сервиса Chronos

Чтобы установить систему на новую базу данных, запустите следующие команды:

cd ~/build/linux

./setup.sh

Обратитесь к разделу Установка TESSA на новую базу данных за описанием процесса установки.

Обычно достаточно нажать: [Enter]; tessa [Enter]; [Enter].

По завершении установки перезапустите веб-сервис:

sudo rc-service tessa restart

Теперь выполним настройку Chronos. Создайте файл для сервиса Chronos:

sudo nano /etc/init.d/chronos

Вставьте следующий текст (сочетание клавиш Ctrl+Shift+V):

#!/sbin/openrc-run
name="Syntellect Chronos"

DAEMONUSER="tessa"
DAEMONDIR="/home/$DAEMONUSER/tessa/chronos"
DAEMON="$DAEMONDIR/Chronos"
DAEMONARGS=""
LOGDIR="/home/$DAEMONUSER/tessa/logs"
LOGFILE="$LOGDIR/chronos.log"
PIDFILE="/var/run/chronos.pid"

depend() {
    provide chronos
    after postgresql-10
}

start() {
    ebegin "Starting $name service"
    su - $DAEMONUSER -c "mkdir -p '$LOGDIR'"
    su - $DAEMONUSER -c "rm -f '$LOGFILE'"
    start-stop-daemon --start --name "$name" --user $DAEMONUSER \
        --make-pidfile --pidfile "$PIDFILE" --background \
        --stdout "$LOGFILE" --stderr "$LOGFILE" \
        --chdir "$DAEMONDIR" --umask 002 --exec "$DAEMON" \
        -- $DAEMONARGS
    eend $?
}

stop() {
    ebegin "Stopping $name service"
    start-stop-daemon --stop --pidfile "$PIDFILE"
    rm -f "$PIDFILE"
    eend $?
}
Удалите строку "after postgresql-10", если Chronos и PostgreSQL расположены на разных серверах.

Теперь настройте автозапуск сервиса и запустите его, выполнив команду:

sudo chmod 755 /etc/init.d/chronos && sudo rc-service chronos start && sudo rc-update add chronos default

Обратитесь к разделу Проверка установленной системы TESSA, чтобы проверить работу системы.

7. Установка на SUSE Linux Enterprise / OpenSUSE

Выполните шаги из раздела Подготовка дистрибутива TESSA.

Для SUSE Linux Enterprise 15 добавьте репозитории SUSE Linux Enterprise Workstation Extension и SUSE Package Hub, который содержит некоторые из требуемых пакетов.

Обновите информацию из репозиториев и обновите установленные пакеты до последних версий.

sudo zypper refresh && sudo zypper -n update

Дождитесь окончания обновлений, после чего перезагрузите компьютер.

Установите зависимости, которые потребуются серверу приложений TESSA.

sudo zypper -n install libunwind libicu

Для OpenSUSE и SUSE Linux Enterprise 15 дополнительно выполните команду:

sudo zypper -n install libgdiplus0

Для SUSE Linux Enterprise 15 дополнительно выполните команды:

cd ~

wget http://download.opensuse.org/repositories/security:/tls/SLE_15/x86_64/libopenssl1_0_0-1.0.2p-49.1.x86_64.rpm

sudo rpm -ivh ~/libopenssl1_0_0-1.0.2p-49.1.x86_64.rpm

rm ~/libopenssl1_0_0-1.0.2p-49.1.x86_64.rpm

Для OpenSUSE и SUSE Linux Enterprise 12 дополнительно выполните команду:

sudo zypper -n install libopenssl1_0_0

Для SUSE Linux Enterprise 12 выполните регистрацию сервера, выполнив список команд ниже.

В команде SUSEConnect -r 1234567890ABCD -e your@email.com после ключа -r укажите ваш регистрационный код, который высылается на почту после регистрации на сайте SUSE. После ключа -e укажите почтовый адрес, использованный при регистрации.
Описание процесса регистрации доступно на портале технической поддержки SUSE: https://www.suse.com/support/kb/doc/?id=7016626
sudo zypper refresh && sudo zypper -n install SUSEConnect

sudo SUSEConnect -r 1234567890ABCD -e your@email.com

sudo SUSEConnect -p PackageHub/12/x86_64

sudo SUSEConnect -p sle-sdk/12/x86_64

Для SUSE Linux Enterprise 15 опционально установите текстовый редактор nano:

sudo zypper -n install nano

Для SUSE Linux Enterprise 12 опционально установите текстовый редактор nano:

cd ~

wget https://nano-editor.org/dist/v2.5/RPMS/nano-2.5.3-1.x86_64.rpm

sudo rpm -ivh ~/nano-2.5.3-1.x86_64.rpm

rm ~/nano-2.5.3-1.x86_64.rpm

Для SUSE Linux Enterprise 15 и SUSE Linux Enterprise 12 выполните команду:

sudo ln -s /lib64/libdl.so.2 /lib64/libdl.so

7.1. Установка и настройка PostgreSQL

Для SUSE Linux Enterprise 12 подключите репозиторий для установки PostgreSQL.

На вопрос по доверию для ключа, полученного из репозитория PostgreSQL - "Do you want to reject the key, trust temporarily, or trust always?" - нажмите t (доверять временно) или a (доверять постоянно), затем нажмите Enter.

sudo zypper addrepo https://download.postgresql.org/pub/repos/zypp/repo/pgdg-sles-10.repo

sudo zypper refresh

Установите из репозитория и выполните первичную настройку сервера PostgreSQL.

Для SUSE Enterprise Linux 15:

sudo zypper -n install postgresql-server postgresql-contrib

sudo systemctl enable postgresql && sudo systemctl start postgresql

Для SUSE Enterprise Linux 12:

sudo zypper -n install postgresql10-server postgresql10-contrib

sudo /usr/pgsql-10/bin/postgresql-10-setup initdb

sudo systemctl enable postgresql-10 && sudo systemctl start postgresql-10

Для OpenSUSE:

sudo zypper -n install postgresql-server postgresql-contrib

sudo systemctl enable postgresql && sudo systemctl start postgresql

Создайте пользователя, от которого будут подключаться сервисы и утилиты TESSA.

sudo su

su - postgres

psql
CREATE USER tessa WITH SUPERUSER PASSWORD 'Master1234';
\q

exit

exit

Откройте для редактирования файл pg_hba.conf.

Для SUSE Enterprise Linux 15 и OpenSUSE:

sudo nano /var/lib/pgsql/data/pg_hba.conf

Для SUSE Enterprise Linux 12:

sudo nano /var/lib/pgsql/10/data/pg_hba.conf

Задайте в нём настройки в соответствии с разделом Настройка доступа по сети к PostgreSQL.

Откройте для редактирования файл postgresql.conf.

Для SUSE Enterprise Linux 15 и OpenSUSE:

sudo nano /var/lib/pgsql/data/postgresql.conf

Для SUSE Enterprise Linux 12:

sudo nano /var/lib/pgsql/10/data/postgresql.conf

Найдите в нём строку listen_addresses (нажмите Ctrl+W и введите искомую строку). Теперь уберите ведущий символ комментария #. И замените следующим образом:

listen_addresses = '*'

Закройте редактор с сохранением изменений. Перезапустите сервис PostgreSQL командой:

Для SUSE Enterprise Linux 15 и OpenSUSE:

sudo systemctl restart postgresql

Для SUSE Enterprise Linux 12:

sudo systemctl restart postgresql-10

7.2. Настройка веб-сервиса TESSA и создание сертификатов

sudo nano /etc/systemd/system/tessa.service

Вставьте этот текст (сочетание клавиш Shift+Insert).

Теперь настройте автозапуск сервиса и запустите его, выполнив команду:

sudo systemctl enable tessa && sudo systemctl start tessa

Далее обратитесь к раздел Создание самоподписанного сертификата, чтобы создать сертификаты. Или просто выполните команды:

sudo mkdir -p /etc/pki/tls/certs /etc/pki/tls/private

sudo openssl req -x509 -nodes -days 3650 -newkey rsa:2048 -keyout /etc/pki/tls/private/localhost.key -out /etc/pki/tls/certs/localhost.crt

7.3. Установка и настройка веб-сервера Nginx

Для SUSE Enterprise Linux 12 перед установкой подключите репозитории Nginx, выполнив команды:

sudo zypper addrepo -G -t yum -c 'http://nginx.org/packages/sles/12' nginx

cd ~

wget http://nginx.org/keys/nginx_signing.key

sudo rpm --import ~/nginx_signing.key

rm ~/nginx_signing.key

Для всех дистрибутивов установите Nginx:

sudo zypper -n install nginx

Для SUSE Enterprise Linux 15 и OpenSUSE:

sudo nano /etc/nginx/nginx.conf

Найдите раздел server { и удалите его (сочетание клавиш Ctrl+K удаляет строку). Удалять строки, начинающиеся с символа комментария #, необязательно.

Вставьте на место удалённого этот текст (сочетание клавиш Shift+Insert).

Для SUSE Enterprise Linux 12:

sudo nano /etc/nginx/conf.d/default.conf

Удалите содержимое файла (сочетание клавиш Alt+T) и вставьте этот текст (сочетание клавиш Shift+Insert).

Для всех дистрибутивов: настройте автозапуск сервера и запустите его, выполнив команду:

sudo systemctl enable nginx && sudo systemctl start nginx

7.4. Настройка LibreOffice или OpenOffice

Убедитесь, что установлен офисный пакет LibreOffice или OpenOffice. Также для этих дистрибутивов проверьте, что установлен пакет unoconv.

Для SUSE Enterprise Linux 12 подключите репозиторий с пакетом unoconv:

sudo zypper addrepo https://download.opensuse.org/repositories/Publishing/SLE_12_SP3/Publishing.repo

sudo zypper refresh

На вопрос по доверию для ключа, полученного из репозитория с пакетом unoconv - "Do you want to reject the key, trust temporarily, or trust always?" - нажмите t (доверять временно) или a (доверять постоянно), затем нажмите Enter.

Для всех дистрибутивов выполните команду:

sudo zypper -n install unoconv

В конфигурационном файле сервиса Chronos потребуется указать приложение unoconv для использования вместо встроенного скрипта.

nano ~/tessa/chronos/app.json

Найдите строку:

"UnoconvExternalCommand": null,

Замените её на:

"UnoconvExternalCommand": "unoconv",

При конвертации для приложения unoconv требуются права на папку ~/.cache/dconf. Приложение будет запущено от того же пользователя, что и сервис Chronos (в этой инструкции подразумевается текущий пользователь).

Для установки прав выполните команду (если папка ещё не создана, то будет создана):

mkdir -p ~/.cache/dconf

sudo chown -R $USER ~/.cache/dconf

7.5. Установка системы и настройка сервиса Chronos

Чтобы установить систему на новую базу данных, запустите следующие команды:

cd ~/build/linux

./setup.sh

Обратитесь к разделу Установка TESSA на новую базу данных за описанием процесса установки.

Обычно достаточно нажать: [Enter]; tessa [Enter]; [Enter].

По завершении установки перезапустите веб-сервис:

sudo systemctl restart tessa

Теперь выполним настройку Chronos. Создайте файл для сервиса Chronos:

sudo nano /etc/systemd/system/chronos.service

Вставьте этот текст (сочетание клавиш Shift+Insert).

Теперь настройте автозапуск Chronos и запустите его, выполнив команду:

sudo systemctl enable chronos && sudo systemctl start chronos

Обязательно проверьте, функционирует ли unoconv. Для этого выполните команду (подождав полминуты, пока сервис Chronos инициализируется):

sudo systemctl status chronos

Найдите процессы unoconv и LibreOffice среди запущенных процессов (последние две строки):

image008

Процессы могут отсутствовать или появиться и тут же завершиться при запуске сразу после установки. В этом случае либо перезагрузите компьютер, либо закройте, а затем сразу откройте окно терминала, в котором перезапустите сервис Chronos:

sudo systemctl restart chronos

Подождите полминуты и запросите статус для сервиса Chronos. Он должен показать информацию, аналогичную приведённой на изображении выше.

Обратитесь к разделу Проверка установленной системы TESSA, чтобы проверить работу системы.

8. Установка на ALT Linux

Установка ALT Linux тестировалась на релизе ALT Linux 8.2.

Для простоты настройки при установке укажите имя учётной записи tessa.

Выполните шаги из раздела Подготовка дистрибутива TESSA.

Включите текущего пользователя в sudo:

su

/usr/sbin/visudo

Найдите строку:

root    ALL=(ALL) ALL

Нажмите i и ниже вставьте строку:

tessa   ALL=(ALL) ALL

Нажмите Esc, чтобы выйти из режима вставки, затем нажмите :x (сначала двоеточие, потом x), и после нажмите Enter.

Введите в терминале:

exit

Обновите информацию из репозиториев:

sudo apt-get update

Установите зависимости, которые потребуются серверу приложений TESSA.

sudo apt-get -y install libgdiplus unoconv

sudo ln -s /lib64/libdl.so.2 /lib64/libdl.so

8.1. Установка и настройка PostgreSQL

Установите из репозитория и выполните первичную настройку сервера PostgreSQL. Установка может занять несколько минут.

sudo apt-get -y install postgresql10-server postgresql10-contrib

sudo /etc/init.d/postgresql initdb

sudo systemctl enable postgresql && sudo systemctl start postgresql

Создайте пользователя, от которого будут подключаться сервисы и утилиты TESSA.

sudo -u postgres psql postgres
CREATE USER tessa WITH SUPERUSER PASSWORD 'Master1234';
\q

Откройте для редактирования файл pg_hba.conf.

sudo nano /var/lib/pgsql/data/pg_hba.conf

Задайте в нём настройки в соответствии с разделом Настройка доступа по сети к PostgreSQL.

Откройте для редактирования файл postgresql.conf.

sudo nano /var/lib/pgsql/data/postgresql.conf

Найдите в нём строку listen_addresses (нажмите Ctrl+W и введите искомую строку). Теперь уберите ведущий символ комментария #. И замените следующим образом:

listen_addresses = '*'

Закройте редактор с сохранением изменений. Перезапустите сервис PostgreSQL командой:

sudo systemctl restart postgresql

8.2. Настройка веб-сервиса TESSA и создание сертификатов

sudo nano /etc/systemd/system/tessa.service

Вставьте этот текст (сочетание клавиш Shift+Insert).

Теперь настройте автозапуск сервиса и запустите его, выполнив команду:

sudo systemctl enable tessa && sudo systemctl start tessa

Далее обратитесь к раздел Создание самоподписанного сертификата, чтобы создать сертификаты. Или просто выполните команды:

sudo mkdir -p /etc/pki/tls/certs /etc/pki/tls/private

sudo openssl req -x509 -nodes -days 3650 -newkey rsa:2048 -keyout /etc/pki/tls/private/localhost.key -out /etc/pki/tls/certs/localhost.crt

8.3. Установка и настройка веб-сервера Nginx

Откройте окно терминала и установите Nginx:

sudo apt-get -y install nginx

Дождитесь окончания установки. После этого откройте для редактирования файл:

sudo nano /etc/nginx/sites-available.d/default.conf

Удалите содержимое файла (сочетание клавиш Alt+T) и вставьте этот текст (сочетание клавиш Shift+Insert).

Добавьте символьную ссылку, разрешающую использовать указанные настройки сайта, и перезапустите веб-сервер, выполнив команды:

sudo ln -s /etc/nginx/sites-available.d/default.conf /etc/nginx/sites-enabled.d/

sudo systemctl enable nginx && sudo systemctl restart nginx

8.4. Настройка LibreOffice или OpenOffice

В конфигурационном файле сервиса Chronos потребуется указать приложение unoconv для использования вместо встроенного скрипта.

nano ~/tessa/chronos/app.json

Найдите строку:

"UnoconvExternalCommand": null,

Замените её на:

"UnoconvExternalCommand": "unoconv",

При конвертации для приложения unoconv требуются права на папку ~/.cache/dconf. Приложение будет запущено от того же пользователя, что и сервис Chronos (в этой инструкции подразумевается текущий пользователь).

Для установки прав выполните команду (если папка ещё не создана, то будет создана):

mkdir -p ~/.cache/dconf

sudo chown -R $USER ~/.cache/dconf

8.5. Установка системы и настройка сервиса Chronos

Чтобы установить систему на новую базу данных, запустите следующие команды:

cd ~/build/linux

./setup.sh

Обратитесь к разделу Установка TESSA на новую базу данных за описанием процесса установки.

Обычно достаточно нажать: [Enter]; tessa [Enter]; [Enter].

По завершении установки перезапустите веб-сервис:

sudo systemctl restart tessa

Теперь выполним настройку Chronos. Создайте файл для сервиса Chronos:

sudo nano /etc/systemd/system/chronos.service

Вставьте этот текст (сочетание клавиш Shift+Insert).

Теперь настройте автозапуск Chronos и запустите его, выполнив команду:

sudo systemctl enable chronos && sudo systemctl start chronos

Обязательно проверьте, функционирует ли unoconv. Для этого выполните команду (подождав полминуты, пока сервис Chronos инициализируется):

sudo systemctl status chronos

Найдите процессы unoconv и LibreOffice среди запущенных процессов (последние две строки):

image008

Процессы могут отсутствовать или появиться и тут же завершиться при запуске сразу после установки. В этом случае либо перезагрузите компьютер, либо закройте, а затем сразу откройте окно терминала, в котором перезапустите сервис Chronos:

sudo systemctl restart chronos

Подождите полминуты и запросите статус для сервиса Chronos. Он должен показать информацию, аналогичную приведённой на изображении выше.

Обратитесь к разделу Проверка установленной системы TESSA, чтобы проверить работу системы.

9. Обновление на новую сборку платформы

Остановите сервисы chronos и tessa:

sudo systemctl stop chronos tessa

Для Calculate Linux:

sudo /etc/init.d/chronos stop && sudo /etc/init.d/tessa stop

Распакуйте новую версию дистрибутива и подготовьте её в соответствии с разделом Подготовка дистрибутива TESSA. При этом удалите папки ~/tessa/*, где располагались сервисы предыдущих версий, и замените их на сервисы из базы данных. Убедитесь, что в файлах app.json указана корректная строка подключения и путь к файлу лицензии.

Теперь запустите веб-сервис tessa:

sudo systemctl start tessa

Для Calculate Linux:

sudo /etc/init.d/tessa start

Далее предполагаем, что сборка была распакована в папку ~/build и там уже выполнен скрипт init.sh.

Перейдите в папку с новой сборкой и запустите там скрипт upgrade.sh.

cd ~/build/linux

./upgrade.sh

Скрипт предложит ввести:

  1. Адрес подключения к веб-сервисам. Нажмите Enter, чтобы подтвердить значение по умолчанию https://localhost.

  2. Имя базы данных. Нажмите Enter, чтобы подтвердить значение по умолчанию - базу данных tessa из файла app.json.

  3. Путь к файловой папке, где расположено содержимое файлов. Нажмите Enter, чтобы использовать путь по умолчанию /home/tessa/tessa/files.

После ввода скрипт выведет заданные настройки. Если при вводе настроек допущена ошибка, то нажмите Ctrl+C, чтобы прервать выполнение скрипта, после чего заново запустите его. Если всё корректно, нажмите любую клавишу, чтобы начать установку обновления.

image006

Обновление займёт несколько минут. Дождитесь окончания процесса, перезапустите веб-сервис и запустите сервис Chronos.

sudo systemctl restart tessa

sudo systemctl start chronos

Для Calculate Linux:

sudo /etc/init.d/tessa restart

sudo /etc/init.d/chronos start

10. Миграция базы данных

Вы можете перенести/скопировать базу данных TESSA, используя скрипт миграции migrate.sh. Перенос возможен между разными серверами и типами СУБД. Например, из консоли Linux можно подключиться к серверу Microsoft SQL Server, и перенести оттуда базу данных в сервер PostgreSQL, настроив и запустив скрипт миграции.

Миграция базы данных функционирует только для базы данных TESSA, и не является заменой бэкапов и дампов баз данных, выполняемых средствами СУБД.

Убедитесь, что дистрибутив распакован и подготовлен в соответствии с разделом Подготовка дистрибутива TESSA. Далее предполагаем, что сборка была распакована в папку ~/build и там уже выполнен скрипт init.sh.

Откройте файл ~/build/linux/tools/app.json, и настройте в нём параметры для двух строк подключения:

  1. Строка default ссылается на исходную базу данных. Это может быть как другая база данных Postgres на том же или на другом сервере, так и база данных MS SQL Server.

  2. Строка migration ссылается на целевую базу данных. Такая база данных должна быть на доступном сервере БД (например, на сервере Postgres, который был ранее вами настроен), но сама база данных не должна быть создана - она будет создана при выполнении скрипта.

Необходимо иметь запущенный веб-сервис tessa, который настроен на целевую базу данных. Для этого в ~/tessa/web/app.json убедитесь, что указана та же строка подключения, что и строка migration из настроек выше. При изменении строки подключения перезапустите веб-сервис:

sudo systemctl restart tessa

Для Calculate Linux:

sudo /etc/init.d/tessa restart

Сервис Chronos также должен быть отключён, а в его файле ~/tessa/chronos/app.json должна быть указана целевая база данных migration.

Обычно также переносится файловая папка с другого сервера. Достаточно отключить веб-сервис tessa для сервера, с которого выполняется перенос, и скопировать файловую папку.

Теперь перейдите в папку со сборкой и запустите скрипт migrate.sh:

cd ~/build/linux

./migrate.sh

Скрипт предложит ввести:

  1. Адрес подключения к веб-сервисам. Нажмите Enter, чтобы подтвердить значение по умолчанию https://localhost.

  2. Имя базы данных. Нажмите Enter, чтобы подтвердить значение по умолчанию - базу данных от строки подключения migration из файла app.json.

Если вы укажете другую базу данных, то параметры подключения скрипт по-прежнему будет использовать от строки подключения migration, но база данных будет создана с указанным именем.
image007

Миграция может занять от нескольких минут до нескольких часов, в зависимости от объёма мигрируемой базы данных.

Дождитесь окончания процесса, перезапустите веб-сервис и запустите сервис Chronos, которые настроены в app.json на новую базу данных.

sudo systemctl restart tessa

sudo systemctl start chronos

Для Calculate Linux:

sudo /etc/init.d/tessa restart

sudo /etc/init.d/chronos start

11. Настройка Unix-сокетов и нескольких рабочих процессов

11.1. Настройка Unix-сокетов для веб-сервиса

Выполненные ранее настройки показывают, как запустить веб-сервис tessa с привязкой к порту localhost:5000, после чего веб-серверы Nginx или Apache работают как reverse proxy на этот порт. Работу веб-сервиса можно ускорить при высокой нагрузке, если настроить использование unix-сокетов. Также это позволяет упростить настройку нескольких рабочих процессов.

При настройке сервиса tessa необходимо указать имя сокета tessa.sock в настройке ExecStart. При условии, что настройки по ссылке уже выполнены, откройте для редактирования конфигурационный файл сервиса:

sudo nano /etc/systemd/system/tessa.service

Замените существующую строку ExecStart на следующую:

ExecStart=/home/tessa/tessa/web/Tessa.Web.Server /home/tessa/tessa/sockets/tessa.sock

Сохраните и закройте файл: Ctrl+X, Y, Enter.

Для Calculate Linux и системы инициализации OpenRC:

sudo nano /etc/init.d/tessa

Замените строку с настройкой DAEMONARGS на следующую строку:

DAEMONARGS="/home/tessa/tessa/sockets/tessa.sock"

Сохраните и закройте файл: Ctrl+X, Y, Enter.

Для всех дистрибутивов:

Создайте папку, содержащую файл сокета. Доступ на чтение и на запись должен быть у пользователя tessa и у группы www-data (или у того пользователя, от имени которого запускаются сервис tessa и веб-серверы Nginx или Apache).

sudo usermod -a -G www-data tessa

mkdir ~/tessa/sockets

sudo chgrp www-data ~/tessa/sockets

sudo chmod g+rwxs ~/tessa/sockets

Перезагрузите конфигурационные файлы сервиса и перезапустите веб-сервис tessa:

sudo systemctl daemon-reload

sudo systemctl restart tessa

Если всё настроено правильно, то при просмотре статуса сервиса будет выведен зелёный кружок и отладочные сообщения.

sudo systemctl status tessa

Если информация по сервису не закроется сама, нажмите q.

Для Calculate Linux и системы инициализации OpenRC:

sudo /etc/init.d/tessa restart

Проверьте статус сервиса, отобразив содержимое файла лога:

cat ~/tessa/logs/tessa.log

Если последняя отображённая строка выглядит как "Application started", то сервис успешно перезапущен.

11.2. Настройка Unix-сокетов для веб-сервера Nginx

Если вы используете веб-сервер Nginx, то помимо настройки веб-сервиса также требуется настроить проксирование трафика по сокету к веб-сервису tessa.

Откройте конфигурационный файл:

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

Найдите строку:

        proxy_pass         http://localhost:5000/;

Замените её на:

        proxy_pass         http://unix:/home/tessa/tessa/sockets/tessa.sock:/;

Сохраните и закройте файл: Ctrl+X, Y, Enter.

Перезапустите веб-сервер Nginx:

sudo systemctl restart nginx

11.3. Настройка Unix-сокетов для веб-сервера Apache

Если вы используете веб-сервер Apache, то помимо настройки веб-сервиса также требуется настроить проксирование трафика по сокету к веб-сервису tessa.

Откройте конфигурационный файл:

sudo nano /etc/apache2/sites-available/000-default.conf

Найдите строку:

    ProxyPass / http://localhost:5000/
    ProxyPassReverse / http://localhost:5000/

Замените её на:

    ProxyPass / unix:/home/tessa/tessa/sockets/tessa.sock|http://localhost/
    ProxyPassReverse / unix:/home/tessa/tessa/sockets/tessa.sock|http://localhost/

Сохраните и закройте файл: Ctrl+X, Y, Enter.

Доступ к файлу сокета /home/tessa/tessa/sockets/tessa.sock должен иметь одновременно и веб-сервис tessa, и веб-сервер Apache. Для этого необходимо настроить права доступа. Для упрощения настройки, для запуска веб-сервиса tessa использовалась учётная запись пользователя tessa. Веб-сервер Apache по умолчанию запускается от имени группы www-data. Настройте запуск Apache от имени того же пользователя tessa, чтобы доступ к файлу сокета был гарантирован без дополнительных настроек.

Для повышенной безопасности веб-сервера настройте права для запуска веб-сервиса tessa от имени группы www-data, тогда не следует изменять пользователя для веб-сервера Apache, пропустите следующие настройки.

Откройте конфигурационный файл envvars:

sudo nano /etc/apache2/envvars

Найдите строки:

export APACHE_RUN_USER=www-data
export APACHE_RUN_GROUP=www-data

Замените в них группу www-data на учётную запись пользователя tessa:

export APACHE_RUN_USER=tessa
export APACHE_RUN_GROUP=tessa

Сохраните и закройте файл: Ctrl+X, Y, Enter.

Также измените права доступа для следующих папок на пользователя tessa (укажите имя дважды через точку, если пользователь называется иначе):

sudo chown tessa.tessa -R /var/lock/apache2 /var/log/apache2

Перезапустите веб-сервер Apache:

sudo systemctl restart apache2

Перезапустите веб-сервер Apache:

sudo systemctl restart apache2

11.4. Настройка нескольких рабочих процессов веб-сервиса

Несколько рабочих процессов веб-сервиса tessa позволяют ускорить обработку параллельных запросов на многоядерных и многопроцессорных серверах приложений. Настраивать более одного рабочего процесса обычно не имеет смысла на тестовых контурах и серверах разработчиков, это актуально для production-серверов.

Остановите процесс веб-сервиса tessa, настроенный ранее, и отключите его автозапуск.

sudo systemctl stop tessa && sudo systemctl disable tessa
Если вы уже настроили и запустили веб-сервис для Unix-сокетов, то также явно удалите файл сокета, созданный веб-сервисом: sudo rm /home/tessa/tessa/sockets/tessa.sock

Если папка, содержащая файлы сокетов, ещё не создана, то создайте её. Доступ на чтение и на запись должен быть у пользователя tessa и у группы www-data (или у того пользователя, от имени которого запускаются сервис tessa и веб-серверы Nginx или Apache).

sudo usermod -a -G www-data tessa

mkdir ~/tessa/sockets

sudo chgrp www-data ~/tessa/sockets

sudo chmod g+rwxs ~/tessa/sockets

Создайте шаблон SystemD-сервиса, который позволяет запускать несколько сервисов параллельно. В этом примере каждый сервис работает для своего файла .sock.

sudo nano /etc/systemd/system/tessa@.service

Вставьте следующее содержимое:

[Unit]
Description=Syntellect Tessa process %i

[Service]
WorkingDirectory=/home/tessa/tessa/web
ExecStart=/home/tessa/tessa/web/Tessa.Web.Server /home/tessa/tessa/sockets/tessa.%i.sock
PIDFile=/var/run/tessa.%i.pid
Restart=always
RestartSec=10
SyslogIdentifier=tessa.%i
User=tessa
UMask=002
Environment=ASPNETCORE_ENVIRONMENT=Production
Environment=DOTNET_PRINT_TELEMETRY_MESSAGE=false

[Install]
WantedBy=multi-user.target

Сохраните и закройте файл: Ctrl+X, Y, Enter.

Теперь настройте автозапуск нескольких процессов веб-сервиса и запустите их. В примере ниже указано 4 процесса, но вы легко можете увеличить их количество до требуемого. Мы рекомендуем запускать один процесс на каждое физическое ядро CPU (без учёта hyper-threading).

sudo systemctl enable tessa@{1..4} && sudo systemctl start tessa@{1..4}

Статус всех процессов можно вывести командой:

sudo systemctl status tessa@{1..4}

Если для всех процессов выведен зелёный кружок, то веб-сервис настроен корректно. Используйте стрелки для прокрутки вниз. Чтобы закрыть окно, нажмите q.

11.5. Настройка нескольких рабочих процессов для веб-сервера Nginx

Если вы используете веб-сервер Nginx, то помимо настройки веб-сервиса также требуется настроить балансировку для нескольких рабочих процессов.

Откройте конфигурационный файл:

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

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

upstream tessa {
    ip_hash;
    server unix:/home/tessa/tessa/sockets/tessa.1.sock;
    server unix:/home/tessa/tessa/sockets/tessa.2.sock;
    server unix:/home/tessa/tessa/sockets/tessa.3.sock;
    server unix:/home/tessa/tessa/sockets/tessa.4.sock;
}
Указанный параметр ip_hash позволяет "привязывать" сессии пользователей к рабочим процессам, чтобы последовательные запросы от одного и того же пользователя переходили к одному и тому же процессу. Это ускоряет обработку запросов для веб-сервиса tessa.

Найдите настройку proxy_pass:

        proxy_pass         ...;

И замените её на:

        proxy_pass         http://tessa;

Сохраните и закройте файл: Ctrl+X, Y, Enter.

Настройте количество рабочих процессов веб-сервера Nginx, каждый из которых будет проксировать трафик к одному из процессов веб-сервиса tessa.

Откройте конфигурационный файл nginx.conf:

sudo nano /etc/nginx/nginx.conf

Найдите строку вида:

worker_processes ...;

Укажите такое же количество рабочих процессов, которые указали ранее. В данном примере это 4 процесса:

worker_processes 4;

Сохраните и закройте файл: Ctrl+X, Y, Enter.

Перезапустите веб-сервер Nginx:

sudo systemctl restart nginx

11.6. Настройка нескольких рабочих процессов для веб-сервера Apache

Если вы используете веб-сервер Apache, то помимо настройки веб-сервиса также требуется настроить балансировку для нескольких рабочих процессов.

Установите плагин с алгоритмом балансировщика запросов:

sudo a2enmod lbmethod_byrequests

Откройте конфигурационный файл:

sudo nano /etc/apache2/sites-available/000-default.conf

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

Header add Set-Cookie "ROUTEID=.%{BALANCER_WORKER_ROUTE}e; path=/" env=BALANCER_ROUTE_CHANGED

<Proxy "balancer://tessa">
    BalancerMember unix:/home/tessa/tessa/sockets/tessa.1.sock|http://localhost route=1
    BalancerMember unix:/home/tessa/tessa/sockets/tessa.2.sock|http://localhost route=2
    BalancerMember unix:/home/tessa/tessa/sockets/tessa.3.sock|http://localhost route=3
    BalancerMember unix:/home/tessa/tessa/sockets/tessa.4.sock|http://localhost route=4
    ProxySet lbmethod=byrequests stickysession=ROUTEID
</Proxy>
Указанные настройки stickysession=ROUTEID, а также настройки add Set-Cookie и route=X позволяют "привязывать" сессии пользователей к рабочим процессам, чтобы последовательные запросы от одного и того же пользователя переходили к одному и тому же процессу. Это ускоряет обработку запросов для веб-сервиса tessa.

Ниже найдите строки вида:

    ProxyPass / http://localhost:5000/
    ProxyPassReverse / http://localhost:5000/

И замените их на:

    ProxyPass / balancer://tessa/
    ProxyPassReverse / balancer://tessa/

Сохраните и закройте файл: Ctrl+X, Y, Enter.

Перезапустите веб-сервер Apache:

sudo systemctl restart apache2

12. Часто решаемые задачи

12.1. Полезные команды в терминале

Здесь указаны базовые команды, которые могут потребоваться для установки системы и будут полезны новичкам. Если для любой из указанных ниже команд выводится сообщение о недостатке прав, то введите перед командой слово sudo.

Перейти в папку относительно домашней папки:

cd ~/folder1/folder2

Перейти в папку по абсолютному пути:

cd /home/tessa/folder

Перейти в папку на уровень выше:

cd ..

Вывести содержимое текущей папки:

ls

Создать папку, если она не создана, а также родительские папки в пути, которые ещё не созданы:

mkdir -p folder1/folder2/folder3

Переименовать файл file-old в file-new:

mv file-old file-new

Переместить файл file из папки source в папку destination:

mv source/file destination/file

Скопировать файлы с подпапками из папки source в папку destination (если папка destination не существует, то она будет создана):

cp -r source destination/

Удалить папку folder2 с подпапками:

rm -rf folder1/folder2

12.2. Распаковка архивов .zip

Установите утилиту командной строки для распаковки архивов .zip, выполнив команду для вашего пакетного менеджера.

Для пакетного менеджера apt:

sudo apt -y install unzip

Для пакетного менеджера apt и Linux Mint:

sudo /usr/bin/apt -y install unzip

Для пакетного менеджера apt-get:

sudo apt-get -y install unzip

Для пакетного менеджера yum:

sudo yum -y install unzip

Для пакетного менеджера emerge:

sudo emerge app-arch/unzip

Для пакетного менеджера zypper:

sudo zypper -n install unzip

Чтобы извлечь все файлы из архива tessa.zip в текущую папку (перезаписывает файлы, которые уже существуют в папке):

unzip -o tessa.zip

Чтобы извлечь все файлы из архива tessa.zip в заданную папку destination (перезаписывает файлы, которые уже существуют в папке):

unzip -o build.zip -d destination

12.3. Распаковка архивов .7z

Установите утилиту командной строки для распаковки архивов .7z, выполнив команду для вашего пакетного менеджера.

Для пакетного менеджера apt:

sudo apt -y install p7zip-full

Для пакетного менеджера apt и Linux Mint:

sudo /usr/bin/apt -y install p7zip-full

Для пакетного менеджера apt-get:

sudo apt-get -y install p7zip-full

Для пакетного менеджера yum:

sudo yum -y install p7zip p7zip-plugins

Для пакетного менеджера emerge:

sudo emerge app-arch/p7zip

Для пакетного менеджера zypper:

sudo zypper -n install p7zip

Чтобы извлечь все файлы из архива tessa-3.0.0.7z в текущую папку:

7za x tessa-3.0.0.7z

Чтобы извлечь все файлы в папку destination:

7za x -o./destination tessa-3.0.0.7z

Для дистрибутива ALT Linux аналогичным образом используйте команду 7z вместо 7za:

7z x tessa-3.0.0.7z

12.4. Перезапуск сервисов

Если система TESSA была установлена с использованием веб-сервера Nginx, то для перезапуска всех сервисов на сервере приложений выполните команду в терминале:

sudo systemctl restart chronos tessa nginx

Если система TESSA была установлена с использованием веб-сервера Apache, то для перезапуска всех сервисов на сервере приложений выполните команду в терминале:

sudo systemctl restart chronos tessa apache2

Для дистрибутива Calculate Linux выполните команду:

sudo /etc/init.d/chronos restart && sudo /etc/init.d/tessa restart && sudo /etc/init.d/nginx restart

Для перезапуска сервера СУБД выполните команду в терминале:

sudo systemctl restart postgresql

Для дистрибутива Calculate Linux выполните команду:

sudo /etc/init.d/postgresql-10 restart

12.5. Определение IP-адреса сервера

Чтобы определить IP-адрес сервера, к которому должны подключаться клиентские компьютеры, используйте команду:

ip addr show

Если команда недоступна на вашем дистрибутиве, то вы можете использовать команду ifconfig:

ifconfig

Если команда не была найдена, то требуется сначала установить пакет net-tools в терминале.

Для пакетного менеджера apt:

sudo apt -y install net-tools

Для пакетного менеджера apt и Linux Mint:

sudo /usr/bin/apt -y install net-tools

Для пакетного менеджера apt-get:

sudo apt-get -y install net-tools

Для пакетного менеджера yum:

sudo yum -y install net-tools

Для пакетного менеджера emerge:

sudo emerge sys-apps/net-tools

Для пакетного менеджера zypper:

sudo zypper -n install net-tools-deprecated

После установки заново введите команду:

ifconfig
image004

12.6. Права доступа для группы www-data

Если вы настроили сервис tessa на запуск от имени группы www-data, то потребуется настроить дополнительные права.

Добавим текущую учётную запись tessa в группу www-data, чтобы эта учётная запись могла изменять права для папок на эту группу.

sudo usermod -aG www-data tessa

Для SUSE Enterprise Linux и OpenSUSE команда имеет параметры:

sudo usermod -A www-data tessa

Чтобы назначить права на папку с файлами, она должна существовать. Если её нет - создаём:

mkdir -p /home/tessa/tessa/files

Определим, что папкой с файлами теперь владеет группа www-data:

sudo chgrp www-data /home/tessa/tessa/files

sudo chmod g+rwxs /home/tessa/tessa/files

12.7. Настройка подключения к СУБД для пользователя, который не является суперпользователем СУБД

Для более тонкой настройки прав доступа может потребоваться, чтобы пользователь СУБД, который используется для подключения к базе данных от сервера приложений (веб-сервис, сервис Chronos, а также утилиты tools), не входил в роль суперпользователей. Т.е. чтобы он имел права исключительно на базу данных tessa, но не на создание/просмотр/изменение других баз данных.

Вместо способа создания пользователя, описанного в этой инструкции, подключитесь к серверу PostgreSQL, и выполните команды: создайте базу данных и пользователя, далее настройте права.

sudo -u postgres psql postgres

Команда \password postgres здесь также указана, чтобы задать пароль для пользователя postgres. Без пароля вы не сможете выполнить вход в систему от суперпользователя после редактирования настроек в файле pg_hba.conf способом, предложенным в этой инструкции.

\password postgres

Теперь введите пароль суперпользователя. Далее введите команды:

CREATE DATABASE tessa;

CREATE USER tessa WITH PASSWORD 'Master1234';

GRANT ALL PRIVILEGES ON DATABASE tessa TO tessa;
\q
В команде GRANT ALL PRIVILEGES первым словом tessa указано имя созданной базы данных, а вторым tessa - имя пользователя в СУБД. Эти имена могут быть изменены, в этом случае также требуется отредактировать строки подключения в файлах app.json в папках chronos, tools и web.

При установке скриптом setup.sh теперь не указывайте имя базы данных tessa при вводе, вместо этого имя базы данных должно быть указано в строке подключения (по умолчанию оно уже указано как tessa). Тогда скрипт не будет создавать базу данных, а будет подключаться к ней с учётом настроенных прав доступа.

12.8. Установка на виртуальную машину VMWare

Для многих дистрибутивов Linux в репозиториях уже есть пакет, упрощающий интеграцию с операционной системой хоста, когда Linux запущен как гостевая ОС в виртуальной машине. Это включает в себя общий буфер обмена с передачей файлов, автоподстройка разрешения экрана Linux в зависимости от размера окна виртуальной машины и др.

Установите пакет в окне терминала:

sudo apt -y install open-vm-tools-desktop

Если этот пакет отсутствует, то иногда доступен пакет без интеграции с оконным менеджером, но всё так же разрешающий общий буфер обмена:

sudo apt -y install open-vm-tools

Вместо apt может потребоваться использовать другой пакетный менеджер, например, apt-get, yum, emerge или zypper:

sudo apt-get -y install open-vm-tools
sudo yum -y install open-vm-tools
sudo emerge open-vm-tools
sudo zypper -n install open-vm-tools

Если ни один из пакетов не найден, то установите VMWare Tools обычным образом: в меню сверху VM → Install VMWare Tools…​, будет примонтирован диск с архивом VMwareTools-*.tar.gz, который распакуйте в домашнюю папку, после чего перейдите в папку и выполните скрипт sudo ./vmware-install.pl. На большинство вопросов достаточно ответить нажатием Enter. За подробностями обратитесь к документации VMWare.

12.9. Установка интерпретатора python3 на дистрибутивы, где он отсутствует в репозиториях

Для RedHat Enterprise Linux, Oracle Linux, CentOS и некоторых других дистрибутивов для использования совместно со сторонним ПО (не входящим в рамки данной инструкции) может потребоваться установить интерпретатор Python версии 3.

Если такая версия отсутствует в репозиториях, то необходимо собрать из исходных кодов актуальную версию python3. В примере ниже это команды для сборки Python v3.7.0, которая являлась последней версией на момент написания инструкции. При сборке make и установке make install некоторые модули могут выводить ошибки из-за отсутствия зависимостей, игнорируйте их и выполняйте следующие команды.

sudo yum -y groupinstall development

sudo yum -y install zlib-devel

cd ~

wget https://www.python.org/ftp/python/3.7.0/Python-3.7.0.tar.xz

tar xJf Python-3.7.0.tar.xz

cd Python-3.7.0

./configure --enable-optimizations

make

sudo make install
Сборка make может занять до получаса времени.

Теперь проверьте местоположение исполняемого файла python3 и выведите версию Python:

which python3

python3 -V

Вывод команд должен быть похож на следующий:

image009

Папку и архив Python-3.* в домашней папке теперь можно удалить.

12.10. Настройка сервисов для дистрибутива, в котором отсутствует система инициализации System D

На некоторых дистрибутивах может отсутствовать система инициализации System D, и связанная с ней команда systemctl. Из тех дистрибутивов, для которых выполнялось тестирование и для которых установка платформы официально поддерживается, это Calculate Linux, но в нём присутствует система OpenRC, установка для которой описана в разделе по ссылке.

Если у вас дистрибутив, в котором нет ни System D, ни OpenRC, то это означает, что поддерживается только система инициализации System V. В этом разделе описано, как настроить сервисы tessa и chronos в виде System V скриптов с автозапуском при загрузке системы.

В скриптах ниже будут присутствовать следующие переменные (в верхней части скрипта), которые можно изменить в соответствии с вашей установкой:

  • DAEMONUSER - имя учётной записи, с правами которой запускается сервис.

  • DAEMONDIR - абсолютный путь к папке с сервисом.

  • DAEMON - путь к запускаемому файлу сервиса в папке DAEMONDIR.

  • DAEMON_ARGS - аргументы, с которым запускается сервис, обычно не заданы. Здесь, например, для веб-сервиса tessa можно указать аргумент "http://localhost:5001", чтобы запустить веб-сервис по порту 5001, вместо порта по умолчанию 5000.

Создайте скрипт для запуска веб-сервиса tessa, выполнив команду:

sudo nano /etc/init.d/tessa

Скопируйте следующий текст Shift+Insert и закройте редактор с сохранением изменений: Ctrl+X, Y, Enter.

#! /bin/sh
### BEGIN INIT INFO
# Provides:          tessa
# Required-Start:    $remote_fs $syslog
# Required-Stop:     $remote_fs $syslog
# Default-Start:     2 3 4 5
# Default-Stop:      0 1 6
# Short-Description: Syntellect Tessa
# Description:       Syntellect Tessa web services.
### END INIT INFO

# Author: Syntellect <tessa@syntellect.ru>

PATH=/sbin:/usr/sbin:/bin:/usr/bin
DESC="Syntellect Tessa"
NAME=tessa
DAEMONUSER="tessa"
DAEMONDIR="/home/$DAEMONUSER/tessa/web"
DAEMON="$DAEMONDIR/Tessa.Web.Server"
DAEMON_ARGS=""
LOGDIR="/home/$DAEMONUSER/tessa/logs"
LOGFILE="$LOGDIR/$NAME.log"
PIDFILE=/var/run/$NAME.pid
SCRIPTNAME=/etc/init.d/$NAME

# Exit if the package is not installed
[ -x "$DAEMON" ] || exit 0

# Read configuration variable file if it is present
[ -r /etc/default/$NAME ] && . /etc/default/$NAME

# Load the VERBOSE setting and other rcS variables
. /lib/init/vars.sh

# Define LSB log_* functions.
# Depend on lsb-base (>= 3.2-14) to ensure that this file is present
# and status_of_proc is working.
. /lib/lsb/init-functions

#
# Function that starts the daemon/service
#
do_start()
{
    # Return
    #   0 if daemon has been started
    #   1 if daemon was already running
    #   2 if daemon could not be started
    start-stop-daemon --start --quiet --name "$DESC" --user $DAEMONUSER \
        --make-pidfile --pidfile "$PIDFILE" --background \
        --stdout "$LOGFILE" --stderr "$LOGFILE" \
        --chdir "$DAEMONDIR" --exec "$DAEMON" --umask 002 \
        --test > /dev/null \
        || return 1
    start-stop-daemon --start --quiet --name "$DESC" --user $DAEMONUSER \
        --make-pidfile --pidfile "$PIDFILE" --background \
        --stdout "$LOGFILE" --stderr "$LOGFILE" \
        --chdir "$DAEMONDIR" --exec "$DAEMON" --umask 002 -- \
        $DAEMON_ARGS \
        || return 2
}

#
# Function that stops the daemon/service
#
do_stop()
{
    # Return
    #   0 if daemon has been stopped
    #   1 if daemon was already stopped
    #   2 if daemon could not be stopped
    #   other if a failure occurred
    start-stop-daemon --stop --quiet --retry=TERM/30/KILL/5 --pidfile "$PIDFILE" --name $NAME
    RETVAL="$?"
    [ "$RETVAL" = 2 ] && return 2
    start-stop-daemon --stop --quiet --oknodo --retry=0/30/KILL/5 --exec "$DAEMON"
    [ "$?" = 2 ] && return 2
    rm -f "$PIDFILE"
    return "$RETVAL"
}

case "$1" in
  start)
    [ "$VERBOSE" != no ] && log_daemon_msg "Starting $DESC" "$NAME"
    do_start
    case "$?" in
        0|1) [ "$VERBOSE" != no ] && log_end_msg 0 ;;
        2) [ "$VERBOSE" != no ] && log_end_msg 1 ;;
    esac
    ;;
  stop)
    [ "$VERBOSE" != no ] && log_daemon_msg "Stopping $DESC" "$NAME"
    do_stop
    case "$?" in
        0|1) [ "$VERBOSE" != no ] && log_end_msg 0 ;;
        2) [ "$VERBOSE" != no ] && log_end_msg 1 ;;
    esac
    ;;
  status)
    status_of_proc "$DAEMON" "$NAME" && exit 0 || exit $?
    ;;
  restart|force-reload)
    log_daemon_msg "Restarting $DESC" "$NAME"
    do_stop
    case "$?" in
      0|1)
        do_start
        case "$?" in
            0) log_end_msg 0 ;;
            1) log_end_msg 1 ;; # Old process is still running
            *) log_end_msg 1 ;; # Failed to start
        esac
        ;;
      *)
        # Failed to stop
        log_end_msg 1
        ;;
    esac
    ;;
  *)
    echo "Usage: $SCRIPTNAME {start|stop|status|restart|force-reload}" >&2
    exit 3
    ;;
esac
:

Аналогично создайте скрипт для запуска фоновых сервисов chronos, выполнив команду:

sudo nano /etc/init.d/chronos

Скопируйте следующий текст Shift+Insert и закройте редактор с сохранением изменений: Ctrl+X, Y, Enter.

#! /bin/sh
### BEGIN INIT INFO
# Provides:          chronos
# Required-Start:    $remote_fs $syslog
# Required-Stop:     $remote_fs $syslog
# Default-Start:     2 3 4 5
# Default-Stop:      0 1 6
# Short-Description: Syntellect Chronos
# Description:       Syntellect Chronos background services.
### END INIT INFO

# Author: Syntellect <tessa@syntellect.ru>

PATH=/sbin:/usr/sbin:/bin:/usr/bin
DESC="Syntellect Chronos"
NAME=chronos
DAEMONUSER="tessa"
DAEMONDIR="/home/$DAEMONUSER/tessa/chronos"
DAEMON="$DAEMONDIR/Chronos"
DAEMON_ARGS=""
LOGDIR="/home/$DAEMONUSER/tessa/logs"
LOGFILE="$LOGDIR/$NAME.log"
PIDFILE=/var/run/$NAME.pid
SCRIPTNAME=/etc/init.d/$NAME

# Exit if the package is not installed
[ -x "$DAEMON" ] || exit 0

# Read configuration variable file if it is present
[ -r /etc/default/$NAME ] && . /etc/default/$NAME

# Load the VERBOSE setting and other rcS variables
. /lib/init/vars.sh

# Define LSB log_* functions.
# Depend on lsb-base (>= 3.2-14) to ensure that this file is present
# and status_of_proc is working.
. /lib/lsb/init-functions

#
# Function that starts the daemon/service
#
do_start()
{
    # Return
    #   0 if daemon has been started
    #   1 if daemon was already running
    #   2 if daemon could not be started
    start-stop-daemon --start --quiet --name "$DESC" --user $DAEMONUSER \
        --make-pidfile --pidfile "$PIDFILE" --background \
        --stdout "$LOGFILE" --stderr "$LOGFILE" \
        --chdir "$DAEMONDIR" --exec "$DAEMON" --umask 002 \
        --test > /dev/null \
        || return 1
    start-stop-daemon --start --quiet --name "$DESC" --user $DAEMONUSER \
        --make-pidfile --pidfile "$PIDFILE" --background \
        --stdout "$LOGFILE" --stderr "$LOGFILE" \
        --chdir "$DAEMONDIR" --exec "$DAEMON" --umask 002 -- \
        $DAEMON_ARGS \
        || return 2
}

#
# Function that stops the daemon/service
#
do_stop()
{
    # Return
    #   0 if daemon has been stopped
    #   1 if daemon was already stopped
    #   2 if daemon could not be stopped
    #   other if a failure occurred
    start-stop-daemon --stop --quiet --retry=TERM/30/KILL/5 --pidfile "$PIDFILE" --name $NAME
    RETVAL="$?"
    [ "$RETVAL" = 2 ] && return 2
    start-stop-daemon --stop --quiet --oknodo --retry=0/30/KILL/5 --exec "$DAEMON"
    [ "$?" = 2 ] && return 2
    rm -f "$PIDFILE"
    return "$RETVAL"
}

case "$1" in
  start)
    [ "$VERBOSE" != no ] && log_daemon_msg "Starting $DESC" "$NAME"
    do_start
    case "$?" in
        0|1) [ "$VERBOSE" != no ] && log_end_msg 0 ;;
        2) [ "$VERBOSE" != no ] && log_end_msg 1 ;;
    esac
    ;;
  stop)
    [ "$VERBOSE" != no ] && log_daemon_msg "Stopping $DESC" "$NAME"
    do_stop
    case "$?" in
        0|1) [ "$VERBOSE" != no ] && log_end_msg 0 ;;
        2) [ "$VERBOSE" != no ] && log_end_msg 1 ;;
    esac
    ;;
  status)
    status_of_proc "$DAEMON" "$NAME" && exit 0 || exit $?
    ;;
  restart|force-reload)
    log_daemon_msg "Restarting $DESC" "$NAME"
    do_stop
    case "$?" in
      0|1)
        do_start
        case "$?" in
            0) log_end_msg 0 ;;
            1) log_end_msg 1 ;; # Old process is still running
            *) log_end_msg 1 ;; # Failed to start
        esac
        ;;
      *)
        # Failed to stop
        log_end_msg 1
        ;;
    esac
    ;;
  *)
    echo "Usage: $SCRIPTNAME {start|stop|status|restart|force-reload}" >&2
    exit 3
    ;;
esac
:

Добавьте права на выполнение для созданных скриптов:

sudo chmod 755 /etc/init.d/tessa /etc/init.d/chronos

Настройте автозапуск сервисов:

sudo chkconfig --add /etc/init.d/tessa

sudo chkconfig --add /etc/init.d/chronos

Для запуска сервисов выполните команды:

sudo /etc/init.d/tessa start

sudo /etc/init.d/chronos start

Сервисы перезапускаются командами:

sudo /etc/init.d/tessa restart

sudo /etc/init.d/chronos restart

Сервисы останавливаются командами:

sudo /etc/init.d/tessa stop

sudo /etc/init.d/chronos stop

Текущее состояние сервисов (запущен ли сервис) можно получить, выполнив команды:

sudo /etc/init.d/tessa status

sudo /etc/init.d/chronos status

В скриптах настроено логирование информации, которая обычно выводится сервисами на консоль, в файлы в папке ~/tessa/logs (относительно домашней папки пользователя, от имени которого запускаются сервисы).

  • ~/tessa/logs/tessa.log - вывод на консоль для веб-сервиса tessa.

  • ~/tessa/logs/chronos.log - вывод на консоль для фоновых сервисов chronos.