getpgdata: порт по умолчанию 3000 (как у whitelist), версия 1.0.1, история 2026-08-18

This commit is contained in:
naeel
2026-08-18 20:11:22 +04:00
parent a890bb9b0f
commit c8a776ec04
4 changed files with 96 additions and 4 deletions
+2 -2
View File
@@ -44,7 +44,7 @@ getpgdata/
"DB_CONNECT_TIMEOUT": "5000",
"QUERY_MAX_ROWS": "200",
"APP_ENV": "production",
"PORT": "5000"
"PORT": "3000"
}
```
@@ -61,7 +61,7 @@ getpgdata/
"DB_CONNECT_TIMEOUT": "5000",
"QUERY_MAX_ROWS": "200",
"APP_ENV": "production",
"PORT": "5000"
"PORT": "3000"
}
```
+92
View File
@@ -0,0 +1,92 @@
# История 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` повышается при каждой правке кода (правило проекта).
+1 -1
View File
@@ -1,6 +1,6 @@
{
"name": "getpgdata",
"version": "1.0.0",
"version": "1.0.1",
"description": "Node.js приложение для доступа к PostgreSQL (managed k8s, internal-only)",
"main": "server.js",
"scripts": {
+1 -1
View File
@@ -170,7 +170,7 @@ app.use((err, req, res, next) => {
// ---------------------------------------------------------------------------
// Запуск
// ---------------------------------------------------------------------------
const PORT = parseInt(process.env.PORT || '5000', 10);
const PORT = parseInt(process.env.PORT || '3000', 10);
app.listen(PORT, '0.0.0.0', () => {
console.log(`getpgdata listening on port ${PORT} (env=${APP_ENV})`);