Установка комплекса Стек под Ubuntu


Установка комплекса Стек под Ubuntu

Установку будем проводить в соответствии со схемой, расположенной ниже.

image

Кратко опишем схему работы программного комплекса Стек

1. Клиент

В качестве клиентского приложения используются интернет-браузеры, обновлённые до последней версии, за исключением Internet Explorer.

2. Веб сервер nginx

Сервер под управлением nginx используется для проксирования запросов от клиентов к сервисам frontend и stackgateway.

3. Веб сервер frontend

Сервер под управлением nginx. Возможно использовать другие веб-сервера. Frontend предназначен для обработки GET и POST запросов от клиента. Если Frontend не может обработать запрос, запрос пересылается на шлюз stackgateway через URL, прописанный в файле env.json (расположен в корне Frontend). Frontend реализован на JavaScript-фреймворке для создания пользовательских интерфейсов VUE.JS

4. Сервис stackgateway

Предназначен для пересылки запросов от клиента в очередь брокера сообщений RabbitMQ и возвращения ответа от брокера клиенту.

5. Сервис RabbitMQ

Брокер сообщений RabbitMQ - посредник между сервисом stackgateway и приложениями Стек, управляет потоками информации. RabbitMQ - программный брокер сообщений на основе стандарта AMQP, написан на языке Erlang, в качестве движка базы данных для хранения сообщений использует Mnesia.

6. СУБД PostgreSQL

Свободная объектно-реляционная система управления базами данных.

7. Сервис PgBouncer

pgbouncer — это программа, управляющая пулом соединений PostgreSQL. Любое конечное приложение может подключиться к pgbouncer, как если бы это был непосредственно сервер PostgreSQL, и pgbouncer создаст подключение к реальному серверу, либо задействует одно из ранее установленных подключений.
Предназначение pgbouncer — минимизировать издержки, связанные с установлением новых подключений к PostgreSQL.

8. Приложение Стек

Отвечает за работу с СУБД и внешними объектами. Ядро комплекса написано на С++. Содержит интерпретатор внутреннего логического языка программирования СТЕК («M-language»).

9. Сервис birtreport

Служит для создания отчётов. BIRT - это основанная на Eclipse система отчетов с открытым исходным кодом, которая в основном используется в веб-приложениях на основе Java и J2ee.

10. Сервис DotNet Core Служит для обработки документов WORD, EXCEL, XML и др. из различных источников.


Примечание
Сервисы nginx, frontend, stackgateway, rabbitmq, birtreport, dotnetcore и приложения Стек будем запускать внутри контейнеров docker при помощи технологии docker-compose.
Все команды ниже выполняем от пользователя с полными правами sudo. Для удобства изложения перед каждой выполняемой ниже командой мы не будем писать sudo.

1. Установим PostgreSQL

а) Установим дополнительные пакеты, если их ещё нет в системе:
apt install curl gpg apt-transport-https ca-certificates software-properties-common

б) Импортируем ключ GPG:
curl -fsSL https://www.postgresql.org/media/keys/ACCC4CF8.ascopen in new window | sudo gpg --dearmor -o /etc/apt/trusted.gpg.d/postgresql.gpg

в) Добавим содержимое репозитория postgresql в систему:
echo "deb http://apt.postgresql.org/pub/repos/apt/open in new window `lsb_release -cs`-pgdg main" | tee /etc/apt/sources.list.d/pgdg.list

г) Обновим систему и установим пакеты postgresql:
apt update
apt installpostgresql-13 postgresql-client-13 postgresql-plpython3-13 postgresql-common postgresql-client-common

д) Добавим службу postgresql в автозагрузку и запустим:
systemctl enable postgresql
systemctl start postgresql

e) Во время установки postgresql автоматически создаётся пользователь postgres. Этот пользователь имеет полный доступ суперадминистратора ко всему вашему экземпляру PostgreSQL. Сменим пароль пользователя postgres на надежный:

su postgres -c "psql -c \"alter user postgres with encrypted password 'StrongPassword';\""

ж) Внесём изменения в конфигурационный файл /etc/postgresql/13/main/postgresql.conf и отредактируем некоторые параметры. Пример postgresql.conf

з) Перезагрузим postgresql
systemctl restart postgresql

и) Создадим роли
Для этого создадим файл create_role.sql
и выполним команду:
su postgres -c psql < postgresql_create_role.sql

к) Создадим базу данных
su postgres -c "psql -c \"create database demo with owner = db_owner encoding = 'UTF8' LC_COLLATE = 'ru_RU.UTF-8' LC_CTYPE = 'ru_RU.UTF-8' TABLESPACE = pg_default CONNECTION LIMIT = -1 is_template = False;\""

Создадим расширения в базе
Для этого создадим файл create_extension.sql и выполним команду:
su postgres -c "psql demo" < create_extension.sql

Добавим права пользователям SA и SA_ASYNC на базу demo
su - postgres
psql -c "grant all privileges on database demo to "SA";"
psql -c "grant all privileges on database demo to "SA_ASYNC";"
exit

л) Пример восстановления базы данных из архива
pg_restore --host "127.0.0.1" --port "5432" --username "SA" --dbname "demo" --verbose demo_pg_2022_08.backup

м) Пример восстановления базы данных из каталога
pg_restore --format=d --host "127.0.0.1" --port "5432" --username "SA" --dbname "demo" --verbose /backup/demo_2208

н) Настроим архивацию и обслуживание баз PostgreSQL программного комплекса Стек
Для этого в каталоге /root создадим исполняемый файл backup_db.sh и настроим его автоматический запуск с помощью сервиса cron. Пример файла /etc/crontab

Применим изменения в crontab
systemctl reload cron

2. Установим pgbouncer

pgbouncer — это программа, управляющая пулом соединений PostgreSQL. Любое конечное приложение может подключиться к pgbouncer, как если бы это был непосредственно сервер PostgreSQL, и pgbouncer создаст подключение к реальному серверу, либо задействует одно из ранее установленных подключений.
Предназначение pgbouncer — минимизировать издержки, связанные с установлением новых подключений к PostgreSQL.

apt install pgbouncer

а) Корректируем единственный файл настройки /etc/pgbouncer/pgbouncer.ini
Пример файла pgbouncer.ini с описанием параметров.

б) Добавим в файл /usr/lib/systemd/system/pgbouncer.service в блок Service следующие строки:

LimitNOFILE=16000
LimitNOFILESoft=16000

После чего выполним:

systemctl daemon-reload
/etc/init.d/pgbouncer restart

в) Заполним файл /etc/pgbouncer/userlist.txt

Файл userlist.txt заполняется строками вида
"имя_пользователя_postgresql" "md5хеш_из_пароля_и_имени_пользователя"

хэши пользователей можно посмотреть командой
su postgres -c "psql -c \"select usename, passwd from pg_shadow;\""

пример userlist.txt
"SA" "md53cc8b157c2c7159ce6d9527b8c63acf7"
"SA_ASYNC" "md54cc8b157b6n7159ce6d9527b8c63afc3"
"postgres" "md59ae7c1123a23fbace9e7b36586974278"

г) Добавим службу pgbouncer в автозагрузку и запустим
systemctl enable pgbouncer
systemctl start pgbouncer

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

Для управления pgbouncer выполним команду:
psql -h 127.0.0.1 -p 6532 -U "SA" pgbouncer
Для ознакомления со справкой нужно выполнить SHOW HELP;

Пример просмотра информации по базам данных
image

3. Установим docker

а) импортируем ключ GPG
curl -fsSL https://download.docker.com/linux/ubuntu/gpgopen in new window | sudo apt-key add -

б) добавим репозиториb для установки docker в систему
add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntuopen in new window `lsb_release -cs` stable"

в) обновим систему, убедимся, что мы устанавливаем Docker из репозитория Docker и установим пакеты docker
apt update
apt-cache policy docker-ce
apt install docker-ce docker-ce-cli containerd.ioopen in new window

г) запустим docker
systemctl start docker

д) добавим пользователя docker
useradd -g docker docker

Добавим нас в группу docker
sudo usermod -aG docker ${USER}

е) Создадим каталог для проекта и назначим ему владельца docker
mkdir /home/<имя_проекта>
chown -R docker:docker /home/<имя_проекта>

ж) установим portainer для управления docker из веб интерфейса по порту 9005
docker run -d -p 9005:9000 --name=portainer --restart=always -v /var/run/docker.sock:/var/run/docker.sock -v portainer_data:/data portainer/portainer

image

4. Установим docker-compose

Установим переменные
VERSION=$(curl --silent https://api.github.com/repos/docker/compose/releases/latestopen in new window | grep -Po '"tag_name": "\K.*\d')
DESTINATION=/usr/bin/docker-compose

Загрузим текущую стабильную версию
curl -L https://github.com/docker/compose/releases/download/${VERSION}/docker-compose-$open in new window(uname -s)-$(uname -m) -o $DESTINATION

Делаем скачанный файл исполняемым
chmod 755 $DESTINATION

Создадим файлы docker-compose.yml и .env.example в папке /home/<имя_проекта>

  • настроим переменные в файле .env в соответствии с нашим проектом. Пример файла .env с описанием переменных.

  • настроим docker-compose.yml Пример docker-compose.yml с описанием разделов и параметров.

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

    docker-compose up -d

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

Подключитья к программе можно по ссылке http://$SITE_NAME ( https://$SITE_NAME )
где вместо переменной $SITE_NAME нужно подставить значение этой переменной из файла .env