Skip to main content

Déploiement

Introduction à Railway

Railway est une plateforme moderne de déploiement qui simplifie considérablement le processus de mise en ligne d'applications. Contrairement à d'autres plateformes, Railway est conçue pour être simple et intuitive, tout en offrant des fonctionnalités puissantes pour les développeurs.

Avantages de Railway

  • Simplicité : Déploiement en quelques clics ou commandes
  • Intégration GitHub : Déploiement automatique à partir de votre dépôt
  • Services managés : Bases de données, files d'attente et autres services facilement intégrables
  • Variables d'environnement : Gestion simple des configurations
  • Scaling automatique : S'adapte aux besoins de votre application
  • Monitoring : Surveillance des performances et des logs
  • Prévisualisation des déploiements : Environnements de prévisualisation pour les pull requests

Préparation de votre application Node.js

Avant de déployer votre application sur Railway, vous devez vous assurer qu'elle est prête pour un environnement de production.

Configuration du port

Votre application doit écouter sur le port fourni par Railway via la variable d'environnement PORT :

import express from 'express';

const app = express();
const port = process.env.PORT || 3000;

app.listen(port, () => {
console.log(`Server running on port ${port}`);
});

Script de démarrage

Assurez-vous que votre package.json contient un script start qui sera utilisé par Railway pour démarrer votre application :

{
"scripts": {
"build": "tsc",
"start": "node dist/index.js"
}
}

Procfile (optionnel)

Vous pouvez spécifier les commandes à exécuter au démarrage dans un fichier Procfile à la racine de votre projet :

web: npm start

Gestion des variables d'environnement

Pour les variables d'environnement sensibles, comme les clés API ou les informations de connexion à la base de données, vous devrez les configurer dans Railway plutôt que de les coder en dur dans votre application.

Utilisez un package comme dotenv pour charger ces variables en développement :

import dotenv from 'dotenv';

if (process.env.NODE_ENV !== 'production') {
dotenv.config();
}

// Utilisez ensuite process.env.MA_VARIABLE

Déploiement manuel sur Railway

Création d'un compte Railway

  1. Allez sur Railway.app et créez un compte. Vous pouvez vous connecter avec GitHub pour faciliter l'intégration.

Déploiement depuis GitHub

  1. Dans le dashboard Railway, cliquez sur "New Project".
  2. Sélectionnez "Deploy from GitHub repo".
  3. Choisissez votre dépôt dans la liste.
  4. Railway détectera automatiquement qu'il s'agit d'une application Node.js et configurera le déploiement en conséquence.
  5. Une fois le déploiement terminé, cliquez sur "Settings" pour configurer les variables d'environnement nécessaires.

Déploiement avec Railway CLI

Vous pouvez aussi utiliser la CLI Railway pour plus de flexibilité :

  1. Installez la CLI Railway :

    npm i -g @railway/cli
  2. Connectez-vous à votre compte Railway :

    railway login
  3. Initialisez votre projet :

    railway init
  4. Déployez votre application :

    railway up

Automatisation du déploiement avec GitHub Actions

Pour automatiser le déploiement de votre application sur Railway à chaque nouvelle version, vous pouvez intégrer Railway dans votre workflow GitHub Actions.

Configuration du token Railway

  1. Obtenez un token API Railway en exécutant :

    railway login
  2. Copiez le token affiché ou récupérez-le depuis les paramètres de votre compte Railway.

  3. Dans votre dépôt GitHub, allez dans Settings > Secrets and variables > Actions et ajoutez un nouveau secret nommé RAILWAY_TOKEN avec la valeur du token.

Workflow de déploiement

Créez un fichier .github/workflows/deploy.yml :

name: Deploy to Railway

on:
release:
types: [created]

jobs:
deploy:
runs-on: ubuntu-latest

steps:
- name: Checkout
uses: actions/checkout@v3

- name: Use Node.js
uses: actions/setup-node@v3
with:
node-version: '18'
cache: 'npm'

- name: Install dependencies
run: npm ci

- name: Build
run: npm run build --if-present

- name: Install Railway CLI
run: npm i -g @railway/cli

- name: Deploy to Railway
env:
RAILWAY_TOKEN: ${{ secrets.RAILWAY_TOKEN }}
run: railway up --detach

Ce workflow s'exécute automatiquement lorsqu'une nouvelle release est créée (par exemple par Semantic Release), garantissant que la dernière version stable de votre application est toujours déployée.

Intégration avec Semantic Release

Vous pouvez aussi ajouter l'étape de déploiement directement dans votre workflow de release :

name: Release and Deploy

on:
push:
branches: [main]

jobs:
release:
# ... (étapes de Semantic Release comme vu précédemment)

- name: Install Railway CLI
if: steps.semantic.outputs.new_release_published == 'true'
run: npm i -g @railway/cli

- name: Deploy to Railway
if: steps.semantic.outputs.new_release_published == 'true'
env:
RAILWAY_TOKEN: ${{ secrets.RAILWAY_TOKEN }}
run: railway up --detach

Cette configuration ne déploie que lorsqu'une nouvelle version est effectivement publiée par Semantic Release.

Déploiement multi-environnements

Railway permet de déployer facilement plusieurs environnements pour votre application (développement, staging, production).

Configuration des environnements

  1. Créez différents projets dans Railway pour chaque environnement.
  2. Dans votre workflow GitHub Actions, déployez sur l'environnement approprié en fonction de la branche :
jobs:
deploy:
runs-on: ubuntu-latest

steps:
# ... (étapes précédentes)

- name: Deploy to Dev
if: github.ref == 'refs/heads/develop'
env:
RAILWAY_TOKEN: ${{ secrets.RAILWAY_TOKEN }}
run: railway up --service ${{ secrets.RAILWAY_SERVICE_DEV }} --detach

- name: Deploy to Production
if: github.ref == 'refs/heads/main'
env:
RAILWAY_TOKEN: ${{ secrets.RAILWAY_TOKEN }}
run: railway up --service ${{ secrets.RAILWAY_SERVICE_PROD }} --detach

Prévisualisation des pull requests

Railway offre une fonctionnalité de "Preview Environments" qui crée automatiquement un environnement temporaire pour chaque pull request.

Pour configurer cette fonctionnalité :

  1. Dans votre projet Railway, allez dans Settings > GitHub.
  2. Activez "Preview Environments".
  3. Sélectionnez le dépôt et les branches pour lesquelles vous souhaitez activer cette fonctionnalité.

Surveillance et monitoring

Une fois votre application déployée, vous devez surveiller ses performances et son comportement en production.

Logs et monitoring dans Railway

Railway fournit des outils intégrés pour consulter les logs et surveiller les performances de votre application :

  1. Dans le dashboard de votre projet Railway, cliquez sur votre service.
  2. Allez dans l'onglet "Metrics" pour voir les performances.
  3. Allez dans l'onglet "Logs" pour consulter les logs en temps réel.

Intégration avec des services de monitoring externes

Vous pouvez également intégrer des services de monitoring externes comme Sentry ou New Relic :

import * as Sentry from '@sentry/node';

Sentry.init({
dsn: process.env.SENTRY_DSN,
environment: process.env.NODE_ENV
});

// Le reste de votre code d'initialisation d'application

Gestion des bases de données

Si votre application utilise une base de données, Railway offre plusieurs options intégrées :

  1. Dans le dashboard Railway, cliquez sur "New".
  2. Sélectionnez le type de base de données que vous souhaitez utiliser (PostgreSQL, MySQL, MongoDB, Redis).
  3. Une fois créée, Railway générera automatiquement les variables d'environnement nécessaires pour se connecter à la base de données.

Migrations et seeders

Pour les migrations de base de données, vous pouvez utiliser les outils spécifiques à votre ORM ou à votre base de données :

  • Prisma : Exécutez les migrations lors du déploiement en ajoutant une commande dans votre Procfile :

    web: npx prisma migrate deploy && npm start
  • Autres ORM : Adaptez la commande en fonction de votre ORM (Sequelize, TypeORM, etc.).

Conseils pour un déploiement réussi

  1. Testez localement avant de déployer : Utilisez railway run pour exécuter votre application avec les mêmes variables d'environnement que sur Railway.

  2. Utilisez des health checks : Ajoutez un endpoint /health qui retourne un statut 200 pour permettre à Railway de vérifier que votre application est en bon état.

  3. Configurez le scaling approprié : Ajustez les ressources allouées à votre application en fonction de vos besoins (CPU, mémoire).

  4. Automatisez tout : Utilisez GitHub Actions pour automatiser non seulement le déploiement mais aussi les tests, les migrations, etc.

  5. Surveillez les coûts : Railway propose un plan gratuit généreux, mais surveillez votre consommation de ressources pour éviter les surprises.

En suivant ces étapes et conseils, vous aurez mis en place un pipeline de déploiement automatisé complet, de l'écriture du code jusqu'à la mise en production sur Railway. Cette approche DevOps moderne vous permettra de livrer des fonctionnalités plus rapidement et avec plus de confiance.