您的TypeScript代码已准备好征服世界?是时候将其投入生产环境了
\n\n您编写了完美的TypeScript应用。本地运行一切顺畅,类型严格,代码优美。但一旦面临“如何在服务器上运行它?”这个问题,许多开发者就会陷入困境。熟悉吗?
\n\n部署TypeScript应用并非火箭科学,但也不是“直接复制文件夹”那么简单。在本文中,我们将探讨三种主要方法:经典的VPS、现代的Docker和云平台。您将学习如何正确构建TypeScript项目、配置环境以及自动化更新部署。开始吧!
\n\n步骤1:准备TypeScript应用进行部署
\n\n在考虑服务器之前,需要确保您的应用已准备好脱离本地环境运行。TypeScript是一种编译为JavaScript的扩展。在服务器上,Node.js无法直接理解.ts文件(除非您使用ts-node,但不建议在生产环境中使用)。
\n\n项目构建
\n\n确保您的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\n命令npm run build将创建包含已编译JS代码的dist文件夹。我们将部署这个文件夹。
提示:在tsconfig.json中添加"outDir": "./dist",并为node_modules配置exclude:
{\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\n方法1:经典VPS——完全控制
\n\nVPS(虚拟专用服务器)是一个租用的服务器,您在其中拥有完全的控制权。适用于需要完全控制环境的项目。我们以Ubuntu 22.04为例进行部署。
\n\n服务器配置
\n\n- \n
- 通过SSH连接:
ssh root@您的_IP\n - 更新软件包:
apt update && apt upgrade -y\n - 安装Node.js 20.x:\n
curl -fsSL https://deb.nodesource.com/setup_20.x | bash - && apt install -y nodejs\n \n - 安装PM2——Node.js进程管理器:\n
npm install -g pm2\n \n
应用部署
\n\n最简单的方法是通过SCP或Git复制文件。推荐使用Git:
\n\ngit clone https://github.com/您的仓库/项目.git /var/www/myapp\ncd /var/www/myapp\nnpm install\nnpm run build\npm2 start dist/index.js --name "myapp"\npm2 save\npm2 startup\n\n重要:配置Nginx作为反向代理,使应用可以通过80端口访问:
\n\nserver {\n listen 80;\n server_name 您的域名.ru;\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\n别忘了通过Certbot配置SSL——这是免费的,并且对于现代网络来说是必需的。
\n\n方法2:Docker——容器化实现可重现性
\n\nDocker解决了VPS的主要问题:“在我的机器上能运行!”。容器包含所有必要内容——Node.js、依赖项、编译后的代码。在任何操作系统上环境都是相同的。
\n\nTypeScript的Dockerfile
\n\n创建多阶段构建——这可以减小最终镜像的大小:
\n\n# 阶段1:构建TypeScript\nFROM node:20-alpine AS builder\nWORKDIR /app\nCOPY package*.json ./\nRUN npm ci\nCOPY . .\nRUN npm run build\n\n# 阶段2:生产镜像