83 lines
1.7 KiB
Markdown
83 lines
1.7 KiB
Markdown
# Стратегия деплоя
|
|
|
|
---
|
|
|
|
## 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)
|