# Стратегия деплоя --- ## Decision Tree ```mermaid graph TD A[Как деплоить?] --> B{Один сервер?} B -->|Да| C[Docker-compose] B -->|Нет| D{Нужна оркестрация?} D -->|Да| E[Kubernetes] D -->|Нет| F[Docker-compose + несколько серверов] C --> G{VPS или облако?} G -->|VPS| H[Ubuntu + systemd] G -->|Облако| I[Docker + cloud provider] ``` --- ## Варианты ### Docker-compose (рекомендован для старта) ```yaml services: app: build: . ports: ["8020:8020"] env_file: .env db: image: postgres:14 volumes: ["pgdata:/var/lib/postgresql/data"] redis: image: redis:7 worker: build: . command: celery -A app.tasks worker -l info ``` ### Systemd (без Docker, VPS) ```ini [Unit] Description=VoIdea API [Service] ExecStart=/home/voidea/venv/bin/uvicorn app.main:app --host 0.0.0.0 --port 8020 WorkingDirectory=/home/voidea Restart=always [Install] WantedBy=multi-user.target ``` --- ## CI/CD **Рекомендуется:** GitHub Actions ```yaml name: CI on: [push, pull_request] jobs: test: runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 - uses: actions/setup-python@v5 with: { python-version: "3.12" } - run: pip install -r requirements.txt - run: ruff check - run: pytest ``` --- ## [ASK] - Docker или без Docker? (Docker для воспроизводимости) - VPS или облако? (VPS дешевле, облако масштабируемее) - CI/CD какой? (GitHub Actions — бесплатно для публичных репозиториев) - Нужен ли staging? (да, перед production)