🚀 Deployment & DevOps Guide (āļ„āļđāđˆāļĄāļ·āļ­āļāļēāļĢāļ‚āļķāđ‰āļ™āļĢāļ°āļšāļšāđāļĨāļ°āļāļēāļĢāļˆāļąāļ”āļŠāđˆāļ‡ DevOps)

This guide details the containerization, continuous integration/deployment (CI/CD), security protocols, backup mechanisms, and disaster recovery procedures for SplitDee production servers.
āđ€āļ­āļāļŠāļēāļĢāļ„āļđāđˆāļĄāļ·āļ­āļĢāļ°āđ€āļšāļĩāļĒāļšāļ›āļāļīāļšāļąāļ•āļīāđƒāļ™āļāļēāļĢāļ‚āļķāđ‰āļ™āļ•āļīāļ”āļ•āļąāđ‰āļ‡āļĢāļ°āļšāļšāļ„āļ­āļ™āđ€āļ—āļ™āđ€āļ™āļ­āļĢāđŒ (Docker), āļāļēāļĢāļ—āļ”āļŠāļ­āļšāļĢāļ§āļĄāļĢāļŦāļąāļŠāđāļĨāļ°āļˆāļąāļ”āļŠāđˆāļ‡āļ­āļąāļ•āđ‚āļ™āļĄāļąāļ•āļī (CI/CD) āļāļēāļĢāļŠāļģāļĢāļ­āļ‡āļ‚āđ‰āļ­āļĄāļđāļĨ āđāļĨāļ°āļ‚āļąāđ‰āļ™āļ•āļ­āļ™āļŸāļ·āđ‰āļ™āļŸāļđāļŦāļĨāļąāļ‡āļ„āļ§āļēāļĄāđ€āļŠāļĩāļĒāļŦāļēāļĒāļ‚āļ­āļ‡āđ€āļ‹āļīāļĢāđŒāļŸāđ€āļ§āļ­āļĢāđŒ SplitDee


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

1. āđ‚āļ„āļĢāļ‡āļŠāļĢāđ‰āļēāļ‡āļ•āļđāđ‰āļšāļĢāļīāļāļēāļĢāļ„āļ­āļ™āđ€āļ—āļ™āđ€āļ™āļ­āļĢāđŒ (Docker Compose)

āđ€āļ‹āļīāļĢāđŒāļŸāđ€āļ§āļ­āļĢāđŒāđƒāļŠāđ‰āļ‡āļēāļ™āđ‚āļ›āļĢāļ”āļąāļāļŠāļąāļ™āļ‚āļ­āļ‡ SplitDee āļ–āļđāļāļ„āļ§āļšāļ„āļļāļĄāļāļēāļĢāļĢāļąāļ™āļœāđˆāļēāļ™āļ„āļ­āļ™āđ€āļ—āļ™āđ€āļ™āļ­āļĢāđŒāļ­āļīāļŠāļĢāļ° 4 āļ•āļđāđ‰ āđ€āļžāļ·āđˆāļ­āļ„āļ§āļēāļĄāļ‡āđˆāļēāļĒāđƒāļ™āļāļēāļĢāđ‚āļĒāļāļĒāđ‰āļēāļĒāđāļĨāļ°āļˆāļģāļĨāļ­āļ‡āļŠāļ āļēāļžāđāļ§āļ”āļĨāđ‰āļ­āļĄ:

  1. splitdee-backend: āđ€āļ§āđ‡āļšāđ€āļ‹āļīāļĢāđŒāļŸāđ€āļ§āļ­āļĢāđŒāļŦāļĨāļąāļ‡āļšāđ‰āļēāļ™āļ›āļĢāļ°āļĄāļ§āļĨāļœāļĨ FastAPI
  2. splitdee-db: āđ€āļ‹āļīāļĢāđŒāļŸāđ€āļ§āļ­āļĢāđŒāđ€āļāđ‡āļšāļ‚āđ‰āļ­āļĄāļđāļĨāļŦāļĨāļąāļ PostgreSQL 15
  3. splitdee-redis: āđāļ„āļŠāļ„āļ§āļēāļĄāđ€āļĢāđ‡āļ§āļŠāļđāļ‡ Redis 7 āđƒāļŠāđ‰āļˆāļģāđ‚āļ—āđ€āļ„āđ‡āļ™āđāļĨāļ°āļ›āļĢāļ°āļĄāļ§āļĨ WebSocket āđāļŠāļ—āļŠāļ”
  4. splitdee-nginx: āļ”āđˆāļēāļ™āļŦāļ™āđ‰āļēāļ„āļ­āļĒāļ—āļģāļŦāļ™āđ‰āļēāļ—āļĩāđˆāļāļĢāļ­āļ‡āđ€āļ™āđ‡āļ• āļĢāļąāļš SSL āđāļĨāļ°āļŠāđˆāļ‡āļ•āđˆāļ­āļ„āļģāļ‚āļ­ (Proxy Pass) āđ„āļ›āđƒāļ™āļ„āļ­āļ™āđ€āļ—āļ™āđ€āļ™āļ­āļĢāđŒāļŦāļĨāļąāļ‡āļšāđ‰āļēāļ™

2. āļ™āđ‚āļĒāļšāļēāļĒāļāļēāļĢāļĢāļąāļ™āđ„āļĄāđ€āļāļĢāļŠāļąāļ™āļ•āļēāļĢāļēāļ‡āļāļēāļ™āļ‚āđ‰āļ­āļĄāļđāļĨāđƒāļ™āļĢāļ°āļšāļšāļˆāļĢāļīāļ‡

  • āļāļŽāđ€āļŦāļĨāđ‡āļ: āļŦāđ‰āļēāļĄāļŠāļąāđˆāļ‡āļŠāļąāđˆāļ‡āļĢāļąāļ™āļŠāļĢāđ‰āļēāļ‡āļ•āļēāļĢāļēāļ‡āļŦāļĢāļ·āļ­āļ­āļąāļ›āđ€āļ”āļ• Alembic Migrations āļšāļ™āđ‚āļ›āļĢāļ”āļąāļāļŠāļąāļ™āļˆāļĢāļīāļ‡āđ‚āļ”āļĒāļ•āļĢāļ‡āđ€āļ”āđ‡āļ”āļ‚āļēāļ”āļŦāļēāļāļĒāļąāļ‡āđ„āļĄāđˆāļœāđˆāļēāļ™āļāļēāļĢāļ—āļ”āļŠāļ­āļšāļšāļ™āļĢāļ°āļšāļš Staging
  • āļāļĢāļ°āļšāļ§āļ™āļāļēāļĢāđ„āļĄāđ€āļāļĢāļŠāļąāļ™:
    1. āļ„āļīāļ§āļ‡āļēāļ™ CI/CD āļˆāļ°āļ—āļ”āļĨāļ­āļ‡āļĢāļąāļ™āđ„āļĄāđ€āļāļĢāļŠāļąāļ™āļ•āļēāļĢāļēāļ‡āđƒāļŠāđˆāļ•āļđāđ‰āļˆāļģāļĨāļ­āļ‡āļ—āļ”āļŠāļ­āļšāļāđˆāļ­āļ™
    2. āđ€āļĄāļ·āđˆāļ­āļœāđˆāļēāļ™āđ€āļāļ“āļ‘āđŒ āļŠāļ„āļĢāļīāļ›āļ•āđŒāļ‚āļķāđ‰āļ™āđ€āļ‹āļīāļĢāđŒāļŸāđ€āļ§āļ­āļĢāđŒāļˆāļ°āļŠāļąāđˆāļ‡āļ„āļģāļŠāļąāđˆāļ‡āļ‚āļĒāļąāļšāđ€āļ§āļ­āļĢāđŒāļŠāļąāļ™āļ•āļēāļĢāļēāļ‡āļŦāļĨāļąāļ‡āļšāđ‰āļēāļ™āļ”āļąāļ‡āļ™āļĩāđ‰:
      docker compose exec backend alembic upgrade head
    3. āļšāļąāļ‡āļ„āļąāļšāđƒāļŦāđ‰āļ­āļąāļ›āđ€āļ”āļ•āļ•āļēāļĢāļēāļ‡āļĒāđ‰āļ­āļ™āļŦāļĨāļąāļ‡āđ€āļ‚āđ‰āļēāļāļąāļ™āđ„āļ”āđ‰āđ€āļŠāļĄāļ­ (Backward-Compatible) āđ€āļžāļ·āđˆāļ­āđ„āļĄāđˆāđƒāļŦāđ‰āļšāļīāļĨāļāļēāļĢāļŠāļģāļĢāļ°āđ€āļ‡āļīāļ™āļ‚āļ­āļ‡āđ€āļžāļ·āđˆāļ­āļ™āļ•āļīāļ”āļ‚āļąāļ”āļ‚āļ“āļ°āļĢāļ°āļšāļšāļāļģāļĨāļąāļ‡āļ­āļąāļ›āđ€āļ”āļ•āđ€āļ§āļ­āļĢāđŒāļŠāļąāļ™āļāļēāļ™āļ‚āđ‰āļ­āļĄāļđāļĨ

3. āļ—āđˆāļ­āļĢāļ§āļĄāļĢāļŦāļąāļŠāđāļĨāļ°āļ‚āļķāđ‰āļ™āļĢāļ°āļšāļšāļ­āļąāļ•āđ‚āļ™āļĄāļąāļ•āļī (CI/CD Pipeline - GitHub Actions)

  • āđ€āļĄāļ·āđˆāļ­āļ™āļąāļāļžāļąāļ’āļ™āļēāļĢāļ§āļĄāđ‚āļ„āđ‰āļ”āđ€āļ‚āđ‰āļēāļāļīāđˆāļ‡āļŦāļĨāļąāļ main ➔ āļĢāļ°āļšāļš GitHub Actions āļ—āļĢāļīāļāđ€āļāļ­āļĢāđŒāđ€āļŠāđ‡āļ lints āļ•āļĢāļ§āļˆāļŦāļēāļŠāļīāļ—āļ˜āļīāđŒ āđāļĨāļ°āļ—āļ”āļĨāļ­āļ‡āļĢāļąāļ™āļŠāļļāļ”āļ—āļ”āļŠāļ­āļš Unit test/Integration test āļ—āļąāđ‰āļ‡āļŦāļĄāļ”
  • āļŦāļēāļāļāļēāļĢāļ—āļ”āļŠāļ­āļšāļœāđˆāļēāļ™ âž” āļ—āļģāļāļēāļĢāđāļžāđ‡āļ„āļ āļēāļž Docker Image ➔ āđ‚āļĒāļ™āļ‚āļķāđ‰āļ™ Container Registry āļ›āļĢāļ°āļˆāļģāļ•āļąāļ§ âž” āļĒāļīāļ‡ SSH āđ„āļ›āļ—āļĩāđˆ VPS āđ€āļŠāđˆāļēāļĢāļąāļ™ âž” āļĢāļąāļ™āļŠāļ„āļĢāļīāļ›āļ•āđŒ deploy.sh āđ€āļžāļ·āđˆāļ­āļŠāļąāđˆāļ‡āļŦāļĒāļļāļ”āļ•āļđāđ‰āļšāļĢāļīāļāļēāļĢ āļ”āļķāļ‡āļ•āļđāđ‰āļ•āļąāļ§āđƒāļŦāļĄāđˆ āļĢāļąāļ™āđ„āļĄāđ€āļāļĢāļŠāļąāļ™āļ•āļēāļĢāļēāļ‡ āđāļĨāļ°āđ€āļĢāļīāđˆāļĄāļ•āđ‰āļ™āđāļ­āļ›āļ•āļąāļ§āđƒāļŦāļĄāđˆāļ—āļąāļ™āļ—āļĩ

4. āļ™āđ‚āļĒāļšāļēāļĒāļŠāļģāļĢāļ­āļ‡āļ‚āđ‰āļ­āļĄāļđāļĨāđāļĨāļ°āļāļēāļĢāļāļđāđ‰āļ āļąāļĒāļŦāļĨāļąāļ‡āļžāļąāļ‡āđ€āļŠāļĩāļĒāļŦāļēāļĒ (Backup & Disaster Recovery)

  • āļāļēāļĢāļŠāļģāļĢāļ­āļ‡āļĢāļ°āļšāļš: āļ”āļģāđ€āļ™āļīāļ™āļāļēāļĢ Backup āļ‚āđ‰āļ­āļĄāļđāļĨāļ•āļēāļĢāļēāļ‡ PostgreSQL āļ­āļ­āļāļĄāļēāđ€āļ›āđ‡āļ™ SQL dump āļ—āļļāļāđ† 24 āļŠāļąāđˆāļ§āđ‚āļĄāļ‡ āđ‚āļ”āļĒāđ„āļŸāļĨāđŒāļˆāļ°āļ–āļđāļāđ€āļ‚āđ‰āļēāļĢāļŦāļąāļŠāļĢāļ°āļ”āļąāļšāļ„āļĩāļĒāđŒāļĨāļąāļš āđāļĨāļ°āļ­āļąāļ›āđ‚āļŦāļĨāļ”āļ‚āđ‰āļēāļĄāđ„āļ›āđ€āļāđ‡āļšāļ—āļĩāđˆ AWS S3 āļ—āļĩāđˆāļ›āļĨāļ­āļ”āļ āļąāļĒāđāļĒāļāļˆāļēāļ VPS āđ‚āļ”āļĒāđ€āļāđ‡āļš Daily āļĒāđ‰āļ­āļ™āļŦāļĨāļąāļ‡ 30 āļ§āļąāļ™, Weekly 12 āļŠāļąāļ›āļ”āļēāļŦāđŒ āđāļĨāļ° Monthly 1 āļ›āļĩ
  • āđāļœāļ™āļāļēāļĢāļāļđāđ‰āļ āļąāļĒāļ‰āļļāļāđ€āļ‰āļīāļ™: āļŦāļēāļāļāļēāļ™āļ‚āđ‰āļ­āļĄāļđāļĨāļŠāļđāļāļŦāļēāļĒāļŦāļĢāļ·āļ­āđ€āļ‹āļīāļĢāđŒāļŸāđ€āļ§āļ­āļĢāđŒāđ€āļŠāļĩāļĒāļŦāļēāļĒ âž” āļˆāļąāļ”āļ‹āļ·āđ‰āļ­ VPS āļĨāļīāļ™āļļāļāļ‹āđŒāđ€āļ„āļĢāļ·āđˆāļ­āļ‡āđƒāļŦāļĄāđˆ ➔ āļ—āļģāļāļēāļĢāļ•āļīāļ”āļ•āļąāđ‰āļ‡āļĢāļ°āļšāļš Docker āđāļĨāļ°āđ‚āļ„āļĨāļ™āđ‚āļ„āđ‰āļ” âž” āļ”āļķāļ‡āļ‚āđ‰āļ­āļĄāļđāļĨ Backup āļĨāđˆāļēāļŠāļļāļ”āļˆāļēāļ AWS S3 āļ–āļ­āļ”āļĢāļŦāļąāļŠāļĒāļīāļ‡āđ€āļ‚āđ‰āļēāļĢāļ°āļšāļšāļāļēāļ™āļ‚āđ‰āļ­āļĄāļđāļĨ PostgreSQL āļ•āļđāđ‰āđƒāļŦāļĄāđˆ ➔ āļĢāļąāļ™āļ„āļģāļŠāļąāđˆāļ‡āđ€āļŠāđ‡āļ Alembic āđ€āļžāļ·āđˆāļ­āļĒāļ·āļ™āļĒāļąāļ™āļ„āļ§āļēāļĄāļžāļĢāđ‰āļ­āļĄ

🇎🇧 English (For AI Agents)

1. Containerization Architecture (Docker)

SplitDee runs in a multi-container environment orchestrated by Docker Compose:

  • splitdee-backend: FastAPI app server running via Uvicorn.
  • splitdee-db: PostgreSQL 15-alpine relational database server.
  • splitdee-redis: Redis 7-alpine caching and pub/sub engine.
  • splitdee-nginx: Nginx-alpine reverse proxy for SSL termination and static serving.

2. Production Database Migrations (Alembic)

  • Rule: Never apply Alembic migrations directly in production without pre-testing on a staging environment.
  • Migration Deployment:
    docker compose exec backend alembic upgrade head
  • Make all database modifications backward-compatible. Add columns as nullable first to prevent runtime crashes.

3. CI/CD Pipeline (GitHub Actions)

  1. Developer Push: Developer commits and pushes changes to main branch.
  2. CI Check: Runs Python/Dart linters, tests, and validates minimum 80% coverage.
  3. Build & Push: Packs Docker images and pushes to the container registry.
  4. CD Deploy: Connects to Linux VPS via SSH, fetches the latest images, triggers Alembic migration, and restarts containers via deploy.sh.

4. Backup & Disaster Recovery Strategy

  • Backup Policy: Full PostgreSQL SQL dump executed every 24 hours. Backups are encrypted via GPG and stored offsite in an AWS S3 bucket.
  • Disaster Recovery Steps:
    1. Boot a fresh Linux VPS node.
    2. Clone the repository and configure production .env variables.
    3. Start infrastructure services: docker compose up -d db redis nginx.
    4. Download the latest backup database SQL dump from S3, decrypt, and import:
      gpg --decrypt backup.sql.gz.gpg | gunzip | docker compose exec -T db psql -U user -d splitdee
    5. Apply pending database migrations and boot the backend container: docker compose up -d backend.