Как развернуть 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
