Implantação de aplicação TypeScript em VPS: guia passo a passo do A ao Z
\n\nDesenvolver em TypeScript é o padrão moderno para criar aplicações web confiáveis e escaláveis. No entanto, após escrever o código, surge a questão: como implantá-lo corretamente em um servidor real? Neste artigo, abordaremos o ciclo completo de implantação de uma aplicação TypeScript em VPS (Virtual Private Server). Você aprenderá como configurar o ambiente, compilar TypeScript para JavaScript, organizar a inicialização automática com PM2 e configurar um proxy reverso com Nginx. O material é voltado para desenvolvedores que já possuem conhecimento básico de TypeScript e Linux.
\n\n1. Preparação do VPS e instalação do software necessário
\n\nO primeiro passo é preparar o servidor. Usaremos Ubuntu 22.04 LTS, pois é um dos sistemas operacionais mais estáveis e populares para VPS. Conecte-se ao servidor via SSH:
\n\nssh root@seu-ip-do-servidor\n\nAtualize o gerenciador de pacotes e instale o Node.js (recomenda-se a versão LTS) junto com o gerenciador de pacotes npm:
\n\napt update && apt upgrade -y\ncurl -fsSL https://deb.nodesource.com/setup_20.x | bash -\napt install -y nodejs git nginx\n\nVerifique a instalação:
\n\nnode -v # v20.x.x\nnpm -v # 10.x.x\n\nAgora instale globalmente o TypeScript e o PM2 (gerenciador de processos para Node.js):
\n\nnpm install -g typescript pm2\n\nImportante: O TypeScript é compilado para JavaScript, portanto, não é necessário ter o TypeScript em tempo de execução no servidor — basta compilar o código localmente ou no servidor antes de executar. No entanto, a instalação global do ts-node pode ser útil para depuração.
\n\n2. Compilação do TypeScript e configuração do package.json
\n\nSuponha que sua aplicação tenha a seguinte estrutura:
\n\nmy-ts-app/\n├── src/\n│ ├── index.ts\n│ ├── routes.ts\n│ └── utils.ts\n├── package.json\n├── tsconfig.json\n└── .gitignore\n\nO arquivo tsconfig.json deve ser configurado para a build de produção. Exemplo de configuração:
{\n "compilerOptions": {\n "target": "ES2020",\n "module": "commonjs",\n "outDir": "./dist",\n "rootDir": "./src",\n "strict": true,\n "esModuleInterop": true,\n "skipLibCheck": true,\n "forceConsistentCasingInFileNames": true,\n "resolveJsonModule": true\n },\n "include": ["src/**/*"],\n "exclude": ["node_modules", "dist", "tests"]\n}\n\nAdicione scripts de build e execução no package.json:
{\n "name": "my-ts-app",\n "version": "1.0.0",\n "scripts": {\n "build": "tsc",\n "start": "node dist/index.js",\n "dev": "ts-node src/index.ts"\n },\n "dependencies": {\n "express": "^4.18.2"\n },\n "devDependencies": {\n "typescript": "^5.3.3",\n "@types/express": "^4.17.21",\n "ts-node": "^10.9.2"\n }\n}\n\nAgora, ao executar npm run build, o TypeScript compila os arquivos da pasta src para a pasta dist. Exemplo de um servidor simples com Express (arquivo src/index.ts):
import express, { Request, Response } from 'express';\n\nconst app = express();\nconst PORT = process.env.PORT || 3000;\n\napp.get('/', (req: Request, res: Response) => {\n res.send('Aplicação TypeScript rodando no VPS!');\n});\n\napp.listen(PORT, () => {\n console.log(`Servidor rodando na porta ${PORT}`);\n});\n\n3. Clonagem do repositório e build no servidor
\n\nCopie sua aplicação para o servidor. A maneira mais conveniente é via Git. Se seu código estiver no GitHub/GitLab, execute no servidor:
\n\ncd /var/www\ngit clone https://github.com/seu-username/my-ts-app.git\ncd my-ts-app\n\nInstale as dependências e execute o build:
\n\nnpm install\nnpm run build\n\nApós isso, os arquivos .js compilados aparecerão na pasta dist