Перейти до вмісту

Abitly API / backend

ПолеЗначення
ПродуктAbitly.org
ТипBackend / API
Статус🟢 prod
Власник@Vladbandurin

Окремий від Strapi backend: бізнес-логіка, авторизація (Google OAuth + JWT + Telegram), платежі Monobank, агрегація даних, BullMQ-черги, інтеграція з зовнішнім Tutor-сервісом, експорт MCP API (MCP_API_KEY) для внутрішніх агентів.

Репозиторій та рантайм

Section titled “Репозиторій та рантайм”
Репоabitly-org/abitly-api-v2 (main)
СтекNestJS · TypeORM · Postgres (pg) · BullMQ · @nestjs/jwt + passport · @nestjs/throttler · @nestjs/swagger · @willsoto/nestjs-prometheus · @nestjs-modules/mailer · @nestjs/schedule · @modelcontextprotocol/sdk
Хостинг — prodAWS ECS Fargate · кластер abitly-prod-backend · 1 task · контейнер backend:6789 · ALB abitly-prod-shared
Хостинг — devAWS EC2 abitly-dev-backend (t4g.small). Redeploy — Lambda abitly-dev-backend-restart.
Container imageECR abitly/backend:<commit-sha> (prod), abitly-dev/backend (dev)
Деплой prodCodePipeline abitly-prod-backend (GitHub → CodeStarSourceConnection → CodeBuild → ECR → ECS). Деталі → deploy-pipeline.
Конфіг-redeployLambda abitly-prod-ssm-redeploy слухає зміни SSM /abitly/prod/* і форсить ECS rolling update.
API URLhttps://api.abitly.org
Внутрішній порт6789
Postgres схемаabitly у DB abitly_prod_db (SSM /abitly/prod/backend/DB_SCHEMA)
Tutor serviceзовнішній API https://tutor-api.abitly.orgокремий продукт цієї ж команди (не документується в цьому хабі)

SSM /abitly/{env}/backend/ (~60 ключів). Сервіс не використовує ECS secrets: block — підтягує SSM сам через @nestjs/config. Список — у environments.

Категорії (тільки назви):

  • БД: DATABASE_URL, DB_HOST, DB_PORT, DB_USERNAME, DB_PASSWORD, DB_NAME, DB_SCHEMA, DB_SSL
  • Cache/queue (Valkey): REDIS_URL, REDIS_HOST, REDIS_PORT, CACHE_TTL
  • JWT: ACCESS_JWT_SECRET, ACCESS_JWT_TTL, REFRESH_JWT_SECRET, REFRESH_JWT_TTL, JWT_TEMP_SECRET, JWT_TEMP_TTL
  • Google OAuth: GOOGLE_CLIENT_ID, GOOGLE_CLIENT_SECRET, GOOGLE_REDIRECT_URI
  • Email (SMTP): SMTP_HOST, SMTP_PORT, SMTP_USER, SMTP_PASSWORD, SMTP_FROM, SMTP_SECURE
  • Strapi: STRAPI_API_TOKEN, STRAPI_BASE_URL, STRAPI_WEBHOOK_SECRET
  • Telegram: TELEGRAM_BOT_TOKEN, TELEGRAM_LOGGER_BOT_TOKEN, TELEGRAM_LOG_CHAT_ID
  • Платежі: MONOBANK_TOKEN, SUBSCRIPTION_WEBHOOK_URL, PREMIUM_WEBHOOK_URL, TOKEN_PURCHASE_WEBHOOK_URL, SUBSCRIPTION_REDIRECT_URL, PREMIUM_REDIRECT_URL, TOKEN_PURCHASE_REDIRECT_URL
  • Frontend-links: FRONT_URL, FRONT_AUTH_REDIRECT_URL, ACCOUNT_LINK_URL
  • Search: SEARCH_ENGINE, TYPESENSE_HOST, TYPESENSE_PORT, TYPESENSE_PROTOCOL, TYPESENSE_API_KEY
  • Tutor: TUTOR_BASE_URL, TUTOR_SERVICE_SECRET, TUTOR_REQUEST_TIMEOUT_MS
  • Rate limit (prod): RATE_LIMIT_DEFAULT_TTL, RATE_LIMIT_DEFAULT_LIMIT, RATE_LIMIT_INCREASED_LIMIT, RATE_LIMIT_OFFERS_LIMIT
  • Інше: ENCRYPTION_KEY, ADMIN_API_KEY, MCP_API_KEY, SWAGGER_ACCESS_PASSWORD, STAGE, NODE_ENV, PORT, DOMAIN, API_PUBLIC_URL, ALLOWED_METHODS, PROMETHEUS_PASSWORD, E2E_TEST_AUTH_ENABLED, ERROR_LOGGER_TYPE, SEND_OFFERS_UPDATE_NOTIFICATION_TOKEN
Terminal window
npm run start:dev # NestJS hot-reload
npm run build && npm run start:prod
npm run lint
npm run test # unit
npm run test:e2e
npm run migration:generate # TypeORM
npm run migration:run
npm run migration:revert
npm run schema:log # SQL schema diff
npm run analyze:production # bundle size
  • Code change: push → manual/external pipeline trigger → CodePipeline → ECR → ECS service update. Відкат — попередня task-definition revision.
  • Config change: aws ssm put-parameter на /abitly/prod/backend/* → EventBridge → Lambda abitly-prod-ssm-redeploy → ECS rolling restart. Відкат конфігу — попередня версія параметра.

Деталі → deploy-pipeline, deploy-rollback.

  • ECS логи → CloudWatch /ecs/abitly-prod-backend (TODO:).
  • Метрики Prometheus → Grafana на DO Droplet (observability).
  • Помилки → Telegram-logger (без Sentry).