issues/27: sync prod from k3s-test

This commit is contained in:
Valery Petrov
2026-06-03 18:37:53 +03:00
parent ed4c5a1145
commit e8ce6f251e
23 changed files with 3393 additions and 19 deletions
@@ -0,0 +1,198 @@
# Redmine в test-контуре
> Внедрено в test-контуре **2930.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)