Find a file
2026-02-28 15:38:28 +03:00
.idea first commit 2026-02-22 10:57:49 +03:00
alembic add deploy 2026-02-28 11:45:08 +03:00
app add deploy 2026-02-28 11:45:08 +03:00
context add cert 2026-02-28 15:29:01 +03:00
deploy add cert 2 2026-02-28 15:36:33 +03:00
docs first commit 2026-02-22 10:57:49 +03:00
e2e fix client chat v2 2026-02-27 21:10:01 +03:00
frontend add deploy 2026-02-28 11:45:08 +03:00
scripts/ops add deploy 2026-02-28 11:45:08 +03:00
tests add deploy 2026-02-28 11:45:08 +03:00
tmp Third commit 2026-02-23 17:54:19 +03:00
.gitignore Security commit 2026-02-23 18:39:36 +03:00
alembic.ini first commit 2026-02-22 10:57:49 +03:00
docker-compose.prod.cert.yml add cert 2 2026-02-28 15:36:33 +03:00
docker-compose.prod.nginx.yml add cert 2 2026-02-28 15:36:33 +03:00
docker-compose.prod.yml add deploy 2026-02-28 11:45:08 +03:00
docker-compose.yml add deploy 2026-02-28 11:45:08 +03:00
Dockerfile first commit 2026-02-22 10:57:49 +03:00
Makefile add cert 2 2026-02-28 15:36:33 +03:00
README.md add cert 2026-02-28 15:29:01 +03:00
requirements.txt Task P054-P057 2026-02-27 18:46:07 +03:00

Legal Case Tracker (FastAPI)

Backend skeleton: public requests + OTP + public JWT cookie + admin (admin/lawyer) + files (self-hosted S3) + SLA/auto-assign (Celery) + quotes + dedicated chat microservice.

Run (Docker)

cp .env.example .env
docker compose up --build

Landing (frontend): http://localhost:8081 Admin UI: http://localhost:8081/admin API (backend): http://localhost:8002 Swagger: http://localhost:8002/docs Chat service health (via nginx): http://localhost:8081/chat-health

Production (ruakb.ru, 80/443, TLS via Nginx + Certbot)

Production stack uses dedicated edge nginx (docker-compose.prod.nginx.yml).

Prerequisites:

  • DNS A record: ruakb.ru -> 45.150.36.116
  • Optional DNS A record: www.ruakb.ru -> 45.150.36.116
  • Open server ports: 80/tcp, 443/tcp

Initial certificate issue (bootstrap with nginx on port 80 only):

make prod-cert-init LETSENCRYPT_EMAIL=you@example.com DOMAIN=ruakb.ru WWW_DOMAIN=www.ruakb.ru

Regular production start/update:

make prod-up

Certificate renew:

make prod-cert-renew

Checks:

curl -I https://ruakb.ru
curl -fsS https://ruakb.ru/health
curl -fsS https://ruakb.ru/chat-health

Migrations

docker compose exec backend alembic upgrade head

Seed Quotes (Upsert)

make seed-quotes

Loads 50 justice-themed quotes into quotes with idempotent upsert by (author, text).

OTP SMS provider (SMS Aero)

OTP sending is implemented through a dedicated SMS service layer (app/services/sms_service.py).

Configure provider in .env:

SMS_PROVIDER=smsaero
SMSAERO_EMAIL=your_email@example.com
SMSAERO_API_KEY=your_api_key
OTP_SMS_TEMPLATE=Your verification code: {code}
OTP_DEV_MODE=false

For local/dev mock mode:

SMS_PROVIDER=dummy

In this mode OTP code is printed to backend logs.

You can also force mock mode with real provider settings:

OTP_DEV_MODE=true

When enabled, real SMS sending is disabled and OTP code is printed to backend logs.

Admin health-check endpoint (no SMS send): GET /api/admin/system/sms-provider-health

Secure Chat (encrypted at rest)

Chat logic is isolated in app/services/chat_secure_service.py.

  • Message bodies are encrypted before storing in DB (messages.body) and transparently decrypted on read.
  • Encryption key priority:
    1. CHAT_ENCRYPTION_SECRET
    2. DATA_ENCRYPTION_SECRET
    3. JWT secrets fallback (not recommended for production)

Recommended production config:

CHAT_ENCRYPTION_SECRET=<long-random-secret>
DATA_ENCRYPTION_SECRET=<long-random-secret>

Chat API runs in a dedicated container (chat-service) with separate FastAPI entrypoint: app/chat_main.py

Nginx routes only chat API prefixes to the chat container:

  • /api/public/chat/*
  • /api/admin/chat/*

Container health and alerting

Docker Compose is configured with:

  • restart: unless-stopped for core services
  • healthcheck for db, redis, backend, chat-service, frontend
  • startup ordering via depends_on: condition: service_healthy

Quick checks:

docker compose up -d
docker compose ps
curl -fsS http://localhost:8081/health
curl -fsS http://localhost:8081/chat-health

Alert-ready smoke script (for cron/CI):

./scripts/ops/check_chat_health.sh

Exit code 0 means healthy, non-zero means alert condition.