# История 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` повышается при каждой правке кода (правило проекта).