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

7.8 KiB
Raw Blame History

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 buildrepository name must be lowercasenail/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.

// ── 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

Сборка и пуш образа

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. Удалить Flasksite/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/...