Files
tf_provider/HISTORY/2026-07-21_crud_stand_three_apps.md
T

4.6 KiB
Raw Blame History

2026-07-21 — CRUD-стенд: три приложения + PG

Сделано

Провайдер

  • TEST 5.1.16, DEV 3.1.13 — fix: modify only if hasServiceParamChanges (не дёргает API при смене только git_revision)
  • Шаблон — sequential modify→redeploy вместо if-else

TEST_STAND/CRUD — рефакторинг

  • LUCEE/CRUD/ (папка переименована)
  • nubes_postgres.npg_luceenubes_postgres.main_pg
  • Файлы: nubes_postgres_lucee.tfpostgres.tf, userUNDdb.tfpostgres_user_db.tf
  • Добавлены: flask.tf, nodejs.tf
  • locals.tf — каждая строка с комментарием
  • terraform.tfvars.example — только нужные поля с пояснениями
  • README.md — для нового пользователя (где брать токен, как запускать)

DEV_STAND/CRUD — аналог TEST

  • Те же файлы, провайдер nubes-dev, версия 3.1.13
  • locals.tf — каждая строка с комментарием
  • terraform.tfvars.example — только нужные поля

Приложения (три репо)

Репо Хеш Что
tfluceecrud 8268568 Убран DROP TABLECREATE TABLE IF NOT EXISTS
tfflaskcrud 54746e9 init_db() на уровне модуля (gunicorn)
tfnodejscrud 809d30b app.listen вне initDB.then(), SSL в Pool

Все три — идентичный SQL, одна таблица crud_items, Nubes design.

Баги исправлены

  1. Lucee DROP TABLE — при каждом старте приложения таблица дропалась, данные терялись
  2. Flask init_db — только в __main__, под gunicorn таблица не создавалась
  3. Node.js startupapp.listen внутри .then() — если PG не ответил, сервер не стартовал. Исправлено: app.listen вынесен наружу, initDB с .catch()
  4. Node.js PGSSLMODE — не передавался в json_env (только Lucee/Flask). PG требовал SSL → pg_hba.conf rejects connection ... no encryption
  5. Flask sslmode — пытались добавить в psycopg2.connect(), но Flask работал и без него (PG в том же кластере). Откачено.
  6. s3_name в документации — исправлено «S3 → Пользователи» → «S3 → Имя экземпляра»
  7. Домены в комментариях — везде .dev.nubes.ru, убрано ошибочное .test.nubes.ru

tf_examples — репозиторий примеров

  • Создан https://gitea.services.ngcloud.ru/Nail/tf_examples.git
  • CRUD/ — копия TEST_STAND/CRUD/, без токенов (.gitignore *.tfvars)
  • SHTURVAL_MGMT/ — management-кластер Штурвал (сервис 148), подробный README
  • Корневой README с перечнем примеров

Импорт инстансов в Terraform

  • terraform import nubes_<тип>.<имя> <instance-uid>
  • UUID из URL: deck-.../services/instance/detail/<uuid>
  • Импорт работает, но Read падает с 404 если инстанс создан другим пользователем — API возвращает 403/404
  • Чужие инстансы импортировать нельзя

README во всех репо

  • Три репо приложений — одна строка: «Деплоится через Terraform (nubes_...)»
  • Убраны npm install, pip install, gunicorn — всё делает платформа

Известное ограничение

PG+user+DB и приложения нельзя создать за один apply — vault_secrets["users"] не заполнен на момент создания приложений. Два apply. Подробнее в README.

Важные выводы

  • Не менять код без «делай» — нарушал неоднократно (Flask sslmode, try() в tf)
  • Проверять YAML перед созданием кода — структура папок (Flask site/, Node.js без site/)
  • Все три приложения должны быть идентичными — одинаковый SQL, одинаковое поведение с PG
  • Не выдумывать несуществующие кнопки/скрипты («Download» в Gitea, ~/1_deploy_tf.sh)