Introduction : du développement à la production sur VPS
\n\nLe déploiement d'une application TypeScript sur VPS (Virtual Private Server) est une étape clé du cycle de vie de tout projet web. Contrairement à un simple hébergement mutualisé, le VPS offre un contrôle total sur l'environnement, ce qui est essentiel pour les applications TypeScript modernes fonctionnant avec Node.js, Express, NestJS ou Next.js.
\n\nDans cet article, nous allons explorer le processus avancé de déploiement : de la compilation TypeScript à la configuration d'un environnement de production avec redémarrage automatique, équilibrage de charge et monitoring. Vous apprendrez à transformer du code brut en un service stable et fonctionnel.
\n\n1. Préparation de l'application TypeScript pour la production
\n\n1.1. Configuration de la compilation et de la configuration
\n\nLa première étape consiste à s'assurer que votre tsconfig.json est optimisé pour la production. Voici la configuration recommandée :
{\n "compilerOptions": {\n "target": "ES2020",\n "module": "commonjs",\n "lib": ["ES2020"],\n "outDir": "./dist",\n "rootDir": "./src",\n "strict": true,\n "esModuleInterop": true,\n "skipLibCheck": true,\n "forceConsistentCasingInFileNames": true,\n "resolveJsonModule": true,\n "declaration": true,\n "declarationMap": true,\n "sourceMap": true\n },\n "include": ["src/**/*"],\n "exclude": ["node_modules", "dist", "tests"]\n}\n\n\nAjoutez dans package.json les scripts de compilation et de lancement :
{\n "scripts": {\n "build": "tsc",\n "start": "node dist/index.js",\n "dev": "ts-node src/index.ts",\n "clean": "rm -rf dist"\n }\n}\n\n\n1.2. Gestion des variables d'environnement
\n\nUtilisez des fichiers .env avec la bibliothèque dotenv. Pour la production, créez un fichier séparé .env.production :
NODE_ENV=production\nPORT=3000\nDB_HOST=localhost\nDB_PORT=5432\nDB_NAME=myapp_prod\nDB_USER=app_user\nDB_PASSWORD=secure_password_here\nREDIS_URL=redis://localhost:6379\n\n\nChargez la configuration en fonction de l'environnement :
\n\nimport dotenv from 'dotenv';\nimport path from 'path';\n\nconst envFile = process.env.NODE_ENV === 'production' \n ? '.env.production' \n : '.env.development';\n\ndotenv.config({ path: path.resolve(__dirname, `../${envFile}`) });\n\nexport const config = {\n port: parseInt(process.env.PORT || '3000', 10),\n db: {\n host: process.env.DB_HOST || 'localhost',\n port: parseInt(process.env.DB_PORT || '5432', 10),\n name: process.env.DB_NAME || 'myapp',\n user: process.env.DB_USER || 'user',\n password: process.env.DB_PASSWORD || '',\n },\n redis: {\n url: process.env.REDIS_URL || 'redis://localhost:6379',\n },\n isProduction: process.env.NODE_ENV === 'production',\n};\n\n\n2. Configuration du VPS et déploiement de l'application
\n\n2.1. Configuration de base du serveur
\n\nAprès l'achat du VPS (nous recommandons Ubuntu 22.04 LTS), effectuez la configuration initiale :
\n\n- \n
- Mise à jour des paquets :
sudo apt update && sudo apt upgrade -y\n - Installation de Node.js 20 LTS :
curl -fsSL https://deb.nodesource.com/setup_20.x | sudo -E bash - && sudo apt install -y nodejs\n - Installation de Git :
sudo apt install git -y\n - Création d'un utilisateur :
sudo adduser deployer && sudo usermod -aG sudo deployer\n
2.2. Clonage et compilation du projet
\n\nConnectez-vous au serveur via SSH et exécutez :
\n\n# Passer à l'utilisateur\nsudo -i -u deployer\ncd ~\n\n# Cloner le dépôt\ngit clone https://github.com/your-username/your-app.git\ncd your-app\n\n# Installer les dépendances\nnpm ci --only=production\n\n# Compiler TypeScript\nnpm run build\n\n# Créer le fichier .env pour la production\nnano .env.production\n\n\n2.3. Configuration de PM2 pour la gestion des processus
\n\nPM2 est un