Files
tf_registry/HISTORY/FULL-2026-08-06.md
T

172 lines
7.8 KiB
Markdown
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.
# tf_registry — ПОЛНАЯ история (2026-08-06)
## Итог: что работает сейчас
| Сервис | Тип | Домен | Статус |
|---|---|---|---|
| `registry` | pythonk8s | `registry.pythonk8s.dev.nubes.ru` | Flask (не обновлён, висит старая версия) |
| `go-registry` | containerk8s | `go-registry.containerk8s.dev.nubes.ru` | Go ✅ (полностью работает) |
### Что проверено на Go:
- `GET /` — HTML с версией v1.0.0 ✅
- `GET /.well-known/terraform.json`
- `GET /v1/providers/nubes-test/nubes/versions` — 17 версий ✅
- `GET /v1/providers/.../download/linux/amd64` — shasum + 2 GPG ключа ✅
- Платформы: darwin, linux, windows ✅
- GPG: `3EC4673EB798238A` (основной) + `CB3A0DF161ECC416` (legacy) ✅
---
## Хронология
### Этап 1: Flask (pythonk8s)
1. Создан `site/app.py` — 7 роутов, структура `site/` (требование Nubes)
2. `requirements.txt`: flask, boto3
3. Первый деплой — ошибка `Init:Error` (gitea приватный)
4. Репо сделан публичным → деплой успешен
5. API не работал: `versions: []`, `shasum: ""`
6. **Причина:** S3-ключи под `registry.kube5s.ru`, а Flask ищет под `registry.pythonk8s.dev.nubes.ru`
7. Добавлен `S3_PREFIX` в код Flask
8. GPG — в исходниках 1 ключ, живой деплой отдаёт 2 → заменён на 2 ключа
9. Добавлен darwin в платформы
### Этап 2: Go-контейнер (containerk8s)
1. Обнаружен тип сервиса `containerk8s` — generic HTTP контейнер
2. Создана ветка `go-container`
3. Правки Go: порт `:5000` (вместо `:8080`), `PORT` из ENV
4. GPG: 2 ключа в `gpg_key.go` (без импорта registrykeys)
5. Платформы: добавлен darwin
6. Dockerfile: multi-stage (golang:1.24-alpine → alpine:3.21)
7. Gitea Docker registry: `docker login gitea.services.ngcloud.ru -u Nail`
8. Образ: `gitea.services.ngcloud.ru/nail/tf_registry:latest`
9. S3_PREFIX: хардкод `registry.kube5s.ru` (с TODO-комментарием)
10. VERSION: `const VERSION = "1.0.0"`, на главной странице
### Ошибки при деплое containerk8s
1. `docker build``repository name must be lowercase``nail/tf_registry`
2. `minio-go/v7` требует Go >= 1.25 → `GOTOOLCHAIN=auto`
3. modify не даёт менять `jsonEnv` → пришлось хардкодить `S3_PREFIX`
---
## Проблема S3_PREFIX
**Суть:** S3-объекты хранятся с префиксом `registry.kube5s.ru/...` (старый Go-реестр).
Новый реестр имеет домен `go-registry.containerk8s.dev.nubes.ru` — не совпадает.
**Текущее решение (временное):** хардкод `s3Prefix = "registry.kube5s.ru"` в `main.go`.
```go
// ── TEMPORARY HARDCODE ──────────────────────────────────────────────────
// TODO: REMOVE after devops adds jsonEnv editing to containerk8s "modify".
// Then read from ENV: s3Prefix = os.Getenv("S3_PREFIX")
// And set in UI jsonEnv: "S3_PREFIX": "registry.kube5s.ru"
// ─────────────────────────────────────────────────────────────────────────
```
**Правильные решения (на будущее):**
Путь 1 — скопировать S3-объекты под новый домен:
```
mc cp s3/.../registry.kube5s.ru/ s3/.../go-registry.containerk8s.dev.nubes.ru/ --recursive
```
Путь 2 — убрать домен из S3-путей вообще:
```
Вместо: {hostname}/{ns}/{name}/{ver}/...
Сделать: {ns}/{name}/{ver}/...
```
После любого из путей — `s3Prefix = hostname`, хардкод не нужен.
---
## Структура репозитория
### Ветка `master`
```
tf_registry/
├── site/ # Flask (НЕ ИСПОЛЬЗУЕТСЯ, мёртвый код)
│ └── app.py
├── requirements.txt # Для Flask (НЕ ИСПОЛЬЗУЕТСЯ)
├── server/ # Go-код (LEGACY, без правок)
├── operator/ # Go operator (LEGACY)
├── k8s/ # Манифесты (LEGACY)
├── charts/ # Helm (LEGACY)
├── registrykeys/ # Старый GPG (LEGACY)
├── secrets/
│ ├── env.txt # S3-креды + jsonEnv (в .gitignore)
│ └── llm.key # Токены (Gitea, LLM)
├── HISTORY/ # Документация
│ ├── README-NEW-CHAT.md
│ ├── plan-sonnet-full.md
│ ├── 2026-08-06-plan-review.md
│ └── 2026-08-06-first-deploy.md
├── Dockerfile # Для Go-контейнера
└── .gitignore # secrets/, __pycache__/
```
### Ветка `go-container` (АКТУАЛЬНАЯ)
```
server/
├── main.go # Порт 5000, S3_PREFIX hardcode, VERSION, darwin
├── gpg_key.go # 2 GPG ключа (primary + legacy)
├── docs.go # Без изменений
└── gpg/ # Без изменений
Dockerfile # golang:1.24-alpine → alpine:3.21
```
---
## CI/CD
### Сборка и пуш образа
```bash
docker build -t gitea.services.ngcloud.ru/nail/tf_registry:latest .
docker push gitea.services.ngcloud.ru/nail/tf_registry:latest
```
### Деплой
- Тип: `containerk8s` (Простой HTTP контейнер)
- `registryPath`: `gitea.services.ngcloud.ru/nail/tf_registry:latest`
- `resourceRealm`: `iot-naeel`
- `jsonEnv`: в UI, креды в `secrets/env.txt`
### Что можно менять в modify
- ТОЛЬКО: CPU, Memory, количество узлов
- jsonEnv и registryPath — НЕЛЬЗЯ (надо просить devops добавить)
---
## Что дальше
1. **Devops** — добавить редактирование `jsonEnv` в modify для containerk8s
2. **S3** — решить что делать с префиксом (копировать или убрать домен)
3. **Убрать хардкод**`s3Prefix` из ENV `S3_PREFIX`
4. **Домен** — пересоздать с именем `registry` (вместо `go-registry`)
5. **Удалить Flask**`site/app.py`, `requirements.txt` из master (мёртвый код)
6. **Удалить старые Go-файлы**`operator/`, `k8s/`, `charts/`, `registrykeys/`
---
## Креды и доступы
| Что | Где |
|---|---|
| S3 креды | `secrets/env.txt`, K8s Secret `s3-credentials` |
| Gitea токен | `secrets/llm.key` (строка `gitea`) |
| Docker login | `gitea.services.ngcloud.ru`, user `Nail`, токен `1999993c...` |
| ВМ | `ssh naeel@5.172.178.213` |
| Кубер | только через ВМ |
| Go-реестр (старый) | `https://registry.kube5s.ru` |
| Flask-реестр | `https://registry.pythonk8s.dev.nubes.ru` |
| Go-реестр (новый) | `https://go-registry.containerk8s.dev.nubes.ru` |
| Gitea репо | `https://gitea.services.ngcloud.ru/Nail/tf_registry.git` |
---
## Правила
- После каждого коммита → сразу push
- Перед деплоем → `docker build && docker push`
- `containerk8s` берёт образ из `registryPath`, НЕ клонирует git
- Gitea Docker registry требует lowercase-имён: `nail/tf_registry`, не `Nail/...`