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
- Allez sur railway.app
- Cliquez sur Login
- Connectez-vous avec GitHub
- 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 JavaScriptstart: 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
- Connectez-vous sur railway.app
- Cliquez sur New Project
- Sélectionnez Deploy from GitHub repo
- Choisissez votre repository
2. Ajouter une base de données PostgreSQL
- Dans votre projet Railway, cliquez sur New
- Sélectionnez Database → Add PostgreSQL
- 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 :
- Allez dans Settings → Build
- Build Command :
npm run build - 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 Prismaprisma migrate deploy: Applique les migrationstsc: Compile TypeScript
Railway vérifie automatiquement que votre service répond.
Déployer votre application
- Commit et push votre code sur GitHub :
git add .
git commit -m "feat: prepare for Railway deployment"
git push origin main
-
Railway détecte automatiquement le push et lance le déploiement
-
Observez les logs dans Railway :
- Onglet Deployments → Dernier déploiement
- Logs en temps réel
-
Attendez la fin du build (quelques minutes)
-
Votre API est en ligne ! 🚀
Accéder à votre API
Railway génère une URL automatique : https://your-project.railway.app
- Allez dans Settings → Networking
- Cliquez sur Generate Domain
- 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
- Développeur crée une branche →
feat/new-feature - Développeur push le code et ouvre une Pull Request
- GitHub Actions exécute les tests (CI)
- Revue de code approuvée
- Merge vers
main - Railway déploie automatiquement (CD) 🚀
- 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é :
- Settings → Service → Web Console
- Tapez :
npx prisma db seed