Як розгорнути NestJS на спільному хостингу Namecheap

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

Ви повинні скомпілювати TypeScript у JavaScript, встановити виробничі залежності (production dependencies) та використовувати cPanel для керування процесом через Passenger.

Перш ніж я знайшов правильний шлях, я стикався з порожніми папками, відсутністю файлів збірки та розірваними з'єднаннями з Redis. Ось перевірений робочий процес.

Логіка налаштування

Запит проходить таким шляхом: • Браузер або API-клієнт • Домен та HTTPS • Apache / Passenger на Namecheap • app.js (міст) • dist/main.js (скомпілований код) • NestJS додаток

Основні вимоги

• Акаунт хостингу Namecheap із підтримкою Node.js • Доступ до cPanel та SSH/Terminal • Працюючий NestJS проєкт • Виробничі облікові дані для вашої бази даних або 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 packages), такі як @nestjs/common та @nestjs/core, у розділ dependencies у package.json. Якщо вони залишаться в devDependencies, ваш додаток перестане працювати у виробничому середовищі.

Крок 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