HyperSaaS
BackendDeployment

Overview

Deployment architecture and environment configuration.

HyperSaaS uses Docker Compose for both local development and production deployment, with Traefik as the reverse proxy, Celery for async tasks, and S3 for file storage.

Service Architecture

Local Development

ServiceImagePortPurpose
DjangoCustom (Python 3.12)8000API server (runserver_plus)
PostgreSQLpgvector/pgvector:pg175432Database with vector search
Redisredis:66379Cache + Celery broker
Celery WorkerSame as DjangoAsync task processing
Celery BeatSame as DjangoScheduled tasks
FlowerSame as Django5555Celery monitoring
Mailpitaxllent/mailpit8025Email testing UI

Production

ServiceImagePortPurpose
DjangoCustom (Python 3.12)5000API server (Gunicorn)
PostgreSQLpgvector/pgvector:pg175432Database with vector search
Redisredis:66379Cache + Celery broker
Traefiktraefik:3.3.580, 443Reverse proxy + SSL
Celery WorkerSame as DjangoAsync task processing
Celery BeatSame as DjangoScheduled tasks
FlowerSame as Django5555Celery monitoring
AWS CLIamazon/aws-cli:2.25.0S3 backup operations

Settings Architecture

config/settings/
    ├── base.py        # Shared settings (apps, middleware, DRF, JWT, Celery)
    ├── local.py       # DEBUG=True, Mailpit, LocMemCache, eager Celery
    ├── production.py  # Gunicorn, S3 storage, Sentry, secure cookies
    └── test.py        # Fast password hashing, in-memory email

Select the settings module via DJANGO_SETTINGS_MODULE:

# Local
DJANGO_SETTINGS_MODULE=config.settings.local

# Production
DJANGO_SETTINGS_MODULE=config.settings.production

# Tests
DJANGO_SETTINGS_MODULE=config.settings.test

Key Dependencies

CategoryPackageVersion
FrameworkDjango5.1
APIdjangorestframework3.16
Authdjango-allauth, djoser, SimpleJWTLatest
Databasepsycopg[c], pgvector3.2, 0.3
Taskscelery, django-celery-beat5.5, 2.7
AI/LLMlangchain, langgraph, pydantic-aiLatest
Paymentsstripe12.0
Storagedjango-storages[s3]1.14
Monitoringsentry-sdk2.25
Servergunicorn23.0

Python Version

Python 3.12 is required. Python 3.13 is not supported due to Docling/PyTorch compatibility constraints.

On this page