Skip to content

🚂 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-dsn

Gestion 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 production

Configuration 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ème

Points 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 --version

Dé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 --tail

Performance 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-app

Commandes 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


Railway simplifie nos déploiements avec une automatisation intelligente et un monitoring avancé ! 🚂

Released under the MIT License.