Установка комплекса Стек под Ubuntu
Установка комплекса Стек под Ubuntu
Установку будем проводить в соответствии со схемой, расположенной ниже.
Кратко опишем схему работы программного комплекса Стек
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.asc | sudo gpg --dearmor -o /etc/apt/trusted.gpg.d/postgresql.gpg
в) Добавим содержимое репозитория postgresql в систему:
echo "deb http://apt.postgresql.org/pub/repos/apt/ `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;
Пример просмотра информации по базам данных
3. Установим docker
а) импортируем ключ GPG
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
б) добавим репозиториb для установки docker в систему
add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu `lsb_release -cs` stable"
в) обновим систему, убедимся, что мы устанавливаем Docker из репозитория Docker и установим пакеты docker
apt update
apt-cache policy docker-ce
apt install docker-ce docker-ce-cli containerd.io
г) запустим 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
4. Установим docker-compose
Установим переменные
VERSION=$(curl --silent https://api.github.com/repos/docker/compose/releases/latest | grep -Po '"tag_name": "\K.*\d')
DESTINATION=/usr/bin/docker-compose
Загрузим текущую стабильную версию
curl -L https://github.com/docker/compose/releases/download/${VERSION}/docker-compose-$(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