Déploiement sur 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