Wdrażanie i środowiska

1. Przegląd środowisk

BusiKM działa w trzech środowiskach:

ŚrodowiskoCelDomenaDeploy
LocalRozwój i debugowanielocalhost:8000 / :3000Docker Compose
StagingTesty integracyjne i QAapi-staging.busikm.plAuto-deploy (staging branch)
ProductionUżytkownicy końcowiapi.busikm.plManual 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ługaObrazPortOpis
webbuild: .8000Django/Daphne (HTTP + WebSocket)
celerybuild: .-Worker Celery (kolejki default, gps)
celery-beatbuild: .-Scheduler Celery Beat
celery-reportsbuild: .-Worker Celery (kolejka reports)
postgrespostgres:165432PostgreSQL + PostGIS
redisredis:7-alpine6379Cache, broker Celery, Channel Layer
mongomongo:727017Przechowywanie punktów GPS
miniominio/minio9000S3-kompatybilny storage
prometheusprom/prometheus9090Zbieranie metryk
grafanagrafana/grafana3001Wizualizacja metryk
uptime-kumalouislam/uptime-kuma3002Monitoring 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

KomponentStagingProduction
BackendDigitalOcean DropletDigitalOcean Droplet (HA)
Web (Next.js)Vercel PreviewVercel Production
MobileEAS Internal DistributionApp Store + Google Play
Bazy danychDocker na dropletManaged DB (DigitalOcean)
StorageDigitalOcean SpacesDigitalOcean Spaces

4. Procedura rollback

  1. Identyfikacja problemu (monitoring, alerty, feedback użytkowników)
  2. Decyzja o rollback (team lead / CTO)
  3. Rollback Docker: docker compose up -d --no-deps web z poprzednim tagiem
  4. Rollback migracji: python manage.py migrate app_name previous_migration
  5. Weryfikacja po rollback
  6. 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

ZmiennaOpisPrzykład
DATABASE_URLConnection string PostgreSQLpostgres://user:pass@host:5432/db
MONGO_URLConnection string MongoDBmongodb://host:27017/busikm
REDIS_URLConnection string Redisredis://host:6379/0
SECRET_KEYDjango secret key(losowy 50+ znaków)
SENTRY_DSNSentry DSN endpointhttps://xxx@sentry.io/yyy
AWS_ACCESS_KEY_IDS3/Spaces klucz(klucz dostępu)
MAPBOX_TOKENMapbox API tokenpk.xxx