name: gitea service_id: 99 service_display_name: Gitea service_short_name: gitea service_man: '# Инструкция по развертыванию Gitea через платформу

---
## 1. Общая информация
Gitea — это лёгкий, быстрый и самодостаточный сервис хостинга Git-репозиториев с веб-интерфейсом.
Позволяет создавать и управлять репозиториями, организациями, командами, а также настраивать CI/CD через интеграции.
Развёртывание полностью автоматизировано платформой.

## Доступные операции
- **create** — Создание сервиса Gitea
- **delete** — Удаление сервиса Gitea
- **modify** — Модификация сервиса Gitea
- **suspend** — Остановка сервиса Gitea
- **resume** — Запуск сервиса Gitea

---
## 2. Параметры развертывания
Ниже перечислены параметры, которые необходимо указать при создании ресурса Gitea:

* **Платформа для развертывания:**
Платформа для развертывания (среда, в которой будет развёрнут сервис). Пример: `k8s-3.ext.nubes.ru`.

* **Количество узлов в сети:**
Количество реплик подов Gitea. Пример: `1`

* **Квота (megabyte) памяти пода:**
Квота памяти пода в мегабайтах. Пример: `1024`

* **Квота (millicore) ядра пода:**
Квота CPU пода в миликорах (1000 mCPU = 1 vCPU). Пример: `500`

* **Размер (gigabyte) диска для базы данных:**
Размер PVC для хранения репозиториев и данных Gitea в гигабайтах. Пример: `10`

* **FQDN / Домен:**
Доменное имя, по которому будет доступен сервис. Пример: `git.example.com`

* **Инстанс услуги PostgreSQL:**
UUID услуги k8sPgsql, в которой будет создана база данных `gitea` и пользователь `techgitea`.

* **Дополнительные параметры сервера (iniServerParams):**
JSON-объект с дополнительными параметрами секции `[server]` в `app.ini`. Пример:
```json
{"MAX_CONTENT_LENGTH": "524288000"}
```

* **Дополнительные annotations для Ingress (ingressExtraAnnotations):**
JSON-объект с дополнительными annotations для Ingress-контроллера. Пример:
```json
{"nginx.ingress.kubernetes.io/proxy-body-size": "500m"}
```

---
## 3. Особенности подключения и работы с репозиториями

### 3.1. Доступ только по HTTPS
Сервис развёртывается с **rootless-образом** Gitea. SSH-сервер внутри и он **доступен только внутри кластера Kubernetes**.

**Внешний доступ к репозиториям осуществляется исключительно по HTTPS через Ingress.**

```bash
# Пример клонирования
https://<домен>/<пользователь>/<репозиторий>.git
```

### 3.2. Настройка git для передачи логина и пароля
Для работы с приватными репозиториями через HTTPS необходимо передать учётные данные. Рекомендуется использовать один из следующих способов:

**Встроить креды в URL remote**
```bash
git remote set-url origin https://<логин>:<пароль>@<домен>/<пользователь>/<репозиторий>.git
```
> **Важно:** Логин и пароль администратора создаются автоматически при развертывании и хранятся в Vault.

### 3.3. Работа с большими файлами
По умолчанию `MAX_CONTENT_LENGTH` установлен в **500 МБ**, а Ingress пропускает pack-файлы до **500 МБ**.

Если необходимо запушить файлы близкие к лимиту, увеличьте HTTP-буфер git на стороне клиента:
```bash
git config http.postBuffer 524288000
```

Для файлов **более 500 МБ** рекомендуется использовать **Git LFS**.

---
## 4. Выходные параметры
После успешного развертывания ресурса Gitea платформа возвращает ряд параметров.

Ключевым из них является:

**connectionUrl**
Это внешний URL для доступа к веб-интерфейсу и Git-репозиториям по HTTPS. Пример:
```
https://git.example.com
```

**internalConnect**
Внутренний эндпоинт для подключения к PostgreSQL из других сервисов внутри кластера.

---
## 5. Дополнительная информация
- База данных `gitea` и пользователь `techgitea` создаются автоматически в указанной услуге PostgreSQL.
- DNS-запись и TLS-сертификат (Let''s Encrypt) настраиваются автоматически на основе указанного домена.
- Для изменения параметров сервера Gitea (`app.ini`) используйте операцию **modify** с полем `iniServerParams`.
- Для добавления дополнительных Ingress-annotations используйте операцию **modify** с полем `ingressExtraAnnotations`.
---' lifecycle: suspend_on_destroy_default: true adopt_existing_on_create_default: false outputs: params: - code: state_params type: map - code: state_out type: map - code: state_params_flat type: map - code: state_out_flat type: map - code: vault_secrets type: map sensitive: true - code: vault_url type: string - code: vault_user_path type: string - code: vault_fields type: list operations: - name: create id: 82 kind: instance action: create params: - id: 232 code: resourceCPU data_type: integer > 0 required: true default: "500" maxvalue: 4000 minvalue: 300 descr: Квота ядра пода (Указывается в mili). 1000Mili = 1 Ядро man: Квота ядра пода (Указывается в mili). 1000Mili = 1 Ядро sort: 40 is_modifiable: true - id: 233 code: resourceMemory data_type: integer > 0 required: true default: "512" maxvalue: 8192 minvalue: 256 descr: Квота памяти пода (Указывается в Megabytes) man: Квота памяти пода (Указывается в Megabytes) sort: 50 is_modifiable: true - id: 234 code: resourceDisk data_type: integer > 0 required: true default: "1" maxvalue: 999 minvalue: 1 descr: Квота диска (Указывается в GIGAbytes) man: Квота диска (Указывается в GIGAbytes) sort: 60 is_modifiable: true - id: 235 code: resourceInstances data_type: integer > 0 required: true default: "1" maxvalue: 7 minvalue: 1 descr: Количество узлов man: Количество узлов в сети sort: 70 is_modifiable: true - id: 237 code: domain data_type: string required: true default: gitea-1 regex: ^(?:[a-z0-9](?:[a-z0-9-]{0,61}[a-z0-9])?\.)*[a-z0-9](?:[a-z0-9-]{0,61}[a-z0-9])?$ unique_scope: provider descr: Если будет указан FQDN, то происходят проверки DNS на валидность А-записи, или будет добавлено в зону resourceRealm man: Если будет указан FQDN, то происходят проверки DNS на валидность А-записи, или будет добавлено в зону resourceRealm sort: 20 - id: 238 code: psqlUid data_type: uuid required: true ref_svc_id: 90 descr: UUID Услуги k8sPgsql. Пользователя techGitea, базу данных gitea создаёт автоматически man: UUID Услуги k8sPgsql. Пользователя techGitea, базу данных gitea создаёт автоматически sort: 10 - id: 818 code: ingressExtraAnnotations data_type: map required: false is_modifiable: true - id: 821 code: iniServerParams data_type: map required: false is_modifiable: true - name: delete id: 83 kind: instance action: delete params: [] - name: modify id: 91 kind: instance action: modify params: - id: 259 code: resourceCPU data_type: integer > 0 required: true maxvalue: 4000 minvalue: 500 descr: Квота ядра пода (Указывается в mili). 1000Mili = 1 Ядро sort: 10 - id: 260 code: resourceMemory data_type: integer > 0 required: true maxvalue: 8192 minvalue: 256 descr: Квота памяти пода (Указывается в Megabytes) sort: 20 - id: 261 code: resourceDisk data_type: integer > 0 required: true maxvalue: 999 minvalue: 1 descr: Квота диска (Указывается в GIGAbytes) man: Квота диска (Указывается в GIGAbytes) sort: 30 - id: 262 code: resourceInstances data_type: integer > 0 required: true maxvalue: 7 minvalue: 1 descr: Количество узлов man: Количество узлов в сети sort: 40 - id: 819 code: ingressExtraAnnotations data_type: map required: false man: 'Примеры:
- `nginx.ingress.kubernetes.io/proxy-body-size: 500m` (Размер пакета)
- `nginx.ingress.kubernetes.io/proxy-read-timeout: "600"` (Время ожидания при чтении)
- `nginx.ingress.kubernetes.io/proxy-send-timeout: "600"` (Время ожидания отправке)' - id: 820 code: iniServerParams data_type: map required: false man: 'Примеры:
- `MAX_CONTENT_LENGTH: 524288000(~500мб)` (Размер пакета в байтах)' - name: resume id: 127 kind: instance action: resume params: [] - name: suspend id: 126 kind: instance action: suspend params: []