Инструкция по установке экземпляра ПО, предоставленного для проведения экспертной проверки
Установка
Пример развертывания
В статье описано развертывание Яндекс Диска в Kubernetes с помощью менеджера пакетов Helm. В качестве смежных сервисов выбраны СУБД PostgreSQL, система идентификации AD FS, использующая протокол SAML, или Keycloak с поддержкой протокола OpenID для организации единого входа (SSO), а также объектное хранилище Object Storage.
Схема взаимодействия компонентов

Вы можете воспользоваться приведенной ниже конфигурацией с минимальным набором параметров, чтобы протестировать приложение. Если Яндекс Диск подойдет для выполнения ваших задач, приобретите лицензии и разверните аналогичную структуру внутри вашего контура или продолжайте использовать облачный вариант.
Шаг 1. Подготовка к установке
-
Создайте кластер базы данных PostgreSQL.
-
Настройте Object Storage и создайте в нем бакет.
-
Сконфигурируйте сервер вашего провайдера идентификации: SAML (AD FS) или OpenID (Keycloak).
-
Подготовьте данные для задания параметров SSO: SAML (AD FS) или OpenID (Keycloak).
-
Подготовьтесь к работе с Kubernetes:
-
Создайте кластер Kubernetes.
-
Установите менеджер пакетов Helm.
На macOS это можно сделать при помощи команды:
brew install helmПорядок установки на другие системы описан в документации к Helm.
-
Зарезервируйте IP-адрес вашего балансировщика нагрузки.
Балансировщик нагрузки используется сервисом для распределения трафика.
-
Настройте DNS-запись типа A для вашего домена и укажите в ней IP-адрес балансировщика.
Вы можете создать А-запись:
-
В личном кабинете на сайте регистратора — если домен не делегирован на Яндекс.
-
В кабинете организации Яндекс 360 для бизнеса — если домен делегирован на Яндекс.
-
-
Шаг 2. Получение и настройка пакета Helm
-
Скачайте ZIP-файл с примером пакета Helm и распакуйте архив.
Пакет содержит в себе:
-
папку templates с шаблонами манифестов Kubernetes;
-
файл chart.yaml — чарт для развертывания сервиса в Kubernetes;
-
файл values.yaml со списком конфигурационных параметров.
-
-
Задайте значения для параметров конфигурации — в текстовом редакторе откройте файл values.yaml и отредактируйте его, указав значения параметров в соответствии с комментариями.
Содержание файла values.yaml
image: repository: docker-registry.pruffme.com/disk pullPolicy: IfNotPresent # Первый запуск chart выполняется с --set install=true install: false resources: limits: memory: 6Gi cpu: "6" requests: memory: 512Mi cpu: "0.8" # Сертификат TLS и приватный ключ. Имеют маску по домену tls: crt: |- -----BEGIN CERTIFICATE----- MII***= -----END CERTIFICATE----- key: |- -----BEGIN PRIVATE KEY----- MII***= -----END PRIVATE KEY----- # Доменное имя, по которому обращаются пользователи domain: boards.domain.ru # IP-адрес балансировщика нагрузки loadBalancerIP: xx.xx.xx.xx # Ключ лицензии license: "demo" # Тип СУБД, используемой в качестве основной (mongodb или postgres) mainDatabaseType: postgres # Порты контейнера приложения ports: # Внешний порт, по которому обращаются конечные пользователи приложения (ingress) https: 443 # Внутренний порт, на котором приложение ожидает подключения inner: 443 livenessProbe: enabled: false path: / initialDelaySeconds: 30 periodSeconds: 10 timeoutSeconds: 5 failureThreshold: 3 successThreshold: 1 readinessProbe: enabled: false path: / initialDelaySeconds: 30 periodSeconds: 10 timeoutSeconds: 5 failureThreshold: 5 successThreshold: 1 # Параметры mongodb, СУБД и pod. Применяются, если mainDatabaseType == mongodb mongodb: # Если используется внешняя СУБД mongodb, установите значение path, а также укажите relatedContainers.mongodb.enabled: false в строке 208 # Формат path: "mongodb://username:password@disk-mongodb-hostname:27017" path: "" # Имя базы данных database: "disk" # Параметры postgres, СУБД. Применяются, если mainDatabaseType == postgres postgres: user: "pruffme" database: "editboard" password: "password" host: "host.net" port: 6432 max: 20 idleTimeoutMillis: 300000 connectionTimeoutMillis: 200000 maxUses: 7500 # Параметры redis redis: enabled: true port: 6379 pass: "" name: "disk-redis" # Параметры clickhouse clickhouse: enabled: false # Установите значение url, если используется внешняя СУБД clickhouse # Формат url: "http://disk-clickhouse/ url: "" # Следующие значения для подключения к СУБД (внешней или внутри pod), создания и настройки pod, создания БД ports: http: 8123 database: "pruffme" username: "pruffme" password: "pruffme" flushNumber: 1 # Параметры S3 Object Storage s3: # Версия AWS SDK version: 2 # Идентификатор доступа пользователя. Используется вместе с секретным ключом для аутентификации запросов к хранилищу accessKey: "***" # Секретный ключ пользователя. Выступает в паре с идентификатором доступа для создания подписанных запросов secretKey: "***" # Название контейнера, который используется для хранения данных bucket: "boards" # URL сервиса хранилища endpoint: "https://storage.yandexcloud.net" # Регион, в котором расположено хранилище region: "ru-central1" # Часть URL в начале ссылки на файл. Обычно это путь к bucket publicPrefix: "https://storage.yandexcloud.net/boards/" # Параметр, который указывает, нужно ли использовать старый стиль при формировании пути к объектам в S3 s3ForcePathStyle: false # Версия API, которую следует использовать при работе с S3 apiVersion: "latest" # Список расширений файлов, которые поддерживаются для хранения. Позволяет ограничить типы файлов, которые могут быть загружены пользователями extensions: - "png" - "jpeg" - "jpg" - "pdf" - "docx" - "doc" - "xlsx" - "xls" - "pptx" - "ppt" - "mp4" - "mp3" acl: "public-read" jwtkey: "testtest" # Список модулей и их параметры modules: test: enabled: true apiPartner: "test" apiKey: "1234567890abcdefgh1234567890abcd" sso: enabled: true moduleType: "sso" type: "saml" entryPoint: "https://adfs.domain.ru/adfs/ls" issuer: "https://boards.domain.ru/sso/" cert: "adfs/cert.crt" callbackUrl: "https://boards.domain.ru/sso/callback" fieldId: "nameID" fieldName: "http://schemas.xmlsoap.org/ws/2005/05/identity/claims/name" exitUrl: "https://boards.domain.ru" apiPartner: "sso" apiKey: "sso" x509: createSecret: true certificate: | -----BEGIN CERTIFICATE----- MII***== -----END CERTIFICATE----- admins: - "admin@domain.ru" # Параметры резервных копий диска dump: enabled: false # Время ожидания (в часах) после последнего изменения диска, по истечении которого будет сделан снэпшот (моментальный снимок) dumpDashboardsWait: 1 # Время (в часах) после создания последнего снэпшота, по истечении которого будет автоматически создаваться резервная копия dumpDashboardsInterval: 6 # Параметры логирования действий во внешние системы logs: enabled: false # Путь к файлу, в который будет записываться события из раздела "Журнал событий" в формате CEF cefLog: "/home/user/log.cef" # Вывод логов в syslog syslog: ip: "127.0.0.1" port: 514 # Список ID событий, которые не будут фиксироваться в логах skiplogs: - 11 # Параметры импорта объектов из Miro miro: enabled: false # Клиентский номер приложения Miro (https://developers.miro.com/docs/try-out-the-web-sdk) clientId: "********" # Секретный ключ приложения secret: "****************" # Параметр, который задает, нужно ли сохранять в таблицу dashboards_import_tasks_items исходные объекты из Miro debug: true # Данные для создания подов (pods) дополнительных сервисов в Kubernetes # Указываются, если вы используете эти сервисы при работе с основным приложением и если такие поды еще не существуют в вашем контуре relatedContainers: mongodb: enabled: false # Параметры mongodb для создания pod и подключения к нему image: mongodb/mongodb-community-server:6.0-ubi8 name: disk-mongodb port: 27017 rootPassword: "disk" username: "disk" password: "disk" persistence: enabled: true storageClass: "standard" accessModes: - ReadWriteOnce size: 10Gi pv: # persistent volume – создаётся только для локального тестирования (например, minikube), размещается на хосте create: false name: pv-001 path: "/data/pv-001/" minio: # Параметры minio для создания pod и подключения к нему enabled: false image: bitnami/minio:latest name: "disk-minio" storageHostname: storage.disk.test rootUser: minio-root-user-disk rootPassword: minio-root-insecured-password ports: api: 9000 dashboard: 9001 persistence: enabled: true storageClass: "standard" accessModes: - ReadWriteOnce size: 10Gi pv: # persistent volume — создаётся только для локального тестирования (например, minikube), размещается на хосте create: false name: pv-002 path: "/data/pv-002/" clickhouse: # Параметры clickhouse для создания pod и подключения к нему enabled: false image: clickhouse/clickhouse-server name: "disk-clickhouse" persistence: enabled: true storageClass: "standard" accessModes: - ReadWriteOnce size: 10Gi pv: # persistent volume — создаётся только для локального тестирования (например, minikube), размещается на хосте create: false name: pv-003 path: "/data/pv-003/" testJob: enabled: false
Шаг 2. Запуск в режиме установки и конфигурирование
-
Запустите терминал и перейдите в папку с распакованным архивом.
-
Запустите приложение в режиме установки.
На режим установки указывает значение
trueпараметраinstall. Запуск можно произвести с помощью команды:helm install disk . --set install=true -
Сконфигурируйте настройки сервера с помощью веб-инсталлятора. Большинство параметров будут предзаполнены на основании данных из файла values.yaml.
-
Запустите веб-инсталлятор.
Для этого перейдите по ссылке
https://<АДРЕС_СЕРВЕРА_ДИСКА>, где вместо<АДРЕС_СЕРВЕРА_ДИСКА>— укажите адрес сервера Яндекс Диска, который доступен:-
по IP-адресу балансировщика, зарезервированного в п.5.3 на шаге подготовки;
-
по домену, к которому вы привязали IP-адрес балансировщика п.5.4 на шаге подготовки.
Подставьте в адрес одно из этих значений.
-
-
В окне приветствия нажмите Далее.

-
Выберите базу данных Postgres и нажмите Далее.

-
Проверьте параметры подключения к БД и проверьте соединение.

-
Обновите структуру базы данных.

-
Проверьте настройки объектного хранилища.

-
Обновите шаблоны.

-
Подтвердите завершение основной настройки.

-
Проверьте параметры SSO.
SAML (AD FS)OpenID (Keycloak)


-
Если список администраторов вы задали в файле values.yaml, то в окне выбора администратора никаких дополнительных действий совершать не нужно, даже если поле Логин пустое.

-
Подтвердите завершение конфигурирования приложения.

-
Шаг 3. Обновление чарта и запуск в основном режиме
-
Обновите существующий чарт в кластере Kubernetes и установите для параметра
installзначениеfalse:helm upgrade disk . --set install=false -
Перезапустите приложение.
-
Получите список всех развертываний (Deployment):
kubectl get deploy -
Перезапустите Deployment приложения Яндекс Диска:
kubectl rollout restart deployment/<DEPLOYMENT-NAME>где
<DEPLOYMENT-NAME>— имя нужного развертывания, напримерdeployment-disk.
-
-
Проверьте работоспособность сконфигурированного приложения.
-
Основная версия личного кабинета доступна по ссылке
https://<ВАШ_ДОМЕН>/cabinet/, где<ВАШ_ДОМЕН>— адрес домена, который вы указали в полеdomainфайла values.yaml. -
Если по какой-то причине вы не смогли настроить SSO, но при этом хотите проверить работу сервера, то вы можете это сделать при помощи тестового модуля по ссылке
https://<ВАШ_ДОМЕН>/test/.
-
Аккаунт
Сервис доступен для внутренних пользователей организации клиента.
Авторизация
Необходимость авторизации
Чтобы пользоваться сервисом, необходимо авторизоваться.
Порядок авторизации
-
Укажите логин в формате
имя_пользователя@домен_организации. -
Нажмите Войти.
-
После перенаправления в Active Directory Federation Services организации (далее – ADFS) авторизуйтесь в нем с помощью одного из способов, настроенных в ADFS организации. Например, через логин и пароль.
Демонстрация
Целиком архитектуру и код программы готовы продемонстрировать на нашей инфраструктуре в ходе встречи или видеоконференции.
Контактное лицо: gumennikova@yandex-team.ru — Анастасия Гуменникова, Product Owner Яндекс Диска.