Деплой TypeScript приложения на VPS: пошаговое руководство
Вы написали крутое приложение на TypeScript. Локально всё работает идеально, но пора показать проект миру. Деплой на VPS (Virtual Private Server) — это логичный и гибкий шаг. В отличие от облачных платформ, VPS даёт полный контроль над окружением.
В этой статье мы разберём пошаговый процесс деплоя TypeScript-приложения на VPS. Мы будем использовать Node.js, PM2 для управления процессами и Nginx в качестве обратного прокси. Все примеры — на TypeScript.
Предполагается, что у вас есть базовые навыки работы с Linux и SSH.
1. Подготовка сервера и подключение
Первый шаг — аренда VPS (DigitalOcean, Vultr, Timeweb и т.д.) и подключение по SSH.
ssh root@ваш_ip_сервера
Сразу обновим пакеты и установим необходимые утилиты:
apt update && apt upgrade -y
apt install curl git nginx -y
Установим Node.js (рекомендуем LTS версию):
curl -fsSL https://deb.nodesource.com/setup_20.x | bash -
apt install -y nodejs
Проверим версии:
node -v
npm -v
2. Клонирование репозитория и сборка TypeScript
Теперь клонируем ваш проект. Для примера будем использовать простое Express-приложение на TypeScript:
git clone https://github.com/ваш_username/ваш_репозиторий.git
cd ваш_репозиторий
Установим зависимости:
npm install
TypeScript нужно скомпилировать в JavaScript. Обычно это делается командой:
npm run build
В package.json это должно быть прописано как:
{
"scripts": {
"build": "tsc",
"start": "node dist/index.js"
}
}
Проверьте, что в папке dist появились скомпилированные файлы.
3. Установка и настройка PM2
PM2 — это менеджер процессов для Node.js. Он перезапускает приложение при падении, поддерживает логи и кластеризацию.
Установим PM2 глобально:
npm install pm2 -g
Запустим приложение:
pm2 start dist/index.js --name "my-typescript-app"
Сохраним список процессов, чтобы PM2 восстанавливал их после перезагрузки сервера:
pm2 save
pm2 startup
PM2 выведет команду, которую нужно выполнить (обычно это systemctl enable pm2-root). Скопируйте и выполните её.
Проверить статус можно командой:
pm2 status
4. Настройка Nginx как обратного прокси
Nginx будет принимать запросы на 80 порту (HTTP) и перенаправлять их на ваше приложение (например, на порт 3000).
Создадим конфигурационный файл:
nano /etc/nginx/sites-available/my-typescript-app
Вставим следующий код (измените server_name на ваш домен или IP):
server {
listen 80;
server_name ваш_домен.ru www.ваш_домен.ru;
location / {
proxy_pass http://localhost:3000;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection 'upgrade';
proxy_set_header Host $host;
proxy_cache_bypass $http_upgrade;
}
}
Активируем сайт:
ln -s /etc/nginx/sites-available/my-typescript-app /etc/nginx/sites-enabled/
nginx -t
systemctl restart nginx
Теперь ваше приложение доступно по IP или домену.
5. Настройка HTTPS (SSL) с Certbot
Без HTTPS сейчас никуда. Используем Let's Encrypt и Certbot.
Установим Certbot:
apt install certbot python3-certbot-nginx -y
Запустим получение сертификата:
certbot --nginx -d ваш_домен.ru -d www.ваш_домен.ru
Следуйте инструкциям. Certbot автоматически обновит конфигурацию Nginx.
Проверьте автообновление:
certbot renew --dry-run
6. Автоматизация деплоя (опционально)
Чтобы не заходить на сервер каждый раз, можно настроить простой скрипт деплоя. Например, через GitHub Actions или bash-скрипт на сервере.
Создайте файл deploy.sh:
#!/bin/bash
cd /root/ваш_репозиторий
git pull origin main
npm install
npm run build
pm2 restart my-typescript-app
Дайте права на выполнение:
chmod +x deploy.sh
Теперь достаточно выполнить ./deploy.sh для обновления приложения.
Заключение
Мы разобрали полный цикл деплоя TypeScript-приложения на VPS: от настройки сервера до HTTPS. Основные шаги: подготовка сервера, сборка TypeScript, запуск через PM2, настройка Nginx и SSL.
Этот подход подходит для большинства Node.js проектов. Главные плюсы — полный контроль и низкая стоимость по сравнению с облачными платформами.
Если у вас возникли вопросы — пишите в комментариях. Удачи в деплое!