引言:从开发到VPS生产环境
在VPS(虚拟专用服务器)上部署TypeScript应用是任何Web项目生命周期中的关键阶段。与简单的共享主机不同,VPS提供了对环境的完全控制,这对于使用Node.js、Express、NestJS或Next.js的现代TypeScript应用至关重要。
在本文中,我们将探讨高级部署流程:从TypeScript编译到配置具有自动重启、负载均衡和监控的生产环境。您将学习如何将原始代码转变为稳定运行的服务。
1. 准备TypeScript应用投入生产
1.1. 配置构建和配置
第一步是确保您的tsconfig.json针对生产环境进行了优化。以下是推荐的配置:
{ "compilerOptions": { "target": "ES2020", "module": "commonjs", "lib": ["ES2020"], "outDir": "./dist", "rootDir": "./src", "strict": true, "esModuleInterop": true, "skipLibCheck": true, "forceConsistentCasingInFileNames": true, "resolveJsonModule": true, "declaration": true, "declarationMap": true, "sourceMap": true }, "include": ["src/**/*"], "exclude": ["node_modules", "dist", "tests"]}在package.json中添加构建和启动脚本:
{ "scripts": { "build": "tsc", "start": "node dist/index.js", "dev": "ts-node src/index.ts", "clean": "rm -rf dist" }}1.2. 管理环境变量
使用.env文件和dotenv库。为生产环境创建单独的.env.production文件:
NODE_ENV=productionPORT=3000DB_HOST=localhostDB_PORT=5432DB_NAME=myapp_prodDB_USER=app_userDB_PASSWORD=secure_password_hereREDIS_URL=redis://localhost:6379根据环境加载配置:
import dotenv from 'dotenv';import path from 'path';
const envFile = process.env.NODE_ENV === 'production' ? '.env.production' : '.env.development';
dotenv.config({ path: path.resolve(__dirname, `../${envFile}`) });
export const config = { port: parseInt(process.env.PORT || '3000', 10), db: { host: process.env.DB_HOST || 'localhost', port: parseInt(process.env.DB_PORT || '5432', 10), name: process.env.DB_NAME || 'myapp', user: process.env.DB_USER || 'user', password: process.env.DB_PASSWORD || '', }, redis: { url: process.env.REDIS_URL || 'redis://localhost:6379', }, isProduction: process.env.NODE_ENV === 'production',};2. 配置VPS并部署应用
2.1. 服务器基本配置
购买VPS(推荐Ubuntu 22.04 LTS)后,执行初始配置:
- 更新软件包:
sudo apt update && sudo apt upgrade -y - 安装Node.js 20 LTS:
curl -fsSL https://deb.nodesource.com/setup_20.x | sudo -E bash - && sudo apt install -y nodejs - 安装Git:
sudo apt install git -y - 创建用户:
sudo adduser deployer && sudo usermod -aG sudo deployer
2.2. 克隆并构建项目
通过SSH连接到服务器并执行:
# 切换到用户sudo -i -u deployercd ~
# 克隆仓库git clone https://github.com/your-username/your-app.gitcd your-app
# 安装依赖npm ci --only=production
# 构建TypeScriptnpm run build
# 创建生产环境.env文件nano .env.production2.3. 配置PM2管理进程
PM2是