Wdrażanie i środowiska
1. Przegląd środowisk
BusiKM działa w trzech środowiskach:
| Środowisko | Cel | Domena | Deploy |
|---|---|---|---|
| Local | Rozwój i debugowanie | localhost:8000 / :3000 | Docker Compose |
| Staging | Testy integracyjne i QA | api-staging.busikm.pl | Auto-deploy (staging branch) |
| Production | Użytkownicy końcowi | api.busikm.pl | Manual approval (main branch) |
Zasada: kod nigdy nie trafia na produkcję bez przejścia przez staging.
2. Środowisko lokalne (Docker Compose)
Architektura usług (12+ kontenerów)
| Usługa | Obraz | Port | Opis |
|---|---|---|---|
| web | build: . | 8000 | Django/Daphne (HTTP + WebSocket) |
| celery | build: . | - | Worker Celery (kolejki default, gps) |
| celery-beat | build: . | - | Scheduler Celery Beat |
| celery-reports | build: . | - | Worker Celery (kolejka reports) |
| postgres | postgres:16 | 5432 | PostgreSQL + PostGIS |
| redis | redis:7-alpine | 6379 | Cache, broker Celery, Channel Layer |
| mongo | mongo:7 | 27017 | Przechowywanie punktów GPS |
| minio | minio/minio | 9000 | S3-kompatybilny storage |
| prometheus | prom/prometheus | 9090 | Zbieranie metryk |
| grafana | grafana/grafana | 3001 | Wizualizacja metryk |
| uptime-kuma | louislam/uptime-kuma | 3002 | Monitoring dostępności |
Komendy Makefile
# Uruchamianie i zatrzymywanie
make up # docker compose up -d
make down # docker compose down
make restart # docker compose restart
# Baza danych
make migrate # python manage.py migrate
make makemigrations # python manage.py makemigrations
make seed # Załadowanie danych testowych
# Rozwój
make shell # python manage.py shell_plus
make bash # bash w kontenerze web
make logs # docker compose logs -f
# Testy i jakość
make test # pytest --cov
make lint # ruff check + ruff format --check
make format # ruff format
# OpenAPI
make schema # generuj schemat OpenAPI
make client # generuj klienta TypeScript (orval) 3. CI/CD — GitHub Actions
Pipeline
git push (feature branch)
│
▼
GitHub Actions
├── Lint (ruff, eslint, prettier)
├── Testy (pytest, jest, detox)
├── Build schema OpenAPI
└── Sprawdź wygenerowanego klienta
│
▼
Merge do develop/staging
├── Docker build + push (GHCR)
└── Deploy na środowisko (auto)
│
▼
Merge do main (manual approval)
├── Deploy produkcyjny
├── EAS Build (mobile)
└── Vercel deploy (web) Środowiska deploymentu
| Komponent | Staging | Production |
|---|---|---|
| Backend | DigitalOcean Droplet | DigitalOcean Droplet (HA) |
| Web (Next.js) | Vercel Preview | Vercel Production |
| Mobile | EAS Internal Distribution | App Store + Google Play |
| Bazy danych | Docker na droplet | Managed DB (DigitalOcean) |
| Storage | DigitalOcean Spaces | DigitalOcean Spaces |
4. Procedura rollback
- Identyfikacja problemu (monitoring, alerty, feedback użytkowników)
- Decyzja o rollback (team lead / CTO)
- Rollback Docker:
docker compose up -d --no-deps webz poprzednim tagiem - Rollback migracji:
python manage.py migrate app_name previous_migration - Weryfikacja po rollback
- Analiza przyczyny i fix
5. Procedura hotfix
main (produkcja)
│
├── hotfix/fix-description
│ │
│ └── PR → main (2 approvals + CI green)
│
└── cherry-pick do develop Hotfix omija staging tylko w sytuacjach krytycznych (SEV-1). W pozostałych przypadkach przechodzi pełny pipeline.
6. Zmienne środowiskowe
| Zmienna | Opis | Przykład |
|---|---|---|
| DATABASE_URL | Connection string PostgreSQL | postgres://user:pass@host:5432/db |
| MONGO_URL | Connection string MongoDB | mongodb://host:27017/busikm |
| REDIS_URL | Connection string Redis | redis://host:6379/0 |
| SECRET_KEY | Django secret key | (losowy 50+ znaków) |
| SENTRY_DSN | Sentry DSN endpoint | https://xxx@sentry.io/yyy |
| AWS_ACCESS_KEY_ID | S3/Spaces klucz | (klucz dostępu) |
| MAPBOX_TOKEN | Mapbox API token | pk.xxx |