railway-deploy

Par elophanto · elophanto

npx skills add https://github.com/elophanto/elophanto --skill railway-deploy

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

  1. Construire localement d'abord — toujours exécuter npm run build (ou équivalent) avant de déployer. Corriger tous les erreurs de build localement.

  2. Créer une base de données si nécessaire — si le projet a besoin de persistance, appeler create_database avec un nom de projet. Elle retourne automatiquement url, anon_key, service_role_key, et db_url. Ne jamais demander les clés Supabase à l'utilisateur — elles sont auto-générées.

  3. 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
      }
    )
  4. Vérifier — vérifier l'URL retournée ou utiliser deployment_status pour 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'utilisateurcreate_database les 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

Skills similaires