Files
getpgdata/history/2026-08-18.md
T

5.4 KiB
Raw Blame History

История getpgdata — 2026-08-18

Суть проекта

getpgdata — отдельное приложение для доступа к PostgreSQL (managed k8s, internal-only). Разворачивается на платформе Nubes как NodeJS managed service (nodejsk8s).

Репозиторий: https://gitea.services.ngcloud.ru/Nail/getpgdata.git (ветка master). Локальный путь: /home/naeel/ipwhitelist-app/getpgdata.

1. Создание (Flask-версия, ошибочная)

Первоначально приложение было собрано как Flask (Python) по howto ~/nubes/howto-flask-nubes.md (структура site/app.py + requirements.txt). Запушено коммитом 5c5e11c.

Функции Flask-версии: главная со списком таблиц, просмотр таблицы, SQL-консоль (read-only), /healthz.

2. Ошибка пользователя и замена на Node.js

Пользователь указал, что перепутал стек — нужно Node.js, а не Flask.

Решение: Flask-файлы (site/, requirements.txt) удалены, создана Node.js структура по образцу рабочего ipwhitelist-app:

getpgdata/
├── package.json            # version 1.0.x; main server.js; start: node server.js
├── server.js               # точка входа: Express + pg Pool
├── public/style.css
└── views/
    ├── index.ejs           # главная: подключение + список таблиц
    ├── table.ejs           # просмотр таблицы с пагинацией
    ├── query.ejs           # SQL-консоль (read-only, только SELECT)
    └── error.ejs

Коммит замены: b061dcd.

Проверено: node -c server.js, npm install (90 пакетов), реальный запуск сервера:

  • GET / → 200 (рендер страницы)
  • GET /healthz при недоступной БД → 503 (degraded, приложение не падает)
  • GET /table без имени → 302 redirect
  • POST /query не-SELECT → блокируется (read-only)
  • статика /public/style.css → 200

3. Настройки подключения к БД

  • Хост: postgresqlk8s-master.60bdf3e3-5087-41ff-b760-fe6ea544a80e.svc.cluster.local
  • Порт: 5432
  • БД: ipwhitelist (коммит 102689d — дефолт изменён с postgres на ipwhitelist)
  • Пользователи: super (полный доступ) и contracts — оба с паролями из jsonEnv
  • DB_SSLMODE: disable

Пароли в коде НЕ хранятся (читаются через process.env.DB_PASS). Готовые jsonEnv-блоки на обоих пользователей добавлены в README.md (коммит a890bb9).

4. Проблема деплоя: под nodejsk8s не стартует

Симптом (Nubes UI):

Приложение не запустилось. Производится полный откат установки. Error: jlib.k8s [correctReplicaActive] | ERROR | Под(ы) не работают: 'nodejsk8s' (Deployment).

Диагноз (сравнение с работающим whitelist):

Параметр whitelist (работает) getpgdata (падал)
Точка входа server.js, main в package.json server.js
npm start node server.js node server.js
Дефолтный порт 3000 5000
Liveness /healthz /healthz
Старт без доступной БД стартует стартует ✓

Гипотеза: дефолтный порт 5000 (перенесён из Flask-версии) не совпадает с портом 3000, который ожидает платформа Nubes для NodeJS managed service. Health-проба не находила сервис → под не Ready → «не работает nodejsk8s» → откат.

Исправление: дефолтный PORT в server.js изменён с 5000 на 3000; в README.md jsonEnv-блоки обновлены (PORT: 3000); package.json version → 1.0.1.

Проверено: сервер запущен без env PORT → слушает 0.0.0.0:3000, / → 200, /healthz → 503 (degraded).

⚠️ НЕ проверено: доступ к кластеру Nubes с этой машины отсутствует (iot-naeel и naeel-test-3 требуют OIDC-аутентификацию, managed-сервисы в них не видны). Поэтому точную причину «почему под упал» по логам пода подтвердить нельзя — требуется лог пода из Nubes UI. Если деплой после фикса порта снова не поднимется — смотреть логи пода (nodejsk8s Deployment) в UI, а не только полагаться на гипотезу о порте.

5. Прочее

  • package-lock.json закоммичен (зависимости: express, ejs, pg).
  • node_modules/ в .gitignore.
  • Версия в package.json повышается при каждой правке кода (правило проекта).