Nouveau : Datasets open source gratuits disponibles !Decouvrir →
🐍
Intermediaire 20 min FastAPI

Deployer FastAPI sur Railway

Pourquoi Déployer FastAPI sur Railway ?

Déployer une application FastAPI sur Railway est un choix pratique pour les développeurs souhaitant bénéficier d'une plateforme de déploiement rapide et simple. En effet, Railway fournit un environnement de développement cloud prêt à l'emploi, qui permet aux développeurs de se concentrer sur le code plutôt que sur la configuration et le déploiement.

Un cas concret de déploiement FastAPI sur Railway est lorsque vous voulez créer une API pour votre application web ou mobile. En utilisant Railway, vous pouvez rapidement déployer cette API sans avoir à gérer les aspects techniques du hébergement et de la mise en production.

Prerequis

Pour suivre ce tutoriel, vous aurez besoin des éléments suivants :

  • Connaissance de base de FastAPI
  • Un compte GitHub (pour héberger votre code sur un dépôt)
  • Un compte Railway (gratuit pour les projets open source)

Les outils que vous devrez installer sont :

  • Python 3.7 ou plus récent
  • Git
  • Railway CLI

Concepts fondamentaux

1. Environnement de Développement Cloud

Un environnement de développement cloud est un service en ligne qui fournit des ressources informatiques (comme du stockage, du réseau et des serveurs) sur demande. Cela permet aux développeurs de se concentrer sur le code plutôt que sur la gestion des infrastructures.

2. Railway CLI

Railway Command Line Interface (CLI) est un outil qui vous permet d'interagir avec le service Railway depuis votre terminal. Il vous permet de créer, gérer et déployer vos applications.

## Installation de Railway CLI via npm
npm install -g @railway/cli

3. Déploiement Automatique

Le déploiement automatique est un processus qui permet d'automatiser le déploiement de votre application en réponse à des événements spécifiques, comme la création ou la mise à jour d'un commit sur un référentiel Git.

4. Variables d'Environnement

Les variables d'environnement sont des valeurs qui peuvent être utilisées dans votre code pour configurer le comportement de l'application. Elles permettent de séparer les configurations spécifiques aux environnements (production, développement) du code source.

## Utilisation de variables d'environnement en FastAPI
from fastapi import FastAPI, Depends
import os

app = FastAPI()

def get_db_url():
    return os.getenv("DATABASE_URL", "sqlite:///./test.db")

@app.get("/")
async def read_root(db_url=Depends(get_db_url)):
    return {"database_url": db_url}

Mise en pratique : Projet fil rouge

Nous allons créer une application simple d'un gestionnaire de tâches. Cette application permettra aux utilisateurs de créer, lire, mettre à jour et supprimer des tâches.

Étape 1 : Création du projet FastAPI

Créez un nouveau répertoire pour votre projet et initialisez-le avec Git :

mkdir task-manager-fastapi
cd task-manager-fastapi
git init

Créez un fichier main.py pour définir les routes de l'application :

## main.py
from fastapi import FastAPI, HTTPException, Depends
from sqlalchemy import create_engine, Column, Integer, String
from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy.orm import sessionmaker

DATABASE_URL = "sqlite:///./tasks.db"
engine = create_engine(DATABASE_URL)
SessionLocal = sessionmaker(autocommit=False, autoflush=False, bind=engine)
Base = declarative_base()

app = FastAPI()

class Task(Base):
    __tablename__ = "tasks"
    id = Column(Integer, primary_key=True, index=True)
    title = Column(String, index=True)
    description = Column(String)

## Création de la base de données
Base.metadata.create_all(bind=engine)

def get_db():
    db = SessionLocal()
    try:
        yield db
    finally:
        db.close()

@app.post("/tasks/")
async def create_task(task: dict, db: Session = Depends(get_db)):
    new_task = Task(**task)
    db.add(new_task)
    db.commit()
    db.refresh(new_task)
    return new_task

@app.get("/tasks/{task_id}")
async def read_task(task_id: int, db: Session = Depends(get_db)):
    task = db.query(Task).filter(Task.id == task_id).first()
    if not task:
        raise HTTPException(status_code=404, detail="Task not found")
    return task

@app.put("/tasks/{task_id}")
async def update_task(task_id: int, task_updates: dict, db: Session = Depends(get_db)):
    task = db.query(Task).filter(Task.id == task_id).first()
    if not task:
        raise HTTPException(status_code=404, detail="Task not found")
    
    for key, value in task_updates.items():
        setattr(task, key, value)
    db.commit()
    db.refresh(task)
    return task

@app.delete("/tasks/{task_id}")
async def delete_task(task_id: int, db: Session = Depends(get_db)):
    task = db.query(Task).filter(Task.id == task_id).first()
    if not task:
        raise HTTPException(status_code=404, detail="Task not found")
    
    db.delete(task)
    db.commit()
    return {"message": "Task deleted"}

Étape 2 : Configuration de Railway

Connectez-vous à votre compte Railway via la CLI :

railway login

Créez un nouveau projet sur Railway :

railway init --template fastapi

Suivez les instructions pour connecter votre projet à un dépôt GitHub et configurer le déploiement automatique.

Étape 3 : Déploiement

Une fois que vous avez configuré le déploiement, vous pouvez déployer votre application en exécutant la commande suivante :

railway up

Railway détectera les fichiers nécessaires pour un projet FastAPI et déployera votre application. Vous verrez l'URL de votre application une fois le déploiement terminé.

Erreurs fréquentes et debugging

1. ModuleNotFoundError : Module non trouvé

## Mauvais
from sqlalchemy import create_engine, Column, Integer, String

## Correction
from sqlalchemy import create_engine, Column, Integer, String

2. DatabaseError : Erreur de connexion à la base de données

## Mauvais
DATABASE_URL = "sqlite:///./tasks.db"

## Correction
DATABASE_URL = os.getenv("DATABASE_URL", "sqlite:///./tasks.db")

3. HTTPException : Erreur HTTP non traitée

## Mauvais
if not task:
    raise Exception("Task not found")

## Correction
if not task:
    raise HTTPException(status_code=404, detail="Task not found")

Pour aller plus loin

1. Authentification et Sécurité

Ajoutez une authentification JWT pour sécuriser vos routes.

2. Tests unitaires

Écrivez des tests unitaires pour votre application.

3. Logging

Ajoutez un système de logging pour faciliter le débogage et la surveillance de l'application.

Défi pratique

Créez une application FastAPI qui permet d'uploader des fichiers sur un serveur. Utilisez les concepts suivants :

  • Routing
  • File upload
  • Asynchronous programming
  • Middleware

Partagez votre code sur GitHub et partagez le lien dans les commentaires pour obtenir des retours.

Besoin d'aide sur FastAPI ?

Besoin d'aide sur un projet technique ? Decrivez-le pour des conseils personnalises.

Recevoir des conseils

Questions frequentes

Quel est le processus pour déployer une application FastAPI sur Railway ?
Pour déployer une application FastAPI sur Railway, commencez par créer un compte sur le site de Railway. Ensuite, clonez votre projet Git local dans un dépôt GitHub ou GitLab. Créez ensuite un nouveau projet sur Railway en sélectionnant le dépôt et choisissez l'environnement Python. Railway s'occupe du reste, y compris la création d'un environnement virtuel, l'installation des dépendances et le démarrage de votre application.
Comment configurer les variables d'environnement pour une application FastAPI sur Railway ?
Pour configurer les variables d'environnement sur Railway, allez dans la section 'Settings' de votre projet. Cliquez sur le bouton '+ Add Environment Variable'. Entrez le nom et la valeur de la variable d'environnement, puis cliquez sur 'Add'. Vous pouvez également utiliser un fichier .env pour définir les variables d'environnement, qui sera automatiquement lu par Railway.
Quelles sont les avantages de déployer une application FastAPI sur Railway ?
Déployer une application FastAPI sur Railway offre plusieurs avantages. En particulier, il permet un déploiement rapide et facile avec un seul clic, grâce à son intégration avec des services Git populaires comme GitHub et GitLab. Cela favorise l'automatisation et réduit le temps de mise en production. De plus, Railway offre un service d'hébergement fiable et évoluant, avec des spécifications de machine adaptées aux applications web.

Pages liees

Chaque semaine, le meilleur de la tech francaise

Tendances, salaires, outils et opportunites — directement dans votre boite mail.

Gratuit. Desabonnement en un clic. Pas de spam.