Déployer vers Railway
Description
Déployez des applications et des backends vers Railway. Gère les processus longue durée, WebSockets, les cron jobs, et les appels à des API LLM sans limite de timeout.
Déclencheurs
- railway
- deploy to railway
- deploy backend
- deploy api
- deploy server
- deploy websocket
- deploy streaming
- long running deploy
Instructions
Quand utiliser Railway
Railway est le bon choix pour :
- Les APIs qui appellent des LLMs (OpenAI, Anthropic, etc.) — les réponses prennent > 10s
- Les applications Streaming / Server-Sent Events / WebSocket
- Les workers en arrière-plan, cron jobs, files de travail (BullMQ, pg-boss)
- Les backends API purs (sans frontend)
- Toute app qui a besoin de processus serveur persistants
- En cas de doute — Railway n'a pas de limite de timeout
Workflow de déploiement
-
Construire localement d'abord — toujours exécuter
npm run build(ou équivalent) avant de déployer. Corriger tous les erreurs de build localement. -
Créer une base de données si nécessaire — si le projet a besoin de persistance, appeler
create_databaseavec un nom de projet. Elle retourne automatiquementurl,anon_key,service_role_key, etdb_url. Ne jamais demander les clés Supabase à l'utilisateur — elles sont auto-générées. -
Déployer en utilisant l'outil
deploy_website:deploy_website( project_path="/path/to/project", provider="railway", name="my-api", # optional env_vars={ # from create_database result + any other vars "DATABASE_URL": db_url, "SUPABASE_SERVICE_ROLE_KEY": service_role_key, "OPENAI_API_KEY": "...", # or any other env vars the app needs } ) -
Vérifier — vérifier l'URL retournée ou utiliser
deployment_statuspour confirmer.
Configuration du token
L'outil deploy_website lit le token Railway du vault automatiquement.
S'il n'est pas défini, il indiquera à l'utilisateur quoi faire :
vault_set key=railway_token value=YOUR_TOKEN
Obtenir le token sur : railway.com → Account Settings → Tokens → Create Token.
Railway CLI doit être installé : npm install -g @railway/cli
Comment ça fonctionne sous le capot
L'outil deploy_website exécute :
# Set env vars
RAILWAY_TOKEN=$TOKEN railway variables set KEY1=VAL1 KEY2=VAL2
# Deploy (detached — returns immediately)
RAILWAY_TOKEN=$TOKEN railway up --detach
# Get the public URL
RAILWAY_TOKEN=$TOKEN railway domain
Tier gratuit de Railway
- 5$/mois de crédit (pas besoin de carte de crédit pour commencer)
- Pas de limite de timeout sur les processus serveur
- Processus persistants (continue de tourner après le déploiement)
- Domaines personnalisés supportés
- HTTPS automatique
Types de projets qui ont besoin de Railway
| Pattern dans le code | Pourquoi Railway |
|---|---|
import openai / import anthropic |
Les appels LLM prennent 10-60s |
ReadableStream / EventSource |
Réponses en streaming |
WebSocket / socket.io / ws |
Connexions persistantes |
setTimeout > 10s |
Timers longs |
bullmq / pg-boss |
Files de travail en arrière-plan |
Procfile existe |
Processus serveur personnalisé |
cron / scheduled tasks |
Jobs récurrents |
Anti-patterns
- Ne pas mettre en dur les clés API dans le code source — utiliser le paramètre
env_vars. - Ne pas déployer sans compiler localement — attraper les erreurs avant de déployer.
- Ne pas demander les clés anon/service de Supabase à l'utilisateur —
create_databaseles retourne automatiquement. - Ne pas utiliser Railway pour les sites statiques simples — Vercel est gratuit et plus rapide pour le contenu statique avec CDN global.
Vérifier
- La commande de déploiement a réellement été exécutée et la sortie de build/log (ou URL de déploiement) est capturée
- L'URL déployée a été ouverte et a retourné un 2xx ; les routes clés ont été échantillonnées, pas seulement l'index
- Les variables d'environnement requises par l'app sont présentes dans l'environnement cible ; les défaillances de variable manquante ont été exclues
- Un plan de rollback (ID de déploiement précédent, SHA git, ou commande de réversion sur une ligne) est documenté avant de promouvoir en production
- Une vérification health/observabilité (logs, error tracker, status page) a été inspectée post-déploiement ; le taux d'erreur de base est enregistré
- La configuration DNS / domaine / SSL a été confirmée, pas assumée de se reporter des déploiements précédents