Aller au contenu

Infrastructure & déploiement

Compute principal sur Railway. Base de données Neon. Secrets Doppler. Pas de Kubernetes dans le chemin de déploiement applicatif.

Diagramme

flowchart TB
  subgraph devops["CI/CD"]
    gh["GitHub Actions<br/>branche develop"]
    doppler["Doppler"]
    flyway["Flyway migrations"]
  end

  subgraph railway["Railway — europe-west4"]
    api_svc["API HTTP<br/>5 replicas"]
    cron["Graphile cron"]
    queue["Graphile queue"]
    w1["Workers domaine"]
    web_svcs["SPAs nginx"]
    ddagent["Agent Datadog"]
    proxy["lw-static-ip-proxy"]
  end

  subgraph managed["Services managés"]
    neon[("Neon Postgres")]
    redis_svc[("Redis")]
    s3_svc[("AWS S3")]
  end

  subgraph mobile_deploy["Mobile natif"]
    eas["Expo EAS"]
    stores["App Store / Play Store"]
  end

  gh --> flyway
  flyway --> api_svc
  doppler --> gh
  doppler --> railway

  api_svc --> neon
  cron --> neon
  w1 --> neon
  api_svc --> redis_svc
  api_svc --> s3_svc
  w1 --> proxy

  eas --> stores
  gh --> eas

Environnements

Env API App invest web Doppler (api project) Railway env
Dev https://api.dev.bricks.co https://app.dev.bricks.co dev dev
Staging https://api.staging.bricks.co À compléter staging staging
Prod https://api.bricks.co https://app.bricks.co production prod

Détail secrets : Doppler — Variables d'environnement.

Déploiement par composant

Composant Image / build Trigger CI Hébergement
API + workers Dockerfile.api api-deployToProd.yml (push develop) Railway (10 services prod)
Mobile web Expo build:web + nginx app-invest-web-deploy-prod.yml Railway
front-app legacy Vite + nginx app-invest-legacy-deploy-prod.yml Railway
PDP web Vite + nginx app-pdp-financement-web-deploy-prod.yml (manuel) Railway
BO projects / invest Vite + nginx Validate CI ; deploy : À compléter Railway
Mobile natif EAS app-invest-mobile-build-prod.yml Stores + OTA
Storybook Chromatic storybook-chromatic.yml Chromatic
Docs MkDocs Dockerfile.docs docs-validate.yml docs.bricks.internal

Services Railway (API prod)

Déployés en parallèle depuis api-deployToProd.yml :

  1. API HTTP
  2. Graphile cron worker
  3. Graphile queue worker
  4. Bricks assignation
  5. Bricks P2P creation
  6. Reservation confirmation
  7. Reservation expiration
  8. Played Lemonway P2P
  9. Pending Lemonway P2P
  10. PDF generator

Config API : projects/api/railway/railway.api.json (healthcheck /probe/version, 5 replicas).

Base de données

Provider Neon
Migrations Flyway (projects/api/migration/flyway/) + Better Auth migrate
Branches Reset cron quotidien (neon-daily-production-reset-common-branch.yml)
Scaling Crons API via Neon API (avant/après collectes)

Jobs async

Système Rôle
Graphile Worker Crons + queue dynamique (tables Postgres graphile_worker)
Workers domaine Boucles P2P, assignation, PDF, réservations
Redis Cache uniquement — pas de message broker
GitHub Actions cron Neon branch reset, autres : À compléter

Observabilité

Couche Outil
API traces dd-trace (projects/api/src/tracing.ts)
API logs Pino → agent Datadog Railway
Front RUM Datadog Browser / RN SDK
Storybook Chromatic
Incidents docs/postmortems/

CI/CD (workflows clés)

Workflow Rôle
*-validate.yml tsc / lint / build sur PR
api-deployToDev/Prod/Env Migrations + Railway multi-service
app-invest-mobile-ota-update-prod OTA Expo prod (GitHub Action)
.eas/workflows/ota-dev.yml OTA dev de PR + build dev-client conditionnel piloté par fingerprint (EAS Workflow)
neon-* Gestion branches Neon
knip-validate Dépendances inutilisées

Branche d'intégration : develop (deploy prod path-filtered).

À compléter

Sujet Owner Notes
URLs prod BO / PDP / mobile web À compléter
DNS et CDN (S3, SPAs) À compléter
RTO / RPO par service À compléter
Plan incident Railway / Neon / Lemonway À compléter
Coûts infra par environnement À compléter