Nouveau : Datasets open source gratuits disponibles !Decouvrir →
⚛️
Intermediaire 20 min React

Deployer React sur Railway

Pourquoi Déployer React sur Railway ?

Deployer React sur Railway est une étape cruciale pour les développeurs web modernes, car il permet de rendre leurs applications accessibles en ligne et à travers le monde sans l'installation préalable des dépendances locales. Cela offre plusieurs avantages :

  • Portabilité : Les utilisateurs peuvent accéder à votre application depuis n'importe où et sur n'importe quel appareil, tant qu'ils ont une connexion Internet.
  • Évolutivité : Railway s’occupe de l'échelle automatique de votre application en fonction du trafic. Plus il y a d'utilisateurs, plus le service redimensionne pour maintenir les performances optimales.
  • Sécurité : Les services cloud comme Railway offrent des mesures de sécurité intégrées et régulières pour protéger vos applications contre les menaces cyber.

Un cas d'usage concret est celui d'un site web de petites entreprises qui souhaitent partager leurs produits ou services avec un public plus large. En déployant leur application React sur Railway, elles peuvent facilement rendre leur site accessible depuis n’importe où en ligne, tout en profitant de l’évolutivité et de la sécurité offertes par le service.

Prérequis

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

  • Connaissances :

    • Familiarité avec les bases de JavaScript et React.
    • Compréhension de l'utilisation de l'interface de ligne de commande (CLI).
  • Outils à installer :

    • Node.js >= 14.x
    • npm >= 6.0.0 (Node Package Manager)

Vous pouvez télécharger Node.js et npm depuis le site officiel. Assurez-vous d'avoir les versions appropriées installées en exécutant :

## Vérifier la version de Node.js
node -v

## Vérifier la version de npm
npm -v

Concepts fondamentaux

1. Comprendre le déploiement et sa pertinence pour React

Le déploiement est le processus de rendre votre application accessible à travers un serveur web. Pour les applications React, cela implique généralement :

  • Optimiser l'application pour qu'elle soit en mesure de fonctionner efficacement sur un serveur.
  • Configurer le serveur pour servir correctement les fichiers statiques générés par React (index.html, les fichiers JavaScript, etc.).

2. Comprendre les déploiements continus et leurs avantages

Les déploiements continus (CI/CD) permettent de déployer automatiquement votre application chaque fois que vous faites un commit sur le code source. Cela assure une mise à jour continue et réactive de l'application, minimisant ainsi les temps d'inactivité.

3. Comprendre les environnements de déploiement et leurs configurations

Il existe différents types d'environnements de déploiement :

  • Développement : Pour le développement initial et les tests.
  • Staging : Un environnement similaire à celui du production, utilisé pour prévisualiser les changements avant leur mise en production.
  • Production : L'environnement final où votre application est accessible aux utilisateurs.

Mise en pratique : Projet fil rouge

Nous allons créer un mini-projet complet et réaliste : un simple gestionnaire de tâches. Voici comment structurer ce projet sur Railway :

Étape 1 : Initialiser le projet React

Créez un nouveau répertoire pour votre projet et initialisez-le avec npm.

## Créer un nouveau répertoire
mkdir task-manager

## Accéder au répertoire
cd task-manager

## Initialiser un nouveau projet Node.js
npm init -y

Étape 2 : Installer les dépendances React et autres packages nécessaires

Installez React, ReactDOM, et une bibliothèque de gestion d'état comme Redux.

## Installer React et ReactDOM
npm install react react-dom

## Installer Redux (facultatif)
npm install redux react-redux @reduxjs/toolkit

Étape 3 : Créer la structure du projet

Créez les fichiers et répertoires suivants :

task-manager/
├── public/
│   ├── index.html
├── src/
│   ├── components/
│   │   └── TaskList.jsx
│   ├── App.jsx
│   ├── store.js
│   ├── index.js
├── .gitignore
├── package.json
└── README.md

Étape 4 : Configurer le fichier index.html

<!-- public/index.html -->
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Task Manager</title>
</head>
<body>
    <div id="root"></div>
</body>
</html>

Étape 5 : Créer le composant TaskList.jsx

// src/components/TaskList.jsx
import React, { useState } from 'react';

const TaskList = () => {
    const [tasks, setTasks] = useState([]);
    const [newTask, setNewTask] = useState('');

    const handleAddTask = () => {
        if (newTask.trim()) {
            setTasks([...tasks, newTask]);
            setNewTask('');
        }
    };

    return (
        <div>
            <h1>Task Manager</h1>
            <input
                type="text"
                value={newTask}
                onChange={(e) => setNewTask(e.target.value)}
                placeholder="Add a task"
            />
            <button onClick={handleAddTask}>Add Task</button>
            <ul>
                {tasks.map((task, index) => (
                    <li key={index}>{task}</li>
                ))}
            </ul>
        </div>
    );
};

export default TaskList;

Étape 6 : Créer le fichier App.jsx

// src/App.jsx
import React from 'react';
import TaskList from './components/TaskList';

const App = () => {
    return (
        <div className="App">
            <TaskList />
        </div>
    );
};

export default App;

Étape 7 : Créer le fichier store.js (facultatif, si vous utilisez Redux)

// src/store.js
import { configureStore } from '@reduxjs/toolkit';

const store = configureStore({
    reducer: {
        tasks: (state = [], action) => {
            switch (action.type) {
                case 'ADD_TASK':
                    return [...state, action.payload];
                default:
                    return state;
            }
        },
    },
});

export const { addTask } = store.actions;

export default store;

Étape 8 : Créer le fichier index.js

// src/index.js
import React from 'react';
import ReactDOM from 'react-dom/client';
import App from './App';
import store from './store';
import { Provider } from 'react-redux';

const root = ReactDOM.createRoot(document.getElementById('root'));
root.render(
    <Provider store={store}>
        <App />
    </Provider>
);

Étape 9 : Installer et configurer le serveur de développement

Créez un fichier server.js pour gérer les requêtes côté serveur.

// server.js
const express = require('express');
const path = require('path');

const app = express();
const PORT = process.env.PORT || 3000;

// Serve the React app static files
app.use(express.static(path.join(__dirname, '../build')));

// Handle all GET requests with index.html
app.get('*', (req, res) => {
    res.sendFile(path.join(__dirname, '../build', 'index.html'));
});

app.listen(PORT, () => {
    console.log(`Server is running on port ${PORT}`);
});

Étape 10 : Construire le projet React

Construisez votre application React pour générer les fichiers statiques.

## Construire l'application React
npm run build

Étape 11 : Installer Railway CLI et configurer votre projet

Installez la CLI de Railway si elle n'est pas déjà installée :

## Installer Railway CLI
curl -fsSL https://get.railway.app | bash
railway login

Créez un nouveau service sur Railway :

## Créer un nouveau service
railway init

Suivez les instructions pour configurer votre projet.

Étape 12 : Déployer l'application

Déployez votre application sur Railway :

## Déployer le projet
railway up

Erreurs fréquentes et debugging

1. Le serveur ne s'établit pas

Message d'erreur :

Error: listen EADDRINUSE: address already in use :::3000

Code incorrect :

// server.js
const express = require('express');
const path = require('path');

const app = express();
app.use(express.static(path.join(__dirname, '../build')));

app.get('*', (req, res) => {
    res.sendFile(path.join(__dirname, '../build', 'index.html'));
});

app.listen(3000, () => {
    console.log(`Server is running on port 3000`);
});

Code correct :

// server.js
const express = require('express');
const path = require('path');

const app = express();
app.use(express.static(path.join(__dirname, '../build')));

app.get('*', (req, res) => {
    res.sendFile(path.join(__dirname, '../build', 'index.html'));
});

app.listen(0, () => {
    console.log(`Server is running on port ${app.address().port}`);
});

2. Le déploiement sur Railway échoue

Message d'erreur :

Error: Failed to build project

Code incorrect :

## Construire l'application React
npm run build

Code correct :

## Construire l'application React avec une configuration spécifique pour Railway
npm run build -- --public-path /

3. Les fichiers statiques ne sont pas trouvés

Message d'erreur :

Error: Cannot find module './path/to/static/file'

Code incorrect :

// server.js
const express = require('express');
const path = require('path');

const app = express();
app.use(express.static(path.join(__dirname, '../build')));

app.get('*', (req, res) => {
    res.sendFile(path.join(__dirname, '../build', 'index.html'));
});

app.listen(3000, () => {
    console.log(`Server is running on port 3000`);
});

Code correct :

// server.js
const express = require('express');
const path = require('path');

const app = express();
app.use(express.static(path.join(__dirname, '../build')));

app.get('*', (req, res) => {
    res.sendFile(path.join(__dirname, '../build', 'index.html'));
});

app.listen(0, () => {
    console.log(`Server is running on port ${app.address().port}`);
});

Pour aller plus loin

1. Utiliser des environnements de développement et de production distincts

Créez des fichiers .env pour les variables d'environnement spécifiques aux différents environnements.

## .env.development
REACT_APP_API_URL=http://localhost:5000/api

## .env.production
REACT_APP_API_URL=https://api.yourdomain.com/api

2. Optimiser les performances de l'application

Utilisez des techniques comme la lazy loading, le code splitting et la minification pour améliorer les performances de votre application.

// src/App.jsx
import React from 'react';
import { Suspense } from 'react';

const TaskList = React.lazy(() => import('./components/TaskList'));

const App = () => {
    return (
        <div className="App">
            <Suspense fallback={<div>Loading...</div>}>
                <TaskList />
            </Suspense>
        </div>
    );
};

export default App;

3. Utiliser une base de données

Intégrez une base de données (comme MongoDB ou PostgreSQL) pour stocker et récupérer les tâches.

// src/store.js
import { configureStore } from '@reduxjs/toolkit';
import taskReducer from './features/taskSlice';

const store = configureStore({
    reducer: {
        tasks: taskReducer,
    },
});

export default store;

Défi pratique

Créez un mini-projet réaliste : une application de gestion d'événements. Cette application devrait permettre aux utilisateurs de créer, modifier et supprimer des événements, ainsi que de les afficher dans une liste.

Étapes à suivre :

  1. Créez le projet React.
  2. Installez et configurez Redux pour gérer l'état global.
  3. Créer les composants pour ajouter, modifier et supprimer des événements.
  4. Construisez l'application React avec une configuration spécifique pour Railway.
  5. Déployez l'application sur Railway.

En suivant ce tutoriel, vous aurez appris comment déployer une application React sur Railway, de la conception à la mise en production. N'hésitez pas à explorer les autres concepts avancés mentionnés pour approfondir votre compréhension et améliorer vos compétences en développement web moderne.

Besoin d'aide sur React ?

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

Recevoir des conseils

Questions frequentes

Comment installer Node.js sur mon ordinateur ?
Vous pouvez télécharger Node.js à partir du site officiel (https://nodejs.org/). Choisissez la version LTS recommandée et suivez les instructions d'installation pour votre système d'exploitation.
Quelle est la différence entre create-react-app et Railway App ?
create-react-app est un outil de ligne de commande qui permet de créer rapidement une application React. Railway App, en revanche, est un service de déploiement d'applications qui prend en charge divers frameworks et langages de programmation, dont React.
Comment configurer mon projet React pour le déployer sur Railway ?
Pour déployer votre projet React sur Railway, assurez-vous que vous avez une configuration correcte dans le fichier `railway.toml`. Vous devrez spécifier un buildpack approprié, par exemple 'static', et indiquer la commande de démarrage de votre application. Consultez la documentation de Railway pour plus de détails.

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.