Для получения ссылки на загрузку архива и пароль от него направьте на адрес службы поддержки пользователей support@dppm.pro обращение: «Предоставьте доступ на загрузку архива и пароль от него для компании Х», только после предоставления доступа выполните нижеописанные действия.
По полученной ссылке скачайте архив (например planr_ХХХ.х.zip, где Х номер версии ПО). Структура архива устроена следующим образом (Рисунок 2):
Структура каталогов дистрибутива
Скачанный архив рекомендуется скопировать в каталог /opt/dppm/dist, предварительно его создав, если он не существует.
Для установки ПО PLAN-R необходимо выполнить следующую последовательность операций:
# docker --version
Docker version 24.0.7, build afdd53b
# docker-compose –version
Docker Compose version v2.23.3-desktop.2
Рекомендуемая структура каталогов:
Создайте структуру каталогов выполнив следующие команды.
# mkdir /opt/dppm && mkdir /opt/dppm/distr && mkdir /opt/dppm/postgres_dump
# cd /opt/dppm
# ls -lha
total 16K
drwxr-xr-x 4 root root 4.0K Mar 28 14:05 .
drwxr-xr-x 5 root root 4.0K Mar 28 14:05 ..
drwxr-xr-x 2 root root 4.0K Mar 28 14:05 distr
drwxr-xr-x 2 root root 4.0K Mar 28 14:05 postgres_dump
# mv <path*to_distr>/planr*<_version_>.zip /opt/dppm/distr/
# cd /opt/dppm/distr
# ls -la
total 2638584
drwxr-xr-x 2 root root 4096 Mar 28 14:05 .
drwxr-xr-x 4 root root 4096 Mar 28 14:05 ..
-rw-r-xr-x 1 root root 2701895280 Mar 28 14:05 planr_XXX.x.zip
# unzip -P <_password_> /opt/dppm/distr/planr\_<_version_>.zip -d /opt/dppm/
# ls -lha
Извлечение файлов приложения из архива
Распаковка образов PLAN-R
Успешный старт системы
Создание нового стака
Настройка файлов конфигурации для Portainer
Указание абсолютного пути к фалам конфигурации
Работа системы PLAN-R в Portainer
Загрузка образов системы в Docker
Старт приложения PLAN-R
Работающее приложение PLAN-R
Бэкапирование предыдущих настроек
Перемещение скачанного архива в каталог
Извлечение файлов приложения из архива
Распаковка образов PLAN-R
Успешный старт системы
Обновление файла конфигурации docker-compose.yaml в Portainer
Кнопка обновления стака в Portainer
Файл переменных среды. env (Environment variables если используется Portainer) содержит в себе все настройки системы, которые применяются при старте. После изменения файла с переменными среды, для применения настроек, нужно выполнить ./start.sh для вступления изменений в силу. Описание всех переменных среды приведено в таблице ниже.
Таблица 4. Описание значений переменной COMPOSE_PROFILES
Название переменной | Пример | Описание |
1 | 2 | 3 |
DB_URL | postgresql://planr:planr@postgres/planr | Строка подключения к базе данных PostreSQL. |
MB_URL | amqp://planr:planr@rabbitmq/planr | Строка подключения к брокеру сообщений. |
REDIS_PASSWORD | redis_password | Пароль для аунтификации в redis |
REDIS_URL | redis://:${REDIS_PASSWORD}@redis:6379 | Строка подключения к кешу данных Redis. |
LOCAL_AUTH_ENABLED | true | Использовать локальную аутентификацию, для хранения паролей используется база данных. |
LDAP_AUTH_ENABLED | true | Использовать аутентификацию через Active Directory параметры подключения настраиваются через Web консоль администрирования (Подробнее в пункте 17 Интеграция с Active Directory) |
KERBEROS_ENABLED | true | Включение SSO авторизации через Kerberos (см. п. 8.4.4.2 Настройка SSO Kerberos) |
KERBEROS_CONF_PATH | /etc/krb5.conf | Путь к файлу конфигурации kr5.conf на сервере |
KERBEROS_KEYTAB_PATH | /etc/krb5_multi.keytab | Пусть к сгенерированому keytab файлу на сервере. (см. п. 8.4.4.2.1 Генерация keytab файла) |
API_KEY_AUTH_ENABLED | true | Включить аутентификацию с помощью API ключей, используется для доступа сторонних приложений. Для настройки перейдите в управление пользователями в Web консоли администрирования. (Подробнее в пункте 14.2 Управление API токенами) |
FILE_TOKEN_SECRET | GeneRaTeDComPaNyToken | Рандомная строка, используемая для подписи файлов, выгружаемых для пользователя. Должна быть сгенерирована и заменена при первоначальной настройке системы. |
FILE_TOKEN_EXPIRESIN | 24h | Время жизни токена |
JWT_SECRET | HggHdtd467Gg67 | Строка для подписи JWT токена аутентификации. Должна быть сгенерирована и заменена при первоначальной настройке системы. |
EXTEND_LOGS | true | Вывод в логи подробной информации о событиях. |
Настройка прокси (8.4.3 Настройка прокси) | ||
PROXY_PORT | 80 | Внешний порт сервера, который будет открыт при старте приложения |
PROXY_SSL_PORT | 443 | Внешний порт сервера, который будет открыть при старте для защищённого HTTPS соединения |
PROXY_SSL_ENABLED | false | Включение/выключение HTTPS на выбранном PROXY_SSL_PORT |
PROXY_CERT_PATH | /etc/ssl/planr.pem | Путь к сертификату, выданному удостоверяющим центром компании для HTTPS соединения. Для применения сертификата переменная PROXY_SSL_ENABLED должна содержать значение true |
PROXY_API_ENABLED | true | Включение/выключение доступа к публичному api по адресу FQDN/public-api |
PROXY_SWAGGER_ENABLED | true | Включение/выключение доступа к публичному api по адресу FQDN/swagger |
Масштабирование приложения | ||
MAIN_REPLICA | 1 | Количество реплик main контейнера |
ADMIN_REPLICA | 1 | Количество реплик admin контейнера |
PLANR_WORKER_REPLICA | 8 | Количество реплик planr-worker контейнера |
IMPEX_WORKER_REPLICA | 8 | Количество реплик impex-worker контейнера |
BACKUP_WORKER_REPLICA | 1 | Количество реплик backup-worker контейнера |
AAS_WORKER_REPLICA | 1 | Количество реплик aas-worker контейнера |
LOGGER_WORKER_REPLICA | 1 | Количество реплик logger-worker контейнера |
SCHEDULE_WORKER_REPLICA | 1 | Количество реплик schedule-worker контейнера |
NOTICE_WORKER_REPLICA | 1 | Количество реплик notice-worker контейнера |
STORAGE_WORKER_REPLICA | 1 | Количество реплик storage контейнера |
COSTR_WORKER_REPLICA | 1 | Количество реплик costr-worker контейнера |
DOCS_REPLICA | 1 | Количество реплик docs контейнера |
API_REPLICA | 1 | Количество реплик api контейнера |
KERBEROS_REPLICA | 1 | Количество реплик kerberos контейнера |
Настройки аутентификации через OIDC (8.4.4.1 Настройка аутентификации через OIDC на примере keycloack) | ||
OPENID_ISSUER | https://OIDC.DOMANIN.COM/realms/REALMNAME | Область авторизации. |
OPENID_AUTHORIZATIONURL | https://OIDC.DOMANIN.COM/realms/ REALMNAME/protocol/openid-connect/auth | URL-адрес для авторизации. |
OPENID_TOKENURL | https://OIDC.DOMANIN.COM/realms/ REALMNAME/protocol/openid-connect/token | URL-адрес для получения пользовательского токена. |
OPENID_USERINFOURL | https://OIDC.DOMANIN.COM/realms/ REALMNAME/protocol/openid-connect/userinfo | URL-адрес для получения информации о пользователе. |
OPENID_CLIENTID | planrclient | Идентификатор клиента. |
OPENID_CLIENTSECRET | lzkfjhwo3587hnafh | Секретный ключ клиента. |
OPENID_CALLBACKURL | http://PLANR-HOST/api/v1/auth/openid | URL-адрес обратного вызова, вызывается после процесса аутентификации. |
Для контроля запуска нужных сервисов используется переменная COMPOSE_PROFILES (https://docs.docker.com/compose/profiles/).
Например, если планируется использовать внешнюю базу данных, то её профиль необходимо исключить, тогда переменная примет следующие значения
Описание доступных профилей для старта указано в следующей таблице.
Таблица 5. Значение переменной COMPOSE_PROFILES
Значение переменной COMPOSE_PROFILES | Описание |
---|---|
1 | 2 |
all | Старт приложения со всеми сервисами входящими в комплект поставки в полной конфигурации. |
main | Старт только основного приложения PLAN-R, без внешних сервисов, в этом случаи нужно обеспечить подключение приложения к необходимым сервисам postgresql, redis, rabbitmq и/или системе логирования. |
kerberos | Профиль для старта сервиса, реализующего Kerberos SSO. |
postgres | Профиль для старта базы данных PostgreSQL из комплекта поставки. |
rabbitmq | Профиль для старта брокера сообщений RabbitMQ из комплекта поставки. |
redis | Профиль для старта кеша данных Redis из комплекта поставки. |
logging | Старт системы логирования (Fluent-bit -> Loki -> Grafana). |
Для создания бэкапов базы данных перед обновлением можно использовать несколько способов:
Создание бэкапа базы данных перед обновлением
Создание бэкапа базы данных перед обновлением
Для созданию бэкапов по расписанию необходимо добавить скрипт dump.sh в таблицу исполнения скриптов по расписанию crontab. Параметры запуска скрипта можно посмотреть, выполнив ./dump.sh -h.
Параметры запуска скрипта dump.sh
Пример использования скрипта в crontab приведен ниже. В данном случае скрипт выполняется каждую ночь в 3:00, делает бэкап в директорию /opt/dppm/postgres_dump/ с периодом ротации 14 (Это означает что в папке всегда будет хранится 14 актуальных бэкапов) и количеством файлов, которые не удалятся в любом случаи – 5.
Исполнение скрипта по расписанию
Для восстановления базы данных из бэкапа используем скрипт ./restore.sh. Пример использования скрипта по восстановлению базы данных из бэкапа представлен на рисунке ниже.
Восстановление базы из файла бэкапа
Настройка интеграции с OIDC провайдерами настраивается с помощью переменных среды в файле ./planr/.env. Описание необходимы переменных среды можно найти в таблице (см. Таблица 4. Описание значений переменной COMPOSE_PROFILES )
Заходим в keyclocak, создаём новый realm с именем Planr, либо используем уже существующий. Переходим в созданный или существующий Realm, нажимаем “Realm setting” и скачиваем файл “OpenID Endpoint Configuration”.
Скачивание файла OpenID Endpoint Configuration
Переходим во вкладку “Clients” и создаем клиента. Во вкладке Capability Setting обязательно включить “Client authentication”. В вкладке “Login Settings” обязательно указать Valid redirect URLs (тут нужно указать FQDN хоста, на котором развернут PLAN-R, например https://PLAN-R.ru/*).
Создание клиента для Planr realm
Включение Client authentication
Указание Valid redirect URLs
Переходим к настройкам переменных среды в файле ./planr/.env. Открываем ранее скачанный файл OpenID Endpoint Configuration.json (справа на скриншоте) и сопоставляем данные для авторизации с переменными среды. Значение переменной OPENDID_CLIENTID и OPENID_CLIENTSECRET можно взять из Keycloak, перейдя в нужный Realm, далее открыть созданного ранее клиента planr и перейти на вкладку “Сredentials”. Переменная OPENID_CALLBACKURL должна содержать FQDN хоста, на котором развернут PLAN-R в формате http://PLANR-HOST/api/v1/auth/openid.
После сохранения настроек применить изменения командой ./start.sh
Настройка переменных среды для для авторизации через OIDC
Если все настроено правильно при входе должна появиться иконка OpenID.
Кнопка OpenID.
Для включения SSO авторизации Kerberos нужно выполнить следующие условия:
При соблюдении всех условий при авторизации должна появится кнопка “kerberos”, при нажатии на которую происходит аутентификация по сеансу операционной системы.
Кнопка аунтификации по сеансу операционной системы
SPN (Service Principal Name) — уникальный идентификатор экземпляра сервиса. SPN используется аутентификацией Kerberos для сопоставления экземпляра сервиса с учетной записью сервиса (service logon account). Это позволяет клиентским приложением аутентифицироваться в роли сервиса, даже не зная имени пользователя.
До того, как аутентификация Kerberos сможет использовать SPN для аутентификации сервиса, SPN должен быть привязан к учетной записи, которая будет использоваться для входа. SPN может быть привязан только к одной учетной записи. Если учетная запись, привязанная к SPN, изменяется, то необходимо заново выполнить привязку.
Когда клиент хочет воспользоваться сервисом, он находит экземпляр сервиса и составляет SPN для этого экземпляра, далее использует этот SPN для аутентификации.
Keytab-файл — это файл, содержащий пары Kerberos принципалов и их ключей (полученных с использованием Kerberos пароля). Эти файлы используются для аутентификации в системах, использующих Kerberos, без ввода пароля. Если пароль принципала изменится, то keytab-файл необходимо будет сгенерировать заново.
Создание пользователя на windows DC
Привязка SPN к созаной учетной записи
где:
Создание Keytab файла
Проверка учетной записи
Создание и привязка SPN к пользователю
Генерация keytab фалйла для samba DC
Установка в кластер осуществляется путем установки helm chart в кластер при помощи утилиты helm (https://helm.sh/docs/intro/install/).
Ограничения:
В состав helm chart входя следующие зависимости, данные сервисы можно инсталлировать отдельно, указав строку подключения к ним в файле values.yml
Перед установкой необходимо перенести образы из полученного архива в приватный Container registry, с которого в последующим будет осуществляется загрузка образов в Kubernetes кластер.
Выполнение авторизации в приватном репозитории
Загрузка образов в приватный репозиторий
Проверка доступности Kubernetes кластера
https://artifacthub.io/packages/helm/bitnami/postgresql/11.9.13
https://artifacthub.io/packages/helm/bitnami/redis/16.13.2
https://artifacthub.io/packages/helm/bitnami/rabbitmq/11.16.2
Если планируется использовать уже развернутые решения, деплой sub-charts можно отключить следующими параметрами. В данном случаи в секции planrConfig.secrets, необходимо указать строки для подключения к уже развернутым сервисам.
В следующей таблице представлены все параметры, используемые при установке helm chart.
Таблица 6. Параметры, используемые при установке helm chart
Переменная | Описание | Значение по умолчанию |
1 | 2 | 3 |
Глобальные параметры | ||
global.imageRegistry | Глобальный реестр образов Docker | "" |
global.pullSecrets | Массив имен существующих серектов для загрузки образов | [] |
global.storageClass | Класс для создания Persistent Volume(s) | "" |
Конфигурация приложения | ||
planrConfig. annotations | Дополнительные аннотации к созданной Configmap | [] |
planrConfig.secrets.create | Создание секрета с строками подключения к внешним ресурсам | true |
planrConfig.secrets.existSecret | Имя существующего секрета с строками подключения к внешним ресурсам | "" |
planrConfig.secrets.DB_URL | Строка подключения к бд PostgreSql | postgresql://planr:planr@planr-postgresql-hl:5432/planr |
planrConfig.secrets.MB_URL | Строка подключения к брокеру сообщений RabbitMQ | amqp://planr:planr@planr-rabbitmq-headless:5672/planr |
planrConfig.secrets.REDIS_URL | Строка подключения к кешу данных Redis | redis://:redisplanr@planr-redis-headless:6379 |
planrConfig.env.LOCAL_AUTH_ENABLED | Включение локальной аутенфикации | true |
planrConfig.env.LDAP_AUTH_ENABLED | Включение аутентификации через Active Directory | false |
planrConfig.env.API_KEY_AUTH_ENABLED | Включение аутентификации при помощи api ключей | true |
planrConfig.env.SYSTEM_SITE | Hostname, на который настроен ingress | localhost |
planrConfig.env.FILE_TOKEN_SECRET | Рандомная строка, используемая для подписи файлов, выгружаемых для пользователя. | qxowf545VL7hivuDL2XF5TdQz8pAp95o |
planrConfig.env.FILE_TOKEN_EXPIRESIN | Время жизни токена | 24h |
planrConfig.env.JWT_SECRET | Строка для подписи JWT токена аутентификации. | HggHdtd467Gg67 |
Конфигурация Services | ||
Services.main.type | Тип созданного Service для доступа к основному приложению | ClusterIP |
Services.main.port | Порт сервиса основного приложения | 80 |
Services.admin.type | Тип созданного Service для доступа к консоли администрирования | ClusterIP |
Services.admin.port | Порт сервиса для доступа к консоли администрирования | 81 |
Services.api.type | Тип созданного Service для доступа api | ClusterIP |
Services.api.port | Порт сервиса для доступа к api | 82 |
Services.docs.type | Тип созданного Service для к документации | ClusterIP |
Services.docs.port | Порт сервиса для доступа документации | 83 |
Конфигурация ingress | ||
ingress. enabled.true | Создание Ingress | true |
ingress. hostname | Dns имя. | "" |
ingress. className | Класс используемого ingress controller | nginx |
ingress. paths.main.path | Путь к основному приложению | / |
ingress.paths.main.pathType | Тип пути для доступа к основному приложению | Prefix |
ingress. paths.admin.path | Путь к консоли администрирования | /admin |
ingress.paths.admin.pathType | Тип пути для доступа к консоли администрирования | Prefix |
ingress. paths.api.path | Путь к публичному api | /public-api |
ingress.paths.api.pathType | Тип пути для доступа к публичному api | Prefix |
ingress. paths.docs.path | Путь к документации | /docs |
ingress.paths.docs.pathType | Тип пути для доступа к документации | Prefix |
Ingress.annotations | Дополнительный аннотации для ingress controller | [] |
Ingress.tls | Включение защищённого соединения для Ingress | [] |
Конфигурация загрузки образов | ||
image.registry | Глобальный реестр Docker образов | "" |
image.imageTag | Тег образов | latest |
image.pullPolicy | Политика скачивания образов | always |
image.existPullSecrets | Существующий секрет для загрузки образов | [] |
image.create | Создание секрета для скачивания образов | false |
image.imageCredentials.registry | реестр docker образов | "" |
image.imageCredentials.username | Имя пользователя для доступа к реестру образов | "" |
image.imageCredentials.password | Пароль для доступа к реестру docker образов | "" |
image.imageCredentials.email | Email для доступа к реестру docker образов | "" |
Масштабирование приложения | ||
deployments.main.image | Имя образа для main deployment | main |
deployments.main.replicaCount | Количество реплик main | 1 |
deployments.admin.image | Имя образа для admin | admin |
deployments.admin.replicaCount | Количество реплик admin | 1 |
deployments.api.image | Имя образа для api | api |
deployments.api.replicaCount | Количество реплик api | 1 |
deployments.docs.image | Имя образа для docs | docs |
deployments.docs.replicaCount | Количество реплик docs | 1 |
deployments.workers.backup.image | Имя образа для backup-worker | worker_backup |
deployments.workers.backup. replicaCount | Количество реплик backup-worker | 1 |
deployments.workers.storage.image | Имя образа для storage-worker | worker_storage |
deployments.workers.storage. replicaCount | Количество реплик storage -worker | 1 |
deployments.workers.impex .image | Имя образа для impex-worker | worker_impex |
deployments.workers.impex. replicaCount | Количество реплик impex-worker | 6 |
deployments.workers.planr.image | Имя образа для planr-worker | worker_planr |
deployments.workers.planr. replicaCount | Количество реплик planr-worker | 6 |
deployments.workers.schedule.image | Имя образа для schedule-worker | worker_schedule |
deployments.workers.schedule. replicaCount | Количество реплик schedule-worker | 1 |
deployments.workers.aas.image | Имя образа для aas-worker | worker_aas |
deployments.workers.aas. replicaCount | Количество реплик aas-worker | 1 |
deployments.workers.notice.image | Имя образа для notice-worker | worker_notice |
deployments.workers.notice. replicaCount | Количество реплик notice-worker | 1 |
deployments.workers.mailer.image | Имя образа для mailer-worker | worker_mailer |
deployments.workers.mailer. replicaCount | Количество реплик mailer-worker | 1 |
deployments.workers.logger.image | Имя образа для logger-worker | worker_logger |
deployments.workers.logger. replicaCount | Количество реплик logger-worker | 1 |
deployments.workers.costr.image | Имя образа для costr-worker | worker_costr |
deployments.workers.costr. replicaCount | Количество реплик costr-worker | 1 |
Настройка хранилища Persistance volume | ||
planrPersistence.create | Создать хранилище при установке (Можно не создавать если будет использоваться s3 minio) | false |
planrPersistence.storageClass | Класс Persistent Volumes (если не указан используется класс по умолчанию) | "" |
planrPersistence.accessMode | Режим доступа к хранилищу | ReadWriteMany |
planrPersistence.size | Размер хранилища | 20Gi |
planrPersistence.annotations | Дополнительные анотации, которые необходимо добавить при создании хранилища. | [] |
planrPersistence.useExitsClaims | Использование предварительно подготовленного хранилища. | "" |
Автомаштабирование | ||
autoscaling.main.enabled | Включение автомаштабирования для main deployment | false |
autoscaling.main.minReplicas | Минимальное количество реплик при автомаштабировании main deployment | 1 |
autoscaling.main.maxReplicas | Максимальное количество реплик при автомаштабировании main deployment | 4 |
autoscaling.main. targetCPUUtilizationPercentage | Порог утилизации СPU для автомаштабирования main deployment | 80 |
autoscaling.main. targetMemoryUtilizationPercentage | Порог утилизации RAM для автомаштабирования main deployment | 80 |
autoscaling.admin.enabled | Включение автомаштабирования для admin deployment | false |
autoscaling.admin.minReplicas | Минимальное количество реплик при автомаштабировании admin deployment | 1 |
autoscaling.admin.maxReplicas | Максимальное количество реплик при автомаштабировании admin deployment | 4 |
autoscaling.admin. targetCPUUtilizationPercentage | Порог утилизации СPU для автомаштабирования admin deployment | 80 |
autoscaling.admin. targetMemoryUtilizationPercentage | Порог утилизации RAM для автомаштабирования admin deployment | 80 |
autoscaling.workers.enabled | Включение автомаштабирования для workers deployment | false |
autoscaling.workers.minReplicas | Минимальное количество реплик при автомаштабировании workers deployment | 1 |
autoscaling.workers.maxReplicas | Максимальное количество реплик при автомаштабировании workers deployment | 4 |
autoscaling.workers. targetCPUUtilizationPercentage | Порог утилизации СPU для автомаштабирования workers deployment | 80 |
autoscaling.workers. targetMemoryUtilizationPercentage | Порог утилизации RAM для автомаштабирования workers deployment | 80 |
Настройка потребления ресурсов | ||
resources.main | Дополнительные значения по ограничению ресурсов для main deployment | {} |
resources.admin | Дополнительные значения по ограничению ресурсов для admin deployment | {} |
resources.workers | Дополнительные значения по ограничению ресурсов для workers deployment | {} |
Настройка распределения по Нодам | ||
nodeSelector.main | настройка распределения main deployment по нодам кластера | {} |
nodeSelector.admin | настройка распределения admin deployment по нодам кластера | {} |
nodeSelector.workers | настройка распределения workers deployment по нодам кластера | {} |
tolerations.main | Дополнительная настройка tolerations для main deployment | [] |
tolerations.admin | Дополнительная настройка tolerations для admin deployment | [] |
tolerations.workers | Дополнительная настройка tolerations для workers deployment | [] |
affinity.main | Настройка affinity правил для main deployment | {} |
affinity.admin | Настройка affinity правил для admin deployment | {} |
affinity.workers | Настройка affinity правил для workers deployment | {} |
Сервисный аккаунт | ||
serviceAccount.create | Создание сервисного аккаунта | false |
serviceAccount.annotations | Дополнительные анотации при создании сервисного аккаунта | {} |
serviceAccount.name | Имя сервисного аккаунта | "" |
Настойка подов | ||
podAnnotations.main | Дополнительные аннотации при создании main deployment | {} |
podAnnotations.worker | Дополнительные аннотации при создании workers deployment | {} |