从本地开发到生产环境:2024年TypeScript应用部署指南

面向初学者的在线Python训练器

轻松学习Python,无需理论负担。在浏览器中直接解决带自动检查的实践任务,无需安装任何东西。

开始课程

您的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\n
{\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文件夹。我们将部署这个文件夹。

\n\n

提示:在tsconfig.json中添加"outDir": "./dist",并为node_modules配置exclude:

\n\n
{\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\n

VPS(虚拟专用服务器)是一个租用的服务器,您在其中拥有完全的控制权。适用于需要完全控制环境的项目。我们以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

应用部署

\n\n

最简单的方法是通过SCP或Git复制文件。推荐使用Git:

\n\n
git 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\n
server {\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\n

Docker解决了VPS的主要问题:“在我的机器上能运行!”。容器包含所有必要内容——Node.js、依赖项、编译后的代码。在任何操作系统上环境都是相同的。

\n\n

TypeScript的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:生产镜像                

博客

书籍推荐