Skip to main content

6. Railway

Railway est une plateforme de déploiement moderne qui permet de déployer des applications web, des APIs et des bases de données en quelques clics. C'est une alternative simple à Heroku, Vercel ou AWS.

Avantages de Railway

  • Gratuit pour débuter : 5$ de crédit gratuit par mois (suffisant pour de petits projets)
  • Déploiement automatique : Connecté à GitHub, déploie à chaque push
  • Base de données intégrée : PostgreSQL, MySQL, Redis, MongoDB
  • Variables d'environnement : Gestion simple et sécurisée
  • Logs en temps réel : Débogage facile
  • Domaine gratuit : Sous-domaine .railway.app

Créer un compte Railway

  1. Allez sur railway.app
  2. Cliquez sur Login
  3. Connectez-vous avec GitHub
  4. Autorisez Railway à accéder à vos repositories

Railway est maintenant connecté à votre compte GitHub ! 🎉

Préparer votre projet

Avant de déployer, assurez-vous que votre projet contient :

1. Script de démarrage

Dans votre package.json, ajoutez un script start :

{
"scripts": {
"dev": "tsx watch ./src/index.ts",
"build": "tsc",
"start": "node ./dist/index.js",
"typecheck": "tsc --noEmit",
"lint": "eslint .",
"test": "vitest run"
}
}

Important :

  • build : Compile TypeScript en JavaScript
  • start : Lance l'application compilée (utilisé par Railway)

2. Configuration du port

Railway assigne un port dynamique via la variable d'environnement PORT. Modifiez votre serveur Express :

const PORT = process.env.PORT || 3000

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

3. Fichier .gitignore

Assurez-vous d'ignorer les fichiers inutiles :

node_modules
dist
.env
.env.local
coverage

4. Configuration Prisma

Votre schema.prisma doit utiliser une variable d'environnement pour l'URL de la base de données :

datasource db {
provider = "postgresql"
url = env("DATABASE_URL")
}

Créer un projet sur Railway

1. Nouveau projet

  1. Connectez-vous sur railway.app
  2. Cliquez sur New Project
  3. Sélectionnez Deploy from GitHub repo
  4. Choisissez votre repository

2. Ajouter une base de données PostgreSQL

  1. Dans votre projet Railway, cliquez sur New
  2. Sélectionnez DatabaseAdd PostgreSQL
  3. Railway crée automatiquement une base de données

3. Lier la base de données à votre service

Railway génère automatiquement la variable DATABASE_URL et la rend disponible à votre service. Vous n'avez rien à configurer manuellement ! 🎉

4. Variables d'environnement

Ajoutez vos variables d'environnement dans Variables :

NODE_ENV=production
JWT_SECRET=votre-secret-de-production

Important : Ne commitez JAMAIS vos secrets sur GitHub. Utilisez Railway pour les gérer.

5. Build Command

Railway détecte automatiquement les commandes, mais vous pouvez les personnaliser :

  1. Allez dans SettingsBuild
  2. Build Command : npm run build
  3. Start Command : npm start

6. Migrations Prisma

Pour exécuter les migrations automatiquement au déploiement, ajoutez un script :

Dans package.json :

{
"scripts": {
"build": "prisma generate && prisma migrate deploy && tsc",
"start": "node ./dist/index.js"
}
}

Explication :

  • prisma generate : Génère le client Prisma
  • prisma migrate deploy : Applique les migrations
  • tsc : Compile TypeScript

Railway vérifie automatiquement que votre service répond.

Déployer votre application

  1. Commit et push votre code sur GitHub :
git add .
git commit -m "feat: prepare for Railway deployment"
git push origin main
  1. Railway détecte automatiquement le push et lance le déploiement

  2. Observez les logs dans Railway :

    • Onglet Deployments → Dernier déploiement
    • Logs en temps réel
  3. Attendez la fin du build (quelques minutes)

  4. Votre API est en ligne ! 🚀

Accéder à votre API

Railway génère une URL automatique : https://your-project.railway.app

  1. Allez dans SettingsNetworking
  2. Cliquez sur Generate Domain
  3. Railway crée un sous-domaine unique

Tester votre API

curl https://your-project.railway.app

Déploiement automatique (CD)

Avec Railway connecté à GitHub, chaque push sur main déclenche un déploiement automatique.

Workflow complet

  1. Développeur crée une branche → feat/new-feature
  2. Développeur push le code et ouvre une Pull Request
  3. GitHub Actions exécute les tests (CI)
  4. Revue de code approuvée
  5. Merge vers main
  6. Railway déploie automatiquement (CD) 🚀
  7. Application mise à jour en production

Seed de la base de données

Pour remplir votre base de données avec des données initiales :

1. Créer un script seed

Créez prisma/seed.ts :

import {PrismaClient} from '@prisma/client'

const prisma = new PrismaClient()

async function main() {
console.log('Seeding database...')

await prisma.user.createMany({
data: [
{email: 'alice@example.com', name: 'Alice'},
{email: 'bob@example.com', name: 'Bob'},
],
})

console.log('Seeding completed!')
}

main()
.catch((e) => {
console.error(e)
process.exit(1)
})
.finally(async () => {
await prisma.$disconnect()
})

2. Configurer le seed

Dans package.json :

{
"prisma": {
"seed": "tsx prisma/seed.ts"
}
}

3. Exécuter le seed

Localement :

npx prisma db seed

Sur Railway, exécutez via le terminal intégré :

  1. SettingsServiceWeb Console
  2. Tapez : npx prisma db seed