Files
polygon/site/services/dev/50_nextcloud.yaml
T

469 lines
22 KiB
YAML
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
name: nextcloud
service_id: 50
service_display_name: Nextcloud
service_short_name: nextcloud
service_man: '# Инструкция по развертыванию Nextcloud через платформу<br/><br/>## 1. Общая информация<br/><br/>Nextcloud — платформа для хранения и совместной работы с файлами. Разворачивается в K8s через
Helm-чарт `nextcloud/nextcloud`.<br/><br/>Сервис **не самодостаточен** — для создания необходимы заранее развёрнутые в той же ресурсной платформе:<br/><br/>* **PostgreSQL (k8s)** — база данных Nextcloud.
У СУБД должен быть выставлен параметр `sslRequired: false`.<br/>* **Redis (k8s)** — используется как memcache/locking backend.<br/><br/>Резервное копирование выполняется через **Velero** (бэкапятся под
и PVC с данными), а не штатным S3-бэкапом СУБД.<br/><br/>### Доступные операции с сервисом<br/><br/>* **create** — создание сервиса<br/>* **delete** — удаление сервиса<br/>* **suspend** —
остановка сервиса (масштабирование реплик в 0)<br/>* **resume** — запуск сервиса<br/>* **restart** — перезапуск (`kubectl rollout restart`)<br/>* **modify** — изменение настроек
сервиса<br/>* **reconcile** — служебная операция синхронизации версии (запускается платформой автоматически)<br/>* **create_backup** — создание резервной копии вручную (через Velero)<br/>* **recovery** —
восстановление из резервной копии в **новый** инстанс<br/><br/>> **Примечание:** операций работы с пользователями Nextcloud (`create_user`/`modify_user`/`delete_user`) на уровне платформы нет — пользователи
приложения администрируются внутри самого Nextcloud.<br/><br/>---<br/><br/>## 2. Параметры создания сервиса<br/><br/>### Платформа для развертывания<br/><br/>Ресурсная платформа (`resourceRealm`), в которой
будет развёрнут сервис. PostgreSQL и Redis, указанные ниже, обязаны находиться в той же ресурсной платформе.<br/><br/>### СУБД PostgreSQL (psqlUid)<br/><br/>UID инстанса PostgreSQL (k8s), в котором будет
создана база и пользователь `nextcloud`.<br/><br/>* У выбранной СУБД должна отсутствовать база `nextcloud` и пользователь `nextcloud`.<br/>* У СУБД обязан быть выключен `sslMode` (`false`).<br/><br/>###
СУБД Redis (redisUid)<br/><br/>UID инстанса Redis (k8s), который будет использоваться как memcache/locking backend.<br/><br/>### Количество реплик<br/><br/>Количество реплик Nextcloud (`clusterConfiguration.replicas`).<br/><br/>###
Квота памяти пода (MB)<br/><br/>Объём памяти для пода Nextcloud в мегабайтах.<br/>Пример: `2048`<br/><br/>### Квота CPU пода (mCPU)<br/><br/>CPU-квота для пода Nextcloud в миликорах (1000 mCPU = 1 vCPU).<br/>Пример:
`1000`<br/><br/>### Размер диска для данных (GB)<br/><br/>Объём диска под данные Nextcloud (`/var/www/html/data`) в гигабайтах.<br/>Пример: `20`<br/><br/>### Домен<br/><br/>Домен, на котором будет доступен
Nextcloud (`accessConfiguration.domain`).<br/><br/>* Если указано **полное доменное имя** (содержит точку, например `cloud.company.ru`) — домен считается клиентским. Перед созданием клиент обязан сам
настроить DNS-запись, указывающую на адрес Ingress платформы, иначе создание завершится ошибкой.<br/>* Если указано **короткое имя** (без точки, например `mycloud`) — платформа сама создаёт DNS-запись
вида `<domain>.nextcloudk8s` и настраивает сертификат.<br/><br/>### Версия<br/><br/>Версия приложения Nextcloud (`appConfiguration.version`, поле `appVersion` Helm-чарта). По ней автоматически подбирается
последняя подходящая версия Helm-чарта.<br/><br/>### Document Server<br/><br/>Параметр `appConfiguration.documentServer`. Если указать `collabora` — в кластер дополнительно разворачивается Collabora Online
(совместное редактирование офисных документов), доступный по пути `/collabora` на том же домене.<br/>Оставьте пустым, если Document Server не нужен.<br/><br/>### Уровень логирования<br/><br/>Параметр
`appConfiguration.logLevel`. Одно из значений: `DEBUG`, `INFO`, `WARN`, `ERROR`, `FATAL`, либо `NONE` — чтобы не переопределять логирование Nextcloud.<br/><br/>---<br/><br/>## 3. Параметры модификации
сервиса<br/><br/>Изменению подлежат ресурсы, версия и часть `appConfiguration`. Параметры `psqlUid`/`redisUid` менять после создания не рекомендуется.<br/><br/>### Количество реплик<br/><br/>См. раздел
2.<br/><br/>### Квота памяти пода (MB) / Квота CPU пода (mCPU) / Размер диска (GB)<br/><br/>См. раздел 2.<br/><br/>> **Примечание:** уменьшить уже выделенный размер диска нельзя.<br/><br/>### Версия<br/><br/>Обновление
версии разрешено только **на один патч** либо **на одну минорную версию вперёд** (с `patch=0`). Прыжок сразу через несколько минорных версий или через несколько мажорных версий запрещён — обновляться
нужно последовательно.<br/><br/>> **Примечание:** перед обновлением на новую minor/major-версию необходимо сначала выполнить `modify` на текущей версии, обновившись до последнего релиза этой версии (иначе
операция завершится ошибкой с описанием, до какой версии нужно обновиться сначала).<br/><br/>### Document Server / Уровень логирования<br/><br/>См. раздел 2.<br/><br/>---<br/><br/>## 4. Параметры удаления
сервиса<br/><br/>Специальных параметров нет — удаление сносит namespace целиком.<br/><br/>> **Примечание:** резервные копии, созданные через `create_backup`, хранятся в Velero отдельно от инстанса и **не
удаляются** вместе с сервисом — операции `delete_backup` для Nextcloud нет, копии нужно вычищать на стороне Velero отдельно.<br/><br/>---<br/><br/>## 5. Параметры создания бэкапа<br/><br/>Специальных
пользовательских параметров нет — имя бэкапа генерируется автоматически в формате `<дата>-<версия>-<namespace>`.<br/><br/>> **Примечание:** создать бэкап можно только если сервис предварительно приостановлен
(`suspend`). Velero, в который создаётся бэкап, должен быть развёрнут в той же ресурсной платформе, что и Nextcloud, и не может быть сменён на другой Velero-инстанс в рамках одного сервиса.<br/><br/>Бэкапится
под с данными вместе с PVC/PV (файлы), метаданные и БД PostgreSQL бэкапом не затрагиваются — версия схемы БД фиксируется отдельно (см. раздел 6).<br/><br/>---<br/><br/>## 6. Параметры восстановления из
бэкапа (recovery)<br/><br/>В отличие от СУБД-сервисов, `recovery` у Nextcloud **не восстанавливает данные в текущий инстанс**, а создаёт **новый** инстанс сервиса (аналог `create`), в который переносятся
файлы из указанной резервной копии.<br/><br/>### Точка восстановления (recoveryPoint)<br/><br/>Имя резервной копии Velero, из которой будет выполнено восстановление.<br/><br/>### Домен нового инстанса<br/><br/>Обязан
отличаться от домена исходного (текущего) инстанса — восстановление на тот же домен не поддерживается.<br/><br/>### СУБД PostgreSQL нового инстанса<br/><br/>Если версия Nextcloud в бэкапе отличается от
текущей версии инстанса, для нового инстанса обязательно нужно указать **другую** СУБД PostgreSQL (нельзя восстанавливать бэкап со старой схемой БД поверх БД с более новой схемой).<br/><br/>---<br/><br/>##
7. Выходные параметры<br/><br/>После успешного создания сервиса платформа возвращает:<br/><br/>### connectionUrl<br/><br/>Адрес для входа в Nextcloud: `https://<домен>`.<br/><br/>### namespace<br/><br/>Namespace
в K8s-кластере, в котором развёрнут сервис.<br/><br/>### Учётные данные (Vault)<br/><br/>В Vault сохраняется пароль администратора (`adminPass`) под логином `admin`.<br/><br/>---<br/><br/>## 8. Пример
подключения<br/><br/>Откройте `connectionUrl` в браузере и авторизуйтесь:<br/><br/>* **Логин:** `admin`<br/>* **Пароль:** значение `adminPass` из блока «Учётные данные» в Vault<br/><br/>---<br/><br/>##
9. Дополнительная информация<br/><br/>### Зависимости<br/><br/>Nextcloud нельзя создать без уже существующих в том же `resourceRealm` сервисов PostgreSQL (k8s, `sslRequired: false`) и Redis (k8s). При
`delete` зависимые СУБД и Redis не трогаются — удаляется только сам Nextcloud.<br/><br/>### suspend/resume<br/><br/>При `suspend` количество реплик Nextcloud, Collabora и exporter''а метрик принудительно
выставляется в `0` через `helm upgrade` (реальное масштабирование, а не просто пауза cron). При `resume` реплики возвращаются к значению из `clusterConfiguration.replicas`.<br/><br/>### Collabora<br/><br/>Собирается
из отдельного `image.repository: nexus-sa.tst.nubes.ru/collabora/code` и включается только при `appConfiguration.documentServer == ''collabora''`. Доступен на том же домене и том же TLS-сертификате, что
и сам Nextcloud, по пути `/collabora`.<br/><br/>### Бэкап/восстановление через Velero<br/><br/>Бэкап/восстановление файлов идёт через Velero с селектором `backup=<serviceName>-velero-backup` и включает
под, PVC и PV — то есть непосредственно файлы `/var/www/html/data`. Восстановление БД в новый инстанс выполняется штатным механизмом `create` с параметром `instanceUidFrom`, который проставляет `recovery`-джоба
автоматически.<br/>'
lifecycle:
suspendOnDestroyDefault: true
adoptExistingOnCreateDefault: false
operations:
- svcOperationId: 16
operation: create
kind: instance
action: create
- svcOperationId: 404
operation: create_backup
kind: subresource
action: create
- svcOperationId: 17
operation: delete
kind: instance
action: delete
- svcOperationId: 67
operation: modify
kind: instance
action: modify
- svcOperationId: 390
operation: reconcile
kind: action
action: reconcile
- svcOperationId: 406
operation: recovery
kind: action
action: recovery
- svcOperationId: 66
operation: restart
kind: action
action: restart
- svcOperationId: 129
operation: resume
kind: instance
action: resume
- svcOperationId: 128
operation: suspend
kind: instance
action: suspend
stateOut:
backups: {}
cfsParams:
- svcOperationCfsParamId: 1055
svcOperationCfsParam: startupConfiguration
dataType: map-fixed
isRequired: true
defaultValue: ''
isModifiable: false
dataDescriptor:
resourceRealm:
dataType: string
defaultValue: ''
isRequired: true
isModifiable: false
valueList:
- devclustername
- k8s-3-sandbox-nubes-ru
- k8s-4-sandbox-nubes-ru
psqlEnabled:
dataType: boolean
defaultValue: 'true'
isRequired: true
isModifiable: false
valueList:
- 'true'
redisEnabled:
dataType: boolean
defaultValue: 'true'
isRequired: true
isModifiable: false
valueList:
- 'true'
psqlUid:
dataType: uuid
defaultValue: ''
isRequired: true
isModifiable: false
redisUid:
dataType: uuid
defaultValue: ''
isRequired: true
isModifiable: false
- svcOperationCfsParamId: 1056
svcOperationCfsParam: clusterConfiguration
dataType: map-fixed
isRequired: true
defaultValue: ''
isModifiable: true
dataDescriptor:
cpu:
dataType: integer > 0
defaultValue: '1000'
isRequired: true
isModifiable: false
valueList:
- '1000'
- '2000'
- '3000'
- '4000'
memory:
dataType: integer > 0
defaultValue: '1024'
isRequired: true
isModifiable: false
valueList:
- '1024'
- '2048'
- '3072'
- '4096'
- '5120'
- '6144'
- '7168'
- '8192'
replicas:
dataType: integer > 0
defaultValue: '1'
isRequired: true
isModifiable: false
valueList:
- '1'
- '2'
disk:
dataType: integer > 0
defaultValue: '10'
isRequired: true
isModifiable: false
- svcOperationCfsParamId: 1057
svcOperationCfsParam: accessConfiguration
dataType: map-fixed
isRequired: true
defaultValue: ''
isModifiable: false
dataDescriptor:
domain:
dataType: string
defaultValue: nextcloud-gsjkslra
isRequired: true
isModifiable: false
- svcOperationCfsParamId: 1058
svcOperationCfsParam: appConfiguration
dataType: map-fixed
isRequired: true
defaultValue: ''
isModifiable: true
dataDescriptor:
version:
dataType: string
defaultValue: 33.0.4
isRequired: true
isModifiable: false
valueList:
- 33.0.4
documentServer:
dataType: string
defaultValue: collabora
isRequired: true
isModifiable: false
valueList:
- collabora
logLevel:
dataType: string
defaultValue: INFO
isRequired: true
isModifiable: false
valueList:
- DEBUG
- INFO
- WARN
- ERROR
- FATAL
- NONE
- svcOperationCfsParamId: 1077
svcOperationCfsParam: startupConfiguration
dataType: map-fixed
isRequired: true
defaultValue: ''
isModifiable: false
dataDescriptor:
veleroUid:
dataType: string
defaultValue: ''
isRequired: true
isModifiable: false
- svcOperationCfsParamId: 1059
svcOperationCfsParam: clusterConfiguration
dataType: map-fixed
isRequired: true
defaultValue: ''
isModifiable: true
dataDescriptor:
cpu:
dataType: integer > 0
defaultValue: ''
isRequired: true
isModifiable: false
valueList:
- '1000'
- '2000'
- '3000'
- '4000'
memory:
dataType: integer > 0
defaultValue: ''
isRequired: true
isModifiable: false
valueList:
- '1024'
- '2048'
- '3072'
- '4096'
- '5120'
- '6144'
- '7168'
- '8192'
replicas:
dataType: integer > 0
defaultValue: ''
isRequired: true
isModifiable: false
valueList:
- '1'
- '2'
disk:
dataType: integer > 0
defaultValue: ''
isRequired: true
isModifiable: false
- svcOperationCfsParamId: 1060
svcOperationCfsParam: appConfiguration
dataType: map-fixed
isRequired: true
defaultValue: ''
isModifiable: true
dataDescriptor:
version:
dataType: string
defaultValue: ''
isRequired: true
isModifiable: false
valueList:
- 33.0.4
documentServer:
dataType: string
defaultValue: ''
isRequired: true
isModifiable: false
valueList:
- collabora
logLevel:
dataType: string
defaultValue: ''
isRequired: true
isModifiable: false
valueList:
- DEBUG
- INFO
- WARN
- ERROR
- FATAL
- NONE
- svcOperationCfsParamId: 1078
svcOperationCfsParam: startupConfiguration
dataType: map-fixed
isRequired: true
defaultValue: ''
isModifiable: true
dataDescriptor:
resourceRealm:
dataType: string
defaultValue: ''
isRequired: true
isModifiable: false
valueList:
- devclustername
- k8s-3-sandbox-nubes-ru
- k8s-4-sandbox-nubes-ru
psqlEnabled:
dataType: boolean
defaultValue: 'true'
isRequired: true
isModifiable: false
valueList:
- 'true'
redisEnabled:
dataType: boolean
defaultValue: 'true'
isRequired: true
isModifiable: false
valueList:
- 'true'
recoveryPoint:
dataType: string
defaultValue: ''
isRequired: true
isModifiable: false
psqlUid:
dataType: uuid
defaultValue: ''
isRequired: true
isModifiable: false
redisUid:
dataType: uuid
defaultValue: ''
isRequired: true
isModifiable: false
veleroUid:
dataType: string
defaultValue: ''
isRequired: true
isModifiable: false
- svcOperationCfsParamId: 1079
svcOperationCfsParam: clusterConfiguration
dataType: map-fixed
isRequired: true
defaultValue: ''
isModifiable: true
dataDescriptor:
cpu:
dataType: integer > 0
defaultValue: ''
isRequired: true
isModifiable: false
valueList:
- '1000'
- '2000'
- '3000'
- '4000'
memory:
dataType: integer > 0
defaultValue: ''
isRequired: true
isModifiable: false
valueList:
- '1024'
- '2048'
- '3072'
- '4096'
- '5120'
- '6144'
- '7168'
- '8192'
replicas:
dataType: integer > 0
defaultValue: 1,2
isRequired: true
isModifiable: false
disk:
dataType: integer > 0
defaultValue: '10'
isRequired: true
isModifiable: false
- svcOperationCfsParamId: 1080
svcOperationCfsParam: accessConfiguration
dataType: map-fixed
isRequired: true
defaultValue: ''
isModifiable: true
dataDescriptor:
domain:
dataType: string
defaultValue: nextcloud-cpp3zfhe
isRequired: true
isModifiable: false
- svcOperationCfsParamId: 1081
svcOperationCfsParam: appConfiguration
dataType: map-fixed
isRequired: true
defaultValue: ''
isModifiable: true
dataDescriptor:
documentServer:
dataType: string
defaultValue: collabora
isRequired: true
isModifiable: false
valueList:
- collabora
logLevel:
dataType: string
defaultValue: NONE
isRequired: true
isModifiable: false
valueList:
- DEBUG
- INFO
- WARN
- ERROR
- FATAL
- NONE
version:
dataType: string
defaultValue: ''
isRequired: false
isModifiable: false
cfsParamsByOp:
16:
- 1055
- 1056
- 1057
- 1058
404:
- 1077
17: []
67:
- 1059
- 1060
390: []
406:
- 1078
- 1079
- 1080
- 1081
66: []
129: []
128: []
stateParams:
startupConfiguration: '{"resourceRealm": "", "psqlEnabled": true, "redisEnabled": true, "psqlUid": "", "redisUid": ""}'
clusterConfiguration: '{"cpu": 1000, "memory": 1024, "replicas": 1, "disk": 10}'
accessConfiguration: '{"domain": "nextcloud-gsjkslra"}'
appConfiguration: '{"version": "33.0.4", "documentServer": "collabora", "logLevel": "INFO"}'