Как развернуть NestJS на shared-хостинге Namecheap

Развертывание NestJS на shared-хостинге Namecheap отличается от развертывания статического сайта или PHP-приложения. Вы не можете просто загрузить файлы и ожидать, что всё заработает.

Вам необходимо скомпилировать TypeScript в JavaScript, установить production-зависимости и использовать cPanel для управления процессом через Passenger.

Прежде чем я нашел правильный способ, я сталкивался с пустыми папками, отсутствующими файлами сборки и обрывами соединений с Redis. Вот проверенный рабочий процесс.

Логика настройки

Запрос проходит по следующему пути: • Браузер или API-клиент • Домен и HTTPS • Apache / Passenger на Namecheap • app.js (связующее звено) • dist/main.js (скомпилированный код) • Приложение NestJS

Основные требования

• Аккаунт хостинга Namecheap с поддержкой Node.js • Доступ к cPanel и SSH/Terminal • Рабочий проект NestJS • Production-учетные данные для вашей базы данных или Redis

Шаг 1: Подготовьте код

Не используйте жестко заданный порт. В вашем src/main.ts используйте process.env.PORT:

async function bootstrap() {
  const app = await NestFactory.create(AppModule);
  await app.listen(process.env.PORT || 4000);
}

Шаг 2: Организуйте зависимости

Перенесите runtime-пакеты, такие как @nestjs/common и @nestjs/core, в раздел dependencies в package.json. Если они останутся в devDependencies, ваше приложение упадет в production-среде.

Шаг 3: Сборка и создание связующего звена

Namecheap запускает JavaScript, а не TypeScript. • Запустите npm run build локально. • Убедитесь, что файл dist/main.js существует. • Создайте файл app.js в корне вашего проекта со следующей строкой: require('./dist/main');

Этот app.js служит точкой входа для Passenger.

Шаг 4: Стратегия развертывания

Самый безопасный способ — собрать проект локально и загрузить артефакты: • Загрузите app.js • Загрузите папку dist/ • Загрузите package.json и package-lock.json • На Namecheap выполните: npm ci --omit=dev

Никогда не загружайте локальную папку node_modules. Нативные модули, собранные на вашем компьютере, не будут работать на Linux-сервере.

Шаг 5: Настройка cPanel

Перейдите в "Setup Node.js App" в cPanel: • Выберите правильную версию Node.js. • Установите режим (mode) на Production. • Установите Application root на вашу папку. • Установите Application startup file на app.js.

Шаг 6: Переменные окружения

Добавьте ваши секреты (например, DATABASE_URL или API-ключи) непосредственно в интерфейсе Node.js в cPanel. Вы также можете использовать файл .env в корне, но убедитесь, что он не находится внутри папки dist. Перезапустите приложение после внесения изменений.

Распространенные проблемы и их решение

EADDRINUSE: Вероятно, запущен какой-то процесс вручную. Позвольте Passenger управлять приложением. • Cannot find module: Ваша сборка отсутствует или путь в app.js указан неверно. • Redis connection failed: Проверьте, разрешает ли Namecheap исходящие соединения на ваш порт Redis. Возможно, вам придется обратиться в службу поддержки Namecheap, чтобы они его открыли.

Источник: https://dev.to/adesoji/how-to-deploy-and-run-a-nestjs-app-on-namecheap-shared-hosting-5c45