🏛ïļ DEPLOYMENT_ARCHITECTURE.md - Deployment Architecture (āļŠāļ–āļēāļ›āļąāļ•āļĒāļāļĢāļĢāļĄāļāļēāļĢāļ‚āļķāđ‰āļ™āļ•āļīāļ”āļ•āļąāđ‰āļ‡āļĢāļ°āļšāļš)

This document describes the physical and container deployment topology of the SplitDee platform.
āđ€āļ­āļāļŠāļēāļĢāļ‰āļšāļąāļšāļ™āļĩāđ‰āļŠāļĢāļļāļ›āļ āļēāļžāļĢāļ§āļĄāđāļĨāļ°āļœāļąāļ‡āđ‚āļ„āļĢāļ‡āļŠāļĢāđ‰āļēāļ‡āļāļēāļĢāļˆāļąāļ”āļŠāđˆāļ‡āļĢāļ°āļšāļš (Deployment) āđƒāļ™āļāļēāļĢāļĢāļąāļ™āđāļ­āļ›āļžāļĨāļīāđ€āļ„āļŠāļąāļ™āļˆāļĢāļīāļ‡āļšāļ™ Docker āļ„āļ­āļ™āđ€āļ—āļ™āđ€āļ™āļ­āļĢāđŒ


ðŸ‡đ🇭 āļ āļēāļĐāļēāđ„āļ—āļĒ (āļŠāļģāļŦāļĢāļąāļšāļœāļđāđ‰āđƒāļŠāđ‰āļ‡āļēāļ™)

📊 āļŠāļĢāļļāļ›āđ‚āļ„āļĢāļ‡āļŠāļĢāđ‰āļēāļ‡āļāļēāļĢāļˆāļąāļ”āļ§āļēāļ‡āļĢāļ°āļšāļš (Deployment Topology)

  • āļ”āđˆāļēāļ™āļŦāļ™āđ‰āļēāđ€āļ§āđ‡āļšāđ€āļ‹āļīāļĢāđŒāļŸāđ€āļ§āļ­āļĢāđŒ (Nginx Ingress Proxy):
    • āļ•āļđāđ‰āļšāļĢāļīāļāļēāļĢ: splitdee-nginx
    • āļžāļ­āļĢāđŒāļ•āđ€āļ›āļīāļ”āļĢāļąāļš: āļžāļ­āļĢāđŒāļ• 80 (HTTP āļ—āļģāļāļēāļĢāļŠāļĨāļąāļšāđ€āļ”āđ‰āļ‡āđ€āļŠāđ‰āļ™āļ—āļēāļ‡āđ„āļ› 443 āļ­āļąāļ•āđ‚āļ™āļĄāļąāļ•āļī) āđāļĨāļ°āļžāļ­āļĢāđŒāļ• 443 (HTTPS)
    • āļāļēāļĢāđ€āļ‚āđ‰āļēāļĢāļŦāļąāļŠ: āļˆāļąāļ”āļ•āļąāđ‰āļ‡āđƒāļšāļĢāļąāļšāļĢāļ­āļ‡āļ„āļ§āļēāļĄāļ›āļĨāļ­āļ”āļ āļąāļĒāđāļĨāļ°āļ„āļĩāļĒāđŒāļĨāļąāļš SSL āļœāđˆāļēāļ™ Certbot Let’s Encrypt āđāļĨāļ°āļ„āļąāļ”āļŠāđˆāļ‡āļ•āđˆāļ­āđ„āļ›āļŦāļēāđāļ­āļ›āļŦāļĨāļąāļ‡āļšāđ‰āļēāļ™āļžāļ­āļĢāđŒāļ• 8000
  • āđāļ­āļ›āļžāļĨāļīāđ€āļ„āļŠāļąāļ™āđ€āļ§āļ­āļĢāđŒāđ€āļ§āļ­āļĢāđŒāļŦāļĨāļąāļ‡āļšāđ‰āļēāļ™ (FastAPI backend server):
    • āļ•āļđāđ‰āļšāļĢāļīāļāļēāļĢ: splitdee-backend
    • āļŠāļ āļēāļžāđāļ§āļ”āļĨāđ‰āļ­āļĄ: āļĢāļąāļ™āļšāļ™āļ āļēāļžāļˆāļģāļĨāļ­āļ‡āđ„āļžāļ—āļ­āļ™ 3.12 (Python 3.12) āļ„āļđāđˆāļāļąāļš Uvicorn ASGI server āļŦāļĨāļēāļĒāđ€āļ§āļīāļĢāđŒāļāđ€āļāļ­āļĢāđŒāđāļĒāļāđ€āļ˜āļĢāļ”
    • āļ„āļ§āļēāļĄāļ›āļĨāļ­āļ”āļ āļąāļĒ: āļ›āļīāļ”āļāļąāđ‰āļ™āļžāļ­āļĢāđŒāļ•āļ āļēāļĒāļ™āļ­āļ āļĢāļąāļšāļŠāļēāļĒāļ•āđˆāļ­āļ•āļĢāļ‡āļˆāļēāļāļ•āļđāđ‰ Nginx Proxy āļ”āđ‰āļēāļ™āđƒāļ™āđ€āļ™āđ‡āļ•āđ€āļ§āļīāļĢāđŒāļāļ āļēāļĒāđƒāļ™āđ€āļ—āđˆāļēāļ™āļąāđ‰āļ™
  • āļŦāļĄāļ§āļ”āļāļēāļ™āļ‚āđ‰āļ­āļĄāļđāļĨāđāļĨāļ°āđāļ„āļŠāļ”āđˆāļ§āļ™ (Storage Layer):
    • āļ•āļđāđ‰āļšāļĢāļīāļāļēāļĢ: splitdee-db (PostgreSQL) āđāļĨāļ° splitdee-redis (Redis Cache)
    • āļ„āļ§āļēāļĄāļ›āļĨāļ­āļ”āļ āļąāļĒ: āļ›āļīāļ”āļŠāđˆāļ­āļ‡āđ€āļŠāļ·āđˆāļ­āļĄāļˆāļēāļāļ­āļīāļ™āđ€āļ•āļ­āļĢāđŒāđ€āļ™āđ‡āļ•āļ āļēāļĒāļ™āļ­āļ 100% āđ€āļŠāļ·āđˆāļ­āļĄāļ•āđˆāļ­āļ•āļĢāļ‡āđ„āļ”āđ‰āđ€āļ‰āļžāļēāļ°āđāļ­āļ›āļŦāļĨāļąāļ‡āļšāđ‰āļēāļ™āļ āļēāļĒāđƒāļ™ Docker network āđ€āļ—āđˆāļēāļ™āļąāđ‰āļ™
    • āļāļēāļĢāļĢāļąāļāļĐāļēāļ‚āđ‰āļ­āļĄāļđāļĨ: āđƒāļŠāđ‰āļāļĨāđ„āļ mounts āļ­āļ­āļāđāļ­āļĨāļŸāđˆāļēāđ‚āļ§āļĨāļĨāļļāđˆāļĄāļŦāļĨāļąāļāđ‚āļŪāļŠāļ•āđŒāđ‚āļŪāļĄāđ€āļ„āļĢāļ·āđˆāļ­āļ‡ (pgdata āđāļĨāļ° media) āļ›āđ‰āļ­āļ‡āļāļąāļ™āļ‚āđ‰āļ­āļĄāļđāļĨāđāļĨāļ°āļŦāļĨāļąāļāļāļēāļ™āļĢāļđāļ›āļ āļēāļžāļŠāļĨāļīāļ›āđƒāļšāđ€āļŠāļĢāđ‡āļˆāļŠāļđāļāļŦāļēāļĒ

🇎🇧 English (For AI Agents)

🗚ïļ Deployment Diagram

graph TD
    UserClient[Mobile App Client]
    Internet((Internet))

    subgraph LinuxVPS [Production Linux VPS Server]
        subgraph DockerNetwork [Isolated Docker Bridge Network]
            Nginx[Nginx Reverse Proxy Container]
            FastAPI[FastAPI App Container]
            Postgres[PostgreSQL DB Container]
            Redis[Redis Cache Container]
        end

        subgraph LocalDisk [Local Host Disk Storage]
            PGVolume[(pgdata volume)]
            MediaVolume[(media volume)]
        end
    end

    subgraph ExternalCloud [Third-Party Cloud Services]
        S3Bucket[AWS S3 Secure Storage]
        BankAPI[Bank Slip Verification API]
        FCMService[Firebase Cloud Messaging]
    end

    UserClient -- HTTPS (443) / WSS --> Internet
    Internet --> Nginx
    Nginx -- Proxy Pass (8000) --> FastAPI
    FastAPI --> Postgres
    FastAPI --> Redis
    
    Postgres -- Mounts --> PGVolume
    FastAPI -- Mounts --> MediaVolume
    FastAPI -- Secure Upload --> S3Bucket
    FastAPI -- HTTPS Web Request --> BankAPI
    FastAPI -- Admin SDK push --> FCMService

📝 Topology Details

  • 1. Ingress Proxy (Nginx)
    • Container Name: splitdee-nginx
    • Ports: Exposes port 80 (redirects to 443) and port 443 (SSL).
    • SSL: Terminated via Certbot Let’s Encrypt. Routes /api/v1 calls to FastAPI backend container port 8000.
  • 2. Application Server (FastAPI)
    • Container Name: splitdee-backend
    • Runtime: Python 3.12 multi-worker process running under Uvicorn ASGI server.
    • Security: Isolated behind the Nginx reverse proxy. Exposes no public ports.
  • 3. Storage Layer (PostgreSQL & Redis)
    • Container Names: splitdee-db, splitdee-redis
    • Security: Private inside the Docker network. Strictly inaccessible from the public internet.
    • Persistence: Mounted host directory volumes pgdata for Postgres and media for static slip uploads.