getpgdata: порт по умолчанию 3000 (как у whitelist), версия 1.0.1, история 2026-08-18
This commit is contained in:
@@ -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"
|
||||
}
|
||||
```
|
||||
|
||||
|
||||
@@ -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
@@ -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": {
|
||||
|
||||
@@ -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})`);
|
||||
|
||||
Reference in New Issue
Block a user