ð 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 āļāļđāđ āđāļāļ·āđāļāļāļ§āļēāļĄāļāđāļēāļĒāđāļāļāļēāļĢāđāļĒāļāļĒāđāļēāļĒāđāļĨāļ°āļāļģāļĨāļāļāļŠāļ āļēāļāđāļ§āļāļĨāđāļāļĄ:
splitdee-backend: āđāļ§āđāļāđāļāļīāļĢāđāļāđāļ§āļāļĢāđāļŦāļĨāļąāļāļāđāļēāļāļāļĢāļ°āļĄāļ§āļĨāļāļĨ FastAPIsplitdee-db: āđāļāļīāļĢāđāļāđāļ§āļāļĢāđāđāļāđāļāļāđāļāļĄāļđāļĨāļŦāļĨāļąāļ PostgreSQL 15splitdee-redis: āđāļāļāļāļ§āļēāļĄāđāļĢāđāļ§āļŠāļđāļ Redis 7 āđāļāđāļāļģāđāļāđāļāđāļāđāļĨāļ°āļāļĢāļ°āļĄāļ§āļĨ WebSocket āđāļāļāļŠāļsplitdee-nginx: āļāđāļēāļāļŦāļāđāļēāļāļāļĒāļāļģāļŦāļāđāļēāļāļĩāđāļāļĢāļāļāđāļāđāļ āļĢāļąāļ SSL āđāļĨāļ°āļŠāđāļāļāđāļāļāļģāļāļ (Proxy Pass) āđāļāđāļāļāļāļāđāļāļāđāļāļāļĢāđāļŦāļĨāļąāļāļāđāļēāļ
2. āļāđāļĒāļāļēāļĒāļāļēāļĢāļĢāļąāļāđāļĄāđāļāļĢāļāļąāļāļāļēāļĢāļēāļāļāļēāļāļāđāļāļĄāļđāļĨāđāļāļĢāļ°āļāļāļāļĢāļīāļ
- āļāļāđāļŦāļĨāđāļ: āļŦāđāļēāļĄāļŠāļąāđāļāļŠāļąāđāļāļĢāļąāļāļŠāļĢāđāļēāļāļāļēāļĢāļēāļāļŦāļĢāļ·āļāļāļąāļāđāļāļ Alembic Migrations āļāļāđāļāļĢāļāļąāļāļāļąāļāļāļĢāļīāļāđāļāļĒāļāļĢāļāđāļāđāļāļāļēāļāļŦāļēāļāļĒāļąāļāđāļĄāđāļāđāļēāļāļāļēāļĢāļāļāļŠāļāļāļāļāļĢāļ°āļāļ Staging
- āļāļĢāļ°āļāļ§āļāļāļēāļĢāđāļĄāđāļāļĢāļāļąāļ:
- āļāļīāļ§āļāļēāļ CI/CD āļāļ°āļāļāļĨāļāļāļĢāļąāļāđāļĄāđāļāļĢāļāļąāļāļāļēāļĢāļēāļāđāļŠāđāļāļđāđāļāļģāļĨāļāļāļāļāļŠāļāļāļāđāļāļ
- āđāļĄāļ·āđāļāļāđāļēāļāđāļāļāļāđ āļŠāļāļĢāļīāļāļāđāļāļķāđāļāđāļāļīāļĢāđāļāđāļ§āļāļĢāđāļāļ°āļŠāļąāđāļāļāļģāļŠāļąāđāļāļāļĒāļąāļāđāļ§āļāļĢāđāļāļąāļāļāļēāļĢāļēāļāļŦāļĨāļąāļāļāđāļēāļāļāļąāļāļāļĩāđ:
docker compose exec backend alembic upgrade head - āļāļąāļāļāļąāļāđāļŦāđāļāļąāļāđāļāļāļāļēāļĢāļēāļāļĒāđāļāļāļŦāļĨāļąāļāđāļāđāļēāļāļąāļāđāļāđāđāļŠāļĄāļ (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)
- Developer Push: Developer commits and pushes changes to
mainbranch. - CI Check: Runs Python/Dart linters, tests, and validates minimum 80% coverage.
- Build & Push: Packs Docker images and pushes to the container registry.
- 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:
- Boot a fresh Linux VPS node.
- Clone the repository and configure production
.envvariables. - Start infrastructure services:
docker compose up -d db redis nginx. - 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 - Apply pending database migrations and boot the backend container:
docker compose up -d backend.