Votre code TypeScript est prêt à conquérir le monde ? Il est temps de le mettre en production
\n\nVous avez écrit l'application TypeScript parfaite. Tout fonctionne localement, les types sont stricts, le code est beau. Mais dès que la question « Comment l'exécuter sur un serveur ? » se pose, de nombreux développeurs sont perplexes. Vous reconnaissez-vous ?
\n\nLe déploiement d'applications TypeScript n'est pas une rocket science, mais ce n'est pas non plus « il suffit de copier le dossier ». Dans cet article, nous aborderons trois approches principales : le VPS classique, le Docker moderne et les plateformes cloud. Vous apprendrez à compiler correctement un projet TypeScript, à configurer l'environnement et à automatiser le déploiement des mises à jour. C'est parti !
\n\nÉtape 1 : Préparation de l'application TypeScript pour le déploiement
\n\nAvant de penser aux serveurs, vous devez vous assurer que votre application est prête à fonctionner en dehors de l'environnement local. TypeScript est un sur-ensemble qui se compile en JavaScript. Sur le serveur, Node.js ne comprend pas directement les fichiers .ts (sauf si vous utilisez ts-node, ce qui n'est pas recommandé pour la production).
\n\nCompilation du projet
\n\nAssurez-vous que les scripts corrects sont définis dans votre package.json :
{\n "scripts": {\n "build": "tsc",\n "start": "node dist/index.js",\n "dev": "ts-node-dev --respawn src/index.ts"\n },\n "main": "dist/index.js"\n}\n\nLa commande npm run build créera un dossier dist avec le code JS prêt. C'est ce dossier que nous allons déployer.
Conseil : ajoutez "outDir": "./dist" dans tsconfig.json et configurez exclude pour node_modules :
{\n "compilerOptions": {\n "outDir": "./dist",\n "rootDir": "./src",\n "target": "ES2020",\n "module": "commonjs",\n "strict": true,\n "esModuleInterop": true\n },\n "include": ["src/**/*"],\n "exclude": ["node_modules", "dist"]\n}\n\nMéthode 1 : VPS classique — contrôle total
\n\nLe VPS (Virtual Private Server) est un serveur loué où vous êtes le maître absolu. Il convient aux projets nécessitant un contrôle total sur l'environnement. Voyons le déploiement sur Ubuntu 22.04.
\n\nConfiguration du serveur
\n\n- \n
- Connexion en SSH :
ssh root@votre_IP\n - Mise à jour des paquets :
apt update && apt upgrade -y\n - Installation de Node.js 20.x : \n
curl -fsSL https://deb.nodesource.com/setup_20.x | bash - && apt install -y nodejs\n \n - Installation de PM2 — gestionnaire de processus pour Node.js :\n
npm install -g pm2\n \n
Déploiement de l'application
\n\nLa méthode la plus simple est de copier les fichiers via SCP ou Git. Je recommande Git :
\n\ngit clone https://github.com/votre-repository/projet.git /var/www/monapp\ncd /var/www/monapp\nnpm install\nnpm run build\npm2 start dist/index.js --name "monapp"\npm2 save\npm2 startup\n\nImportant : configurez Nginx comme reverse proxy pour que l'application soit accessible sur le port 80 :
\n\nserver {\n listen 80;\n server_name votre-domaine.fr;\n\n location / {\n proxy_pass http://localhost:3000;\n proxy_http_version 1.1;\n proxy_set_header Upgrade $http_upgrade;\n proxy_set_header Connection 'upgrade';\n proxy_set_header Host $host;\n proxy_cache_bypass $http_upgrade;\n }\n}\n\nN'oubliez pas de configurer SSL via Certbot — c'est gratuit et indispensable pour le web moderne.
\n\nMéthode 2 : Docker — conteneurisation pour la reproductibilité
\n\nDocker résout le problème principal du VPS : « Ça marche sur ma machine ! ». Le conteneur contient tout le nécessaire — Node.js, dépendances, code compilé. L'environnement est identique sur n'importe quel OS.
\n\nDockerfile pour TypeScript
\n\nCréez une compilation multi-étapes (multi-stage build) — cela réduit l'image finale :
\n\n# Étape 1 : compilation TypeScript\nFROM node:20-alpine AS builder\nWORKDIR /app\nCOPY package*.json ./\nRUN npm ci\nCOPY . .\nRUN npm run build\n\n# Étape 2 : image de production