199 lines
7.3 KiB
Markdown
199 lines
7.3 KiB
Markdown
# 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.*
|
||
|
||

|
||
|
||
*Главная 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)
|