Introdução: do desenvolvimento à produção em VPS
A implatação de uma aplicação TypeScript em VPS (Virtual Private Server) é uma etapa fundamental no ciclo de vida de qualquer projeto web. Diferentemente da simples hospedagem em shared-hosting, a VPS oferece controle total sobre o ambiente, o que é essencial para aplicações TypeScript modernas que utilizam Node.js, Express, NestJS ou Next.js.
Neste artigo, abordaremos o processo avançado de implantação: desde a compilação do TypeScript até a configuração do ambiente de produção com reinicialização automática, balanceamento de carga e monitoramento. Você aprenderá como transformar código bruto em um serviço estável e funcional.
1. Preparando a aplicação TypeScript para produção
1.1. Configuração de build e configuração
O primeiro passo é garantir que seu tsconfig.json esteja otimizado para produção. Aqui está a configuração recomendada:
{ "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"]}Adicione scripts de build e inicialização no package.json:
{ "scripts": { "build": "tsc", "start": "node dist/index.js", "dev": "ts-node src/index.ts", "clean": "rm -rf dist" }}1.2. Gerenciamento de variáveis de ambiente
Utilize arquivos .env com a biblioteca dotenv. Para produção, crie um arquivo separado .env.production:
NODE_ENV=productionPORT=3000DB_HOST=localhostDB_PORT=5432DB_NAME=myapp_prodDB_USER=app_userDB_PASSWORD=secure_password_hereREDIS_URL=redis://localhost:6379Carregue a configuração de acordo com o ambiente:
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. Configuração da VPS e implantação da aplicação
2.1. Configuração básica do servidor
Após adquirir a VPS (recomendamos Ubuntu 22.04 LTS), realize a configuração inicial:
- Atualização de pacotes:
sudo apt update && sudo apt upgrade -y - Instalação do Node.js 20 LTS:
curl -fsSL https://deb.nodesource.com/setup_20.x | sudo -E bash - && sudo apt install -y nodejs - Instalação do Git:
sudo apt install git -y - Criação de usuário:
sudo adduser deployer && sudo usermod -aG sudo deployer
2.2. Clonagem e build do projeto
Conecte-se ao servidor via SSH e execute:
# Alternar para o usuáriosudo -i -u deployercd ~
# Clonar o repositóriogit clone https://github.com/your-username/your-app.gitcd your-app
# Instalar dependênciasnpm ci --only=production
# Compilar TypeScriptnpm run build
# Criar arquivo .env para produçãonano .env.production2.3. Configuração do PM2 para gerenciamento de processos
PM2 é um