Деплой TypeScript приложения на VPS: пошаговое руководство от А до Я

Онлайн-тренажер Python для начинающих

Изучайте Python легко и без перегрузки теорией. Решайте практические задачи с автоматической проверкой, получайте подсказки на русском языке и пишите код прямо в браузере — без необходимости что-либо устанавливать.

Начать курс

Деплой TypeScript приложения на VPS: пошаговое руководство от А до Я

Разработка на TypeScript — это современный стандарт для создания надежных и масштабируемых веб-приложений. Однако после написания кода встает вопрос: как правильно развернуть его на реальном сервере? В этой статье мы разберем полный цикл деплоя TypeScript приложения на VPS (Virtual Private Server). Вы узнаете, как настроить окружение, скомпилировать TypeScript в JavaScript, организовать автозапуск с помощью PM2 и настроить обратный прокси через Nginx. Материал рассчитан на разработчиков, которые уже имеют базовое понимание TypeScript и Linux.

1. Подготовка VPS и установка необходимого ПО

Первый шаг — подготовка сервера. Мы будем использовать Ubuntu 22.04 LTS, так как это одна из самых стабильных и популярных ОС для VPS. Подключитесь к серверу через SSH:

ssh root@ваш-ip-сервера

Обновите пакетный менеджер и установите Node.js (рекомендуется LTS версия) вместе с менеджером пакетов npm:

apt update && apt upgrade -y
curl -fsSL https://deb.nodesource.com/setup_20.x | bash -
apt install -y nodejs git nginx

Проверьте установку:

node -v   # v20.x.x
npm -v    # 10.x.x

Теперь установим глобально TypeScript и PM2 (процесс-менеджер для Node.js):

npm install -g typescript pm2

Важно: TypeScript компилируется в JavaScript, поэтому на сервере не обязательно иметь сам TypeScript в рантайме — достаточно скомпилировать код локально или на сервере перед запуском. Однако глобальная установка ts-node может пригодиться для отладки.

2. Компиляция TypeScript и настройка package.json

Предположим, ваше приложение имеет следующую структуру:

my-ts-app/
├── src/
│   ├── index.ts
│   ├── routes.ts
│   └── utils.ts
├── package.json
├── tsconfig.json
└── .gitignore

Файл tsconfig.json должен быть настроен для production сборки. Пример конфигурации:

{
  "compilerOptions": {
    "target": "ES2020",
    "module": "commonjs",
    "outDir": "./dist",
    "rootDir": "./src",
    "strict": true,
    "esModuleInterop": true,
    "skipLibCheck": true,
    "forceConsistentCasingInFileNames": true,
    "resolveJsonModule": true
  },
  "include": ["src/**/*"],
  "exclude": ["node_modules", "dist", "tests"]
}

Добавьте в package.json скрипты для сборки и запуска:

{
  "name": "my-ts-app",
  "version": "1.0.0",
  "scripts": {
    "build": "tsc",
    "start": "node dist/index.js",
    "dev": "ts-node src/index.ts"
  },
  "dependencies": {
    "express": "^4.18.2"
  },
  "devDependencies": {
    "typescript": "^5.3.3",
    "@types/express": "^4.17.21",
    "ts-node": "^10.9.2"
  }
}

Теперь, когда вы запускаете npm run build, TypeScript компилирует файлы из папки src в папку dist. Пример простого сервера на Express (файл src/index.ts):

import express, { Request, Response } from 'express';

const app = express();
const PORT = process.env.PORT || 3000;

app.get('/', (req: Request, res: Response) => {
  res.send('TypeScript приложение работает на VPS!');
});

app.listen(PORT, () => {
  console.log(`Сервер запущен на порту ${PORT}`);
});

3. Клонирование репозитория и сборка на сервере

Скопируйте ваше приложение на сервер. Самый удобный способ — через Git. Если ваш код хранится в GitHub/GitLab, выполните на сервере:

cd /var/www
git clone https://github.com/ваш-username/my-ts-app.git
cd my-ts-app

Установите зависимости и выполните сборку:

npm install
npm run build

После этого в папке dist появятся скомпилированные .js файлы. Проверьте, что сборка прошла успешно:

ls dist/
# index.js  routes.js  utils.js

Теперь можно запустить приложение вручную для теста:

node dist/index.js

Откройте второй терминал и выполните curl http://localhost:3000 — вы должны увидеть ответ сервера. Если всё работает, остановите процесс (Ctrl+C) и переходите к настройке PM2.

4. Настройка PM2 для автозапуска и мониторинга

PM2 — это продвинутый процесс-менеджер для Node.js приложений. Он обеспечивает автоматический перезапуск при падении, логирование и управление несколькими процессами. Запустите ваше приложение через PM2:

pm2 start dist/index.js --name "my-ts-app"

Проверьте статус:

pm2 status
# ┌─────┬──────────────┬──────────┬──────┬───────────┬──────────┐
# │ id │ name         │ mode     │ ↺    │ status    │ cpu      │
# ├─────┼──────────────┼──────────┼──────┼───────────┼──────────┤
# │ 0  │ my-ts-app    │ fork     │ 0    │ online    │ 0%       │
# └─────┴──────────────┴──────────┴──────┴───────────┴──────────┘

Настройте автозапуск PM2 при перезагрузке сервера:

pm2 startup systemd

Скопируйте и выполните команду, которая появится в выводе (обычно это что-то вроде sudo env PATH=$PATH:/usr/bin pm2 startup systemd -u root --hp /root). Затем сохраните список процессов:

pm2 save

Теперь ваше приложение будет автоматически запускаться при старте VPS. Для просмотра логов используйте pm2 logs my

Блоги

Рекомендаций по книгам