# Redmine в test-контуре

> Внедрено в test-контуре **29–30.05.2026**. Sentry из контура **удалён** (≈10 GiB RAM) — для ошибок приложений используйте [Grafana → Loki](./monitoring.md).

**Redmine** — issue tracker для задач разработки. В test-контуре он связан с Git-flow: коммиты с `Refs #N` / `Fixes #N` можно привязать к задачам; интеграция с Gitea настраивается вручную (см. ниже).

## URL и доступы

| Сервис | URL | Логин | Пароль |
|--------|-----|-------|--------|
| **Redmine** | http://redmine.sova.local | `admin` | `SovaRedmineTest2026!` |
| Gitea | http://git.sova.local | `gitea_admin` | `.generated/platform-credentials.env` |

Добавить в `/etc/hosts` (IP из `multipass info sova-test` или `./scripts/print-urls.sh`):

```
192.168.252.2 redmine.sova.local
```

Пароль test-контура также в `sova-deploy/apps/redmine/values-test.yaml`.

---

## Интерфейс

![Redmine: страница входа](../screenshots/21-redmine-login.png)

*Страница входа Redmine.*

![Redmine: главная](../screenshots/22-redmine-home.png)

*Главная Redmine: проекты и задачи.*

### Проект и задача по умолчанию

После bootstrap (`./scripts/bootstrap-redmine.sh`):

| Объект | Значение |
|--------|----------|
| Проект | **Sova Platform** (`sova-platform`) |
| Пример задачи | [#27 CRUD для новых сущностей в API](http://redmine.sova.local/issues/27) |

Задача #27 описывает CRUD для сущностей (новости, акции, заболевания, центры, статьи, услуги) — эталон для работы по Git-flow в test-контуре.

---

## Архитектура

```mermaid
flowchart LR
  subgraph gitops [GitOps]
    SD[sova-deploy main]
    RT[ArgoCD redmine-test]
    SP[ArgoCD sova-projects]
  end
  subgraph cluster [k3s]
    RM[Redmine pod]
    PG[(PostgreSQL redmine_test)]
    MP[Mailpit SMTP]
    ING[Ingress redmine.sova.local]
  end
  SD --> RT --> RM
  SD --> SP
  RM --> PG
  RM --> MP
  ING --> RM
```

| Компонент | Решение |
|-----------|---------|
| Chart | `sova-deploy/apps/redmine/` → Bitnami wrapper |
| Образ | `bitnamilegacy/redmine:6.0.5-debian-12-r0` |
| Namespace | `redmine` |
| PostgreSQL | БД `redmine_test` в `sova-data-test` (общий `postgresql-test`) |
| SMTP | Mailpit `mailpit.sova-mocks.svc.cluster.local:1025` (письма в UI Mailpit) |
| Ingress | `redmine.sova.local` (`deploy-platform-ingress.sh`) |
| ArgoCD | Application `redmine-test` в `argocd/apps/platform-tools.yaml` |
| AppProject | namespace `redmine` в `argocd/projects/sova-project.yaml`, GitOps через `sova-projects` |

---

## Деплой

### Через ArgoCD (основной путь)

После push `sova-deploy` в Gitea приложение `redmine-test` синхронизируется автоматически (`sova-root` → `platform-tools.yaml`).

Проверка:

```bash
kubectl get application redmine-test -n argocd
kubectl get pods -n redmine
curl -s -o /dev/null -w "%{http_code}\n" http://redmine.sova.local/
```

### Вручную (bootstrap кластера)

```bash
cd k3s-test
source ./scripts/use-kubeconfig.sh

# Helm + ingress + ArgoCD Application
./scripts/deploy-redmine.sh

# Проект sova-platform + задача #27 через REST API
./scripts/deploy-redmine.sh --bootstrap
# или отдельно:
./scripts/bootstrap-redmine.sh
```

`bootstrap-redmine.sh`:

1. Включает REST API в PostgreSQL (`rest_api_enabled`).
2. Создаёт проект `sova-platform`, если его нет.
3. Создаёт задачу **#27** с описанием CRUD (если ещё не существует).

---

## Git-flow и коммиты

Регламент сообщений коммитов (связь с Redmine):

```
feat(adminpanel): content CRUD (Refs #27)
fix(cabinet): registration on test contour (Fixes #45)
```

| Маркер | Эффект |
|--------|--------|
| `Refs #N` | ссылка на задачу; при webhook — ревизия в Redmine |
| `Fixes #N` | кликабельная ссылка в Gitea (external tracker) |

Ветки: `prod` / `test` / `stage` — см. [Git-flow](../git-flow.md) и [Gitea CI](./gitea-ci.md).

---

## Интеграция Gitea ↔ Redmine

Автоматизация через Gitea API **не включена** — только инструкции:

```bash
./scripts/setup-gitea-redmine-integration.sh
```

Скрипт выводит шаги:

1. **External Issue Tracker** (каждый repo: backend, adminpanel, cabinet, docs)  
   URL: `http://redmine.sova.local/issues/{index}`

2. **Webhook** (Push → ревизии в задаче)  
   URL: `http://redmine.sova.local/github_hook?project_id=<id>`  
   Требует plugin `redmine_github_hook` в custom-образе `sova-redmine/` (опционально, не в базовом деплое).

Базовый test-контур работает без webhook: задачи создаются в UI или через `bootstrap-redmine.sh`, коммиты помечаются `Refs #N` вручную в сообщении.

---

## Troubleshooting

| Проблема | Решение |
|----------|---------|
| `redmine-test` InvalidSpecError (namespace) | Применить `argocd/projects/sova-project.yaml`; проверить ArgoCD app `sova-projects` |
| Redmine ImagePullBackOff | `global.security.allowInsecureImages: true`; образ `bitnamilegacy/redmine` |
| DB connection error | БД `redmine_test` в `sova-data-test`; job `db-init` / SQL в `data/test/` |
| HTTP 502 / pod CrashLoop | `kubectl logs -n redmine deploy/redmine-test`; проверить PostgreSQL |
| REST API 403 | `./scripts/bootstrap-redmine.sh` включает `rest_api_enabled` |
| Письма не приходят | Ожидаемо в test: SMTP → Mailpit, не реальная почта |

Проверка БД:

```bash
kubectl exec -n sova-data-test postgresql-test-0 -- \
  env PGPASSWORD=sova_test_pass psql -U sova_test -d redmine_test -c '\dt' | head
```

---

## Файлы в репозитории

| Путь | Назначение |
|------|------------|
| `sova-deploy/apps/redmine/` | Helm chart + `values-test.yaml` |
| `sova-deploy/argocd/apps/platform-tools.yaml` | Application `redmine-test` |
| `sova-deploy/argocd/apps/sova-projects.yaml` | GitOps для AppProject (namespace `redmine`) |
| `scripts/deploy-redmine.sh` | Helm + ingress + ArgoCD |
| `scripts/bootstrap-redmine.sh` | Проект + задача #27 |
| `scripts/setup-gitea-redmine-integration.sh` | Инструкции Gitea ↔ Redmine |
| `sova-redmine/` | Custom image с `redmine_github_hook` (опционально) |

---

## Связанные разделы

- [Grafana / Loki](./monitoring.md) — логи pod'ов (вместо Sentry)
- [Git-flow](../git-flow.md) — ветки и PR
- [Gitea CI](./gitea-ci.md) — pipeline и теги
- [ArgoCD: приложения](./argocd.md) — sync и health
- [Практическое руководство](../../../presentation-practical-guide.md)
