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 :
- API HTTP
- Graphile cron worker
- Graphile queue worker
- Bricks assignation
- Bricks P2P creation
- Reservation confirmation
- Reservation expiration
- Played Lemonway P2P
- Pending Lemonway P2P
- 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 |
|