🚂 Railway
📋 Vue d'ensemble
Railway est notre plateforme de déploiement cloud principale. Elle offre un déploiement automatique depuis nos branches Git, un scaling automatique et une gestion simplifiée des services.
🏗️ Architecture sur Railway
Services déployés
LIPAIX Platform
├── 🌐 web-app (Next.js + PayloadCMS)
├── 🤖 discord-bot (Node.js)
├── 🗄️ postgresql (Base de données)
├── 🚀 redis (Cache)
└── 📚 docs (Documentation VitePress)Configuration des services
Chaque service est configuré avec :
- 🔄 Déploiement automatique depuis les branches de déploiement
- 📊 Monitoring et métriques en temps réel
- 🔐 Variables d'environnement sécurisées
- 🔄 Scaling automatique selon la charge
🚀 Configuration du déploiement
Service Web App
json
// railway.json pour l'application web
{
"$schema": "https://railway.app/railway.schema.json",
"build": {
"builder": "NIXPACKS"
},
"deploy": {
"startCommand": "npm start",
"healthcheckPath": "/api/health",
"healthcheckTimeout": 300,
"restartPolicyType": "ON_FAILURE",
"restartPolicyMaxRetries": 3
}
}json
// package.json scripts
{
"scripts": {
"build": "next build",
"start": "next start",
"dev": "next dev"
}
}Service Discord Bot
json
// railway.json pour le bot Discord
{
"$schema": "https://railway.app/railway.schema.json",
"build": {
"builder": "NIXPACKS"
},
"deploy": {
"startCommand": "npm start",
"healthcheckPath": "/health",
"healthcheckTimeout": 60,
"restartPolicyType": "ON_FAILURE",
"restartPolicyMaxRetries": 5
}
}json
// package.json scripts
{
"scripts": {
"build": "tsup src/index.ts --format esm --dts",
"start": "node dist/index.js",
"dev": "tsx watch src/index.ts"
}
}Service Documentation
json
// railway.json pour la documentation
{
"$schema": "https://railway.app/railway.schema.json",
"build": {
"builder": "NIXPACKS"
},
"deploy": {
"startCommand": "npm start",
"healthcheckPath": "/",
"healthcheckTimeout": 30,
"restartPolicyType": "ON_FAILURE",
"restartPolicyMaxRetries": 2
}
}🔧 Variables d'environnement
Configuration des variables
Les variables d'environnement sont configurées dans l'interface Railway :
bash
# Variables communes
NODE_ENV=production
PORT=3000
RAILWAY_STATIC_URL=https://your-app.railway.app
# Base de données
DATABASE_URL=postgresql://user:pass@host:port/db
POSTGRES_URL=postgresql://user:pass@host:port/db
POSTGRES_USER=username
POSTGRES_PASSWORD=password
POSTGRES_HOST=host
POSTGRES_PORT=5432
POSTGRES_DB=database
# Redis
REDIS_URL=redis://user:pass@host:port
REDIS_HOST=host
REDIS_PORT=6379
REDIS_PASSWORD=password
# Discord Bot
DISCORD_TOKEN=your-discord-token
DISCORD_CLIENT_ID=your-client-id
DISCORD_GUILD_ID=your-guild-id
# PayloadCMS
PAYLOAD_SECRET=your-payload-secret
PAYLOAD_PUBLIC_SERVER_URL=https://your-app.railway.app
# Monitoring
SENTRY_DSN=your-sentry-dsnGestion des secrets
- 🔐 Chiffrement automatique - Variables sensibles chiffrées
- 👥 Accès contrôlé - Permissions par membre de l'équipe
- 📋 Audit trail - Traçabilité des modifications
- 🔄 Synchronisation - Variables partagées entre services
🔄 Workflow de déploiement
Déclenchement automatique
Railway surveille automatiquement nos branches de déploiement :
1. Mise à jour de deploy/web
↓
2. Déclenchement automatique du build
↓
3. Installation des dépendances
↓
4. Build de l'application
↓
5. Déploiement sur Railway
↓
6. Health checks et validation
↓
7. Mise en productionConfiguration des branches
yaml
# Configuration des branches de déploiement
branches:
- name: deploy/web
environment: production
auto_deploy: true
health_check: true
- name: deploy/staging/web
environment: staging
auto_deploy: true
health_check: true
- name: deploy/discord-bot
environment: production
auto_deploy: true
health_check: true
- name: deploy/docs
environment: production
auto_deploy: true
health_check: true📊 Monitoring et observabilité
Métriques de performance
Railway fournit des métriques en temps réel :
- ⏱️ Temps de réponse - Latence des requêtes
- 📊 Throughput - Requêtes par seconde
- 💾 Utilisation des ressources - CPU, mémoire, disque
- 🔄 Scaling - Nombre d'instances actives
Health Checks
Chaque service expose des endpoints de santé :
typescript
// Endpoint de santé pour l'application web
export async function GET() {
try {
// Vérifier la base de données
const dbHealth = await checkDatabase();
// Vérifier Redis
const redisHealth = await checkRedis();
// Vérifier PayloadCMS
const payloadHealth = await checkPayload();
const isHealthy = dbHealth && redisHealth && payloadHealth;
return Response.json({
status: isHealthy ? 'healthy' : 'unhealthy',
timestamp: new Date().toISOString(),
checks: {
database: dbHealth ? 'connected' : 'disconnected',
redis: redisHealth ? 'connected' : 'disconnected',
payload: payloadHealth ? 'running' : 'stopped'
}
}, {
status: isHealthy ? 200 : 503
});
} catch (error) {
return Response.json({
status: 'unhealthy',
timestamp: new Date().toISOString(),
error: error.message
}, { status: 503 });
}
}
async function checkDatabase(): Promise<boolean> {
try {
await db.query('SELECT 1');
return true;
} catch {
return false;
}
}
async function checkRedis(): Promise<boolean> {
try {
await redis.ping();
return true;
} catch {
return false;
}
}
async function checkPayload(): Promise<boolean> {
try {
await payload.db.connect();
return true;
} catch {
return false;
}
}Logs et debugging
- 📋 Logs structurés - Format JSON pour faciliter l'analyse
- 🔍 Filtrage avancé - Recherche par niveau, service, timestamp
- 📊 Agrégation - Analyse des patterns et erreurs
- 🚨 Alertes - Notifications en cas de problème
🚀 Scaling et performance
Scaling automatique
Railway ajuste automatiquement les ressources :
json
// Configuration du scaling
{
"scaling": {
"min_instances": 1,
"max_instances": 5,
"target_cpu_percent": 70,
"target_memory_percent": 80,
"scale_up_cooldown": 300,
"scale_down_cooldown": 600
}
}Optimisations de performance
- ⚡ Build optimisé - Utilisation de la cache et optimisations
- 📦 Bundle splitting - Division intelligente du code
- 🖼️ Optimisation des images - Compression et formats modernes
- 🔍 Tree shaking - Élimination du code mort
🔒 Sécurité et conformité
Sécurité des déploiements
- 🔐 HTTPS obligatoire - Chiffrement TLS pour toutes les communications
- 🚫 Pas d'accès root - Conteneurs en mode non-privilégié
- 🔄 Mises à jour automatiques - Sécurité des dépendances
- 📋 Audit de sécurité - Vérifications automatiques
Conformité et certifications
- 🔒 SOC 2 Type II - Certification de sécurité
- 🌍 GDPR - Conformité européenne
- 🇺🇸 HIPAA - Conformité santé (si applicable)
- 📊 ISO 27001 - Gestion de la sécurité de l'information
🔄 Rollback et récupération
Stratégie de rollback
En cas de problème après déploiement :
bash
# Rollback manuel via l'interface Railway
1. Accéder au service dans Railway
2. Aller dans l'onglet "Deployments"
3. Sélectionner la version précédente
4. Cliquer sur "Rollback"
5. Confirmer le rollback
# Rollback automatique en cas d'échec
- Health check échoue pendant 5 minutes
- Rollback automatique à la version précédente
- Notification à l'équipe
- Investigation du problèmePoints de restauration
- 📦 Images Docker - Versions précédentes disponibles
- 🗄️ Base de données - Sauvegardes automatiques
- 📁 Code source - Tags Git pour chaque déploiement
- 🔧 Configuration - Versions des variables d'environnement
🛠️ Troubleshooting
Problèmes courants
Build échoue
bash
# Vérifier les logs de build
railway logs --service web-app
# Vérifier les dépendances
npm ci --only=production
# Vérifier la version Node.js
node --version
npm --versionDéploiement échoue
bash
# Vérifier les health checks
curl https://your-app.railway.app/api/health
# Vérifier les variables d'environnement
railway variables list --service web-app
# Vérifier les logs d'application
railway logs --service web-app --tailPerformance dégradée
bash
# Vérifier l'utilisation des ressources
railway status --service web-app
# Vérifier le scaling
railway scaling --service web-app
# Analyser les métriques
railway metrics --service web-appCommandes Railway CLI
bash
# Installation
npm install -g @railway/cli
# Connexion
railway login
# Lister les projets
railway projects
# Lister les services
railway services
# Voir les logs
railway logs --service web-app
# Voir le statut
railway status --service web-app
# Déployer manuellement
railway up --service web-app
# Rollback
railway rollback --service web-app📚 Documentation et ressources
Ressources officielles
- 📖 Documentation Railway - Guides complets et tutoriels
- 🎥 Vidéos - Démonstrations et formations
- 💬 Communauté - Forum et support communautaire
- 📧 Support - Support technique officiel
Formation de l'équipe
- 👥 Sessions de formation - Apprentissage de la plateforme
- 🔄 Pratiques - Exercices de déploiement
- 📊 Monitoring - Interprétation des métriques
- 🚨 Gestion d'urgence - Procédures de rollback
🎯 Bonnes pratiques
Do's
- ✅ Configurer les health checks - Validation de la disponibilité
- ✅ Utiliser les variables d'environnement - Configuration sécurisée
- ✅ Monitorer les performances - Surveillance continue
- ✅ Configurer le scaling - Adaptation automatique à la charge
- ✅ Documenter les déploiements - Traçabilité complète
Don'ts
- ❌ Ignorer les health checks - Validation obligatoire
- ❌ Exposer les secrets - Variables sensibles dans le code
- ❌ Négliger le monitoring - Surveillance continue requise
- ❌ Oublier le rollback - Plan de récupération obligatoire
🚀 Prochaines étapes
- Déploiement - Vue d'ensemble de la stratégie
- Git Workflow - Gestion des branches
- Deployment Overview - Processus complet
- Architecture - Structure technique du projet
- Backend - PayloadCMS et services
Railway simplifie nos déploiements avec une automatisation intelligente et un monitoring avancé ! 🚂
