Delete page "EvoSync-v3-%E2%80%94-Step-1%3A-Environment-Setup"

2026-05-12 13:26:11 +03:00
parent a423e6847b
commit ef2cba8837

@@ -1,116 +0,0 @@
# EvoSync v3 — Step 1: Environment Setup
## Context
Rebuilding EvoSync from scratch (Python sync platform, Evotor → VK Market). Repo is clean — no web app exists. Goal for this step: scaffold the project skeleton, wire up Docker, and verify all services start healthy with a working DB connection and a live FastAPI app.
---
## Stack
- **Backend**: FastAPI 0.115 + Uvicorn (Python 3.12)
- **Task queue**: Celery 5.4 + Redis 7
- **Database**: MariaDB 11.4 + SQLAlchemy 2.0 + Alembic
- **Templates**: Jinja2 + Bootstrap 5 CDN
- **Monitoring**: Celery Flower
---
## What gets created in this step
### Root-level files
- `Dockerfile.web` — single image for web/worker/beat/flower
- `docker-compose.yml` — 6 services: db, redis, web, worker, beat, flower
- `requirements.txt` — all pinned dependencies
- `.env.example` — template with all required vars
- `alembic.ini` — points to `web/migrations/`
### `web/` package skeleton
```
web/
├── __init__.py
├── main.py # FastAPI app, single health route GET /health
├── config.py # pydantic-settings Settings (DATABASE_URL, REDIS_URL, SECRET_KEY, …)
├── database.py # SQLAlchemy engine + SessionLocal + Base
├── models/
│ └── __init__.py # empty for now
├── tasks/
│ ├── __init__.py
│ └── celery_app.py # Celery app factory, broker=REDIS_URL, no beat schedule yet
└── migrations/
├── env.py # Alembic env wired to web.database.Base
├── script.py.mako
└── versions/
└── 0001_initial.py # empty migration (no tables yet)
```
### `tests/`
```
tests/
├── conftest.py # SQLite in-memory engine, db_session fixture
└── test_health.py # GET /health returns 200 {"status": "ok"}
```
---
## docker-compose services
| Service | Image | Port | Command |
|---------|-------|------|---------|
| `db` | mariadb:11.4 | — | default, healthcheck |
| `redis` | redis:7-alpine | — | `redis-server --save 60 1`, healthcheck |
| `web` | Dockerfile.web | 8080→8000 | `alembic upgrade head && uvicorn web.main:app --host 0.0.0.0 --port 8000` |
| `worker` | Dockerfile.web | — | `celery -A web.tasks.celery_app worker --loglevel=info` |
| `beat` | Dockerfile.web | — | `celery -A web.tasks.celery_app beat --scheduler celery.beat:PersistentScheduler --schedule /tmp/celerybeat-schedule` |
| `flower` | Dockerfile.web | 5555 | `celery -A web.tasks.celery_app flower --port=5555` |
- `web` depends on `db` and `redis` being healthy before starting
- `worker` and `beat` depend on `redis` being healthy
- Single `Dockerfile.web` image, `command:` selects role
---
## Dockerfile.web
```dockerfile
FROM python:3.12-slim
ENV PYTHONDONTWRITEBYTECODE=1 PYTHONUNBUFFERED=1 PIP_NO_CACHE_DIR=1
WORKDIR /app
RUN apt-get update && apt-get install -y --no-install-recommends curl && rm -rf /var/lib/apt/lists/*
COPY requirements.txt .
RUN pip install --upgrade pip && pip install -r requirements.txt
COPY . .
CMD ["uvicorn", "web.main:app", "--host", "0.0.0.0", "--port", "8000"]
```
---
## requirements.txt
```
fastapi==0.115.5
uvicorn[standard]==0.32.1
python-multipart==0.0.12
jinja2==3.1.4
sqlalchemy==2.0.36
alembic==1.14.0
pymysql==1.1.1
cryptography>=44.0.0
passlib[bcrypt]==1.7.4
bcrypt==4.2.1
pydantic-settings==2.6.1
httpx==0.28.1
celery[redis]==5.4.0
redis==5.2.1
flower==2.0.1
python-json-logger==3.2.1
pytest==8.3.4
pytest-asyncio==0.24.0
pytest-cov==6.0.0
factory-boy==3.3.1
```
---
## Verification checklist
1. `docker compose up --build` → all 6 services reach healthy/running state
2. `curl http://localhost:8080/health``{"status": "ok"}`
3. Flower at `http://localhost:5555` → shows worker connected
4. `docker compose exec web alembic upgrade head` → no error
5. `pytest tests/``test_health.py` passes