Полное руководство по работе с Teleport, PgWeb, Dev DB и Backend Admin
Teleport — прокси-сервер для безопасного доступа к внутренним ресурсам ChatPlace в Kubernetes кластере main-cluster.
| Параметр | Значение |
|---|---|
| Proxy URL | t.chatplace.io:443 |
| User | n-kazakova-qa |
| Роли | dev-access qa review-access |
| Сессия | 8 часов |
| Auth | Пароль + OTP (TOTP) |
| VPN | Обязателен (Shadowsocks → SOCKS5 127.0.0.1:1080) |
| Способ | Когда использовать | Особенности |
|---|---|---|
| PgWeb (через Teleport) | Запросы к БД конкретной review ветки | REST API, отдельная БД для каждого MR, сертификаты tsh |
| Dev DB (напрямую) | Запросы к общей dev базе | psql через proxychains, один общий сервер, ~1800 компаний |
# Проверить, работает ли уже ss -tlnp | grep 1080 # Если нет — запустить /tmp/sslocal -c /tmp/ss-config.json & # Конфиг: /tmp/ss-config.json # Method: 2022-blake3-aes-256-gcm (только shadowsocks-rust!) # Бинарник: /tmp/sslocal (с github.com/shadowsocks/shadowsocks-rust)
export HTTPS_PROXY=socks5://127.0.0.1:1080 export ALL_PROXY=socks5://127.0.0.1:1080 tsh login --proxy=t.chatplace.io:443 --user=n-kazakova-qa --auth=local # → Enter password → OTP код (30 сек жизни)
tsh status # Должно показать: Logged in as: n-kazakova-qa, Valid for 8h
PgWeb v0.17.0 — веб-интерфейс для PostgreSQL. Каждая review ветка имеет свой экземпляр PgWeb с изолированной базой данных.
Доступ через TLS-сертификаты, выданные Teleport.
# Пример для api-1764
export HTTPS_PROXY=socks5://127.0.0.1:1080
tsh apps login backend-pgweb-chatplace-api-XXXX-review-main-cluster
# Сертификаты автоматически сохраняются в ~/.tsh/keys/
# Переменные (подставить нужный номер ветки)
BRANCH=1764
APP="backend-pgweb-chatplace-api-${BRANCH}-review-main-cluster"
CERT="$HOME/.tsh/keys/t.chatplace.io/n-kazakova-qa-app/main/${APP}.crt"
KEY="$HOME/.tsh/keys/t.chatplace.io/n-kazakova-qa-app/main/${APP}.key"
BASE="https://${APP}.t.chatplace.io"
export HTTPS_PROXY=socks5://127.0.0.1:1080
| Endpoint | Описание | Пример |
|---|---|---|
GET / |
Веб-интерфейс (HTML) | curl --cert $CERT --key $KEY $BASE/ |
GET /api/info |
Версия PgWeb, настройки | curl --cert $CERT --key $KEY $BASE/api/info |
GET /api/schemas |
Список схем | Возвращает ["public"] |
GET /api/query?query=... |
Выполнить SQL (GET) | curl --cert ... "$BASE/api/query?query=SELECT+1" |
POST /api/query |
Выполнить SQL (POST, для длинных) | curl --cert ... --data-urlencode "query=SELECT ..." $BASE/api/query |
# Список таблиц curl -s --cert "$CERT" --key "$KEY" \ "$BASE/api/query" \ --data-urlencode "query=SELECT tablename FROM pg_tables WHERE schemaname='public' ORDER BY tablename" # Структура таблицы curl -s --cert "$CERT" --key "$KEY" \ "$BASE/api/query" \ --data-urlencode "query=SELECT column_name, data_type FROM information_schema.columns WHERE table_name='companies' ORDER BY ordinal_position" # Произвольный запрос curl -s --cert "$CERT" --key "$KEY" \ "$BASE/api/query" \ --data-urlencode "query=SELECT id, email FROM users LIMIT 5"
{"columns": [...], "rows": [[...], ...], "stats": {...}}
GET /api/tables возвращает 404 в данной версии! Используйте SQL-запрос pg_tables вместо этого.
| Параметр | Значение |
|---|---|
| Host | 34.175.47.255 |
| Port | 5432 |
| User | natasha_qa |
| Database | chatplace |
| SSL | require |
| Access | READ-ONLY |
| Таблиц | ~203 |
| Компаний | ~1797 |
# Через proxychains (VPN должен работать) proxychains4 -q -f /tmp/proxychains-local.conf psql \ "host=34.175.47.255 port=5432 user=natasha_qa \ password=ftb76RV657BTIGBYUf687ugyt \ dbname=chatplace sslmode=require" # Одиночный запрос (без интерактивного режима) proxychains4 -q -f /tmp/proxychains-local.conf psql \ "host=34.175.47.255 ..." -t -c "SELECT count(*) FROM users"
| Таблица | Описание | Ключевые поля |
|---|---|---|
companies | Компании (проекты) | ai_action_usage_limit, ai_action_next_payment_at, ai_action_last_reset_at |
subscription_logs | Логи подписок | user_id, type (1-12), payment_count, created_at |
subscriptions | Подписки (Stripe) | user_id, type, stripe_status, ends_at |
plans | Тарифные планы | name, label, price, configuration |
user_plans | Связь юзер↔план | user_id, plan_id, company_id, quantity |
payments | Платежи | - |
ai_actions_history | История AI-запросов | - |
ai_action_pending_payments | Ожидающие AI-платежи | company_id, status, actions_count |
| type | Кол-во (dev) | Предполагаемое значение |
|---|---|---|
| 1 | 395 | Создание подписки |
| 2 | 348 | Обновление подписки |
| 3 | 795 | Ежемесячное начисление AI-кредитов |
| 4 | 829 | Продление подписки |
| 5 | 276 | Изменение плана |
| 6 | 177 | Отключение доп. функции |
| 7 | 304 | Включение доп. функции |
| 8 | 263 | Ручной сброс токенов |
| 9 | 372 | Применение промокода |
| 10 | 5 | Специальное событие |
| 11 | 277 | Изменение количества аккаунтов |
| 12 | 10 | Миграция |
backend-admin-chatplace-dev-main-cluster.t.chatplace.io
| Параметр | Значение |
|---|---|
npkazakova@gmail.com | |
| Password | hTulILr7zhX4Vd5Q |
| Источник | Константин Девяткин (Slack, Feb 26) |
export HTTPS_PROXY=socks5://127.0.0.1:1080 tsh apps login backend-admin-chatplace-api-XXXX-review-main-cluster # Открыть в браузере (через tsh proxy) # или curl с сертификатами: CERT="$HOME/.tsh/keys/t.chatplace.io/n-kazakova-qa-app/main/backend-admin-chatplace-api-XXXX-review-main-cluster.crt" KEY="$HOME/.tsh/keys/t.chatplace.io/n-kazakova-qa-app/main/backend-admin-chatplace-api-XXXX-review-main-cluster.key" curl -s --cert "$CERT" --key "$KEY" https://backend-admin-chatplace-api-XXXX-review-main-cluster.t.chatplace.io/
Основное API приложение. Порт 80.
api-XXXX.review.chatplace.io
Панель управления (Laravel). Порт 80.
Подписки, планы, юзеры, AI-кредиты
Dashboard-сервис. Порт 80.
PgWeb — SQL к БД ветки. Порт 8081.
REST API: /api/query
Обработка вебхуков. Порт 80.
Stripe, Telegram, внешние интеграции
MCP (Model Context Protocol). Порт 80.
Доступен не на всех ветках (13 из 20)
На данный момент (01.04.2026) доступно 20 review веток + 1 dev:
| # | API Branch | PgWeb | MCP | Примечание |
|---|---|---|---|---|
| 1 | 1080 | ✅ | ✅ | |
| 2 | 1368 | ✅ | ✅ | |
| 3 | 1422 | ✅ | — | |
| 4 | 1617 | — | — | Нет PgWeb |
| 5 | 1698 | ✅ | ✅ | AmoCRM тесты (DS-650 старое) |
| 6 | 1733 | ✅ | — | |
| 7 | 1764 | ✅ | ✅ | GCal + DS-650 текущий |
| 8 | 1769 | ✅ | ✅ | |
| 9 | 1778 | ✅ | — | |
| 10 | 1784 | ✅ | — | |
| 11 | 1833 | ✅ | — | |
| 12 | 1844 | ✅ | — | |
| 13 | 1868 | ✅ | ✅ | |
| 14 | 1944 | ✅ | ✅ | |
| 15 | 2020 | ✅ | ✅ | |
| 16 | 2022 | ✅ | ✅ | |
| 17 | 2024 | ✅ | ✅ | |
| 18 | 2054 | ✅ | ✅ | |
| 19 | 2063 | ✅ | ✅ | |
| 20 | 2069 | ✅ | ✅ | |
| — | dev | — | ✅ | Общая dev-среда |
Суть: У пользователей с годовой подпиской (Pro Year) ежемесячное начисление AI-кредитов (subscription_logs type=3) иногда пропускается.
Причина (по Антону): Часть старых амбассадоров не попала в миграцию. Плюс баг с промокодом — дата не проставлялась (исправлен в феврале 2026).
Решение: В админке → раздел «Подписки» → кнопка «Дата сброса» у ИИ-запросов — проставить нужную дату.
На скриншоте — Backend Admin → Планы конкретного пользователя:
| План | Кол-во | Платёжная система | След. списание | Действия |
|---|---|---|---|---|
| ChatPlace ИИ | 1 | — | — | Удалить |
| Pro | 1 | Cloudpayments | 12 Apr 2026, 07:55 | Изменить дату / Отменить |
| Аккаунты | 4 | — | — | Изменить кол-во |
| ИИ-запросы | 11 941 / 11 941 | — | — | Изменить кол-во / 🔴 Дата сброса |
🔴 Красная рамка обведена вокруг кнопки «Дата сброса» — именно её Антон добавил для ручного исправления даты ежемесячного сброса AI-токенов.
# Пример: rustam.chatplace@gmail.com — пропуски в ежемесячных начислениях (type=3) proxychains4 -q -f /tmp/proxychains-local.conf psql "..." -t -c " SELECT sl.type, sl.payment_count, to_char(sl.created_at, 'YYYY-MM') as month FROM subscription_logs sl JOIN users u ON u.id = sl.user_id WHERE u.email = 'rustam.chatplace@gmail.com' AND sl.type = 3 ORDER BY sl.created_at "
| Месяц | type=3? | payment_count |
|---|---|---|
| 2024-10 | ✅ | 2 |
| 2024-11 | ✅ | 3 |
| 2024-12 | ❌ ПРОПУСК | — |
| 2025-01 | ✅ | 5 |
| 2025-02 | ✅ | 6 |
| 2025-03 | ❌ ПРОПУСК | — |
| 2025-04 | ✅ | 8 |
| 2025-05 | ✅ | 9 |
| 2025-06 | ❌ ПРОПУСК | — |
| 2025-07 | ✅ | 11 |
| 2025-08 | ✅ | 12 |
| 2025-09 | ❌ ПРОПУСК | — |
| 2025-10 | ✅ | 13 |
| 2025-11 — 2026-03 | ❌ ПРОПУСК × 5 | — |
# Все компании с ai_action_next_payment_at = NULL (дата сброса не установлена)
proxychains4 -q -f /tmp/proxychains-local.conf psql "..." -t -c "
SELECT count(*) as total,
count(ai_action_next_payment_at) as with_next_payment,
count(ai_action_last_reset_at) as with_last_reset
FROM companies
"
# Результат: 1797 всего, 0 с next_payment, 299 с last_reset
# → ai_action_next_payment_at = NULL у ВСЕХ компаний на dev!
rustam.chatplace@gmail.com)
# QA — Доступ к инфраструктуре ChatPlace
## Teleport (t.chatplace.io)
- **Proxy:** t.chatplace.io:443
- **Auth:** пароль + OTP (TOTP)
- **Сессия:** 8 часов
- **Требуется VPN** (Shadowsocks SOCKS5)
### Доступные сервисы на каждой review ветке
| Сервис | Порт | Назначение |
|--------|------|------------|
| backend | 80 | API |
| backend-admin | 80 | Админ-панель |
| backend-dashboard | 80 | Dashboard |
| backend-pgweb | 8081 | SQL-доступ к БД |
| backend-webhook | 80 | Вебхуки |
| backend-mcp | 80 | MCP (не на всех) |
### PgWeb — SQL-запросы
```
tsh apps login backend-pgweb-chatplace-api-{BRANCH}-review-main-cluster
curl --cert $CERT --key $KEY "$BASE/api/query" --data-urlencode "query=SELECT ..."
```
### Dev DB (прямой доступ)
- Host: 34.175.47.255:5432
- Database: chatplace
- Доступ: READ-ONLY через proxychains
### Ключевые таблицы
- `companies` — проекты, AI-лимиты
- `subscription_logs` — логи подписок (type 1-12)
- `user_plans` — привязка юзер↔план
- `ai_action_pending_payments` — ожидающие AI-платежи
| ID | Title | Priority |
|---|---|---|
| TC-1 | Подключение к Teleport через VPN + OTP | High |
| TC-2 | PgWeb: выполнение SELECT-запроса к review ветке | High |
| TC-3 | Dev DB: подключение через proxychains | High |
| TC-4 | Backend Admin: логин и навигация | Medium |
| TC-5 | Backend Admin: просмотр подписок пользователя | Medium |
| TC-6 | Backend Admin: кнопка «Дата сброса» AI-токенов | High |
| ID | Title | Priority |
|---|---|---|
| TC-7 | Ежемесячное начисление AI-кредитов (type=3) на годовом тарифе | Critical |
| TC-8 | Поле ai_action_next_payment_at заполнено для активных подписок | Critical |
| TC-9 | Ручной сброс даты через админку (Дата сброса) | High |
| TC-10 | Промокод не обнуляет ai_action_next_payment_at | High |