NestJS Namecheap Paylaşımlı Hosting'e Nasıl Deploy Edilir

NestJS'i Namecheap paylaşımlı hosting'e deploy etmek, statik bir siteyi veya bir PHP uygulamasını deploy etmek gibi değildir. Sadece dosyaları yükleyip çalışmasını bekleyemezsiniz.

TypeScript'i JavaScript'e derlemeli, production bağımlılıklarını yüklemeli ve süreci Passenger aracılığıyla yönetmek için cPanel kullanmalısınız.

Doğru yöntemi bulmadan önce boş klasörler, eksik build dosyaları ve kopan Redis bağlantılarıyla karşılaştım. İşte kanıtlanmış iş akışı.

Kurulum Mantığı

İstek şu yolu izler: • Tarayıcı veya API istemcisi • Alan adı ve HTTPS • Namecheap üzerindeki Apache / Passenger • app.js (köprü) • dist/main.js (derlenmiş kod) • NestJS uygulaması

Temel Gereksinimler

• Node.js desteği olan bir Namecheap hosting hesabı • cPanel ve SSH/Terminal erişimi • Çalışan bir NestJS projesi • Veritabanınız veya Redis'iniz için production kimlik bilgileri

Adım 1: Kodunuzu hazırlayın

Sabitlenmiş (hard-coded) bir port kullanmayın. src/main.ts dosyanızda process.env.PORT kullanın:

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

Adım 2: Bağımlılıkları düzenleyin

@nestjs/common ve @nestjs/core gibi çalışma zamanı (runtime) paketlerini package.json içindeki dependencies bölümüne taşıyın. Eğer devDependencies içinde kalırlarsa, uygulamanız production ortamında çökecektir.

Adım 3: Build edin ve Köprüyü Oluşturun

Namecheap TypeScript değil, JavaScript çalıştırır. • Yerel olarak npm run build komutunu çalıştırın. • dist/main.js dosyasının varlığını doğrulayın. • Proje kök dizininizde şu satırı içeren bir app.js dosyası oluşturun: require('./dist/main');

Bu app.js dosyası Passenger için giriş noktası (entry point) görevi görür.

Adım 4: Dağıtım Stratejisi

En güvenli yol, yerel olarak build alıp çıktıları (artifacts) yüklemektir: • app.js dosyasını yükleyin • dist/ klasörünü yükleyin • package.json ve package-lock.json dosyalarını yükleyin • Namecheap üzerinde şu komutu çalıştırın: npm ci --omit=dev

Yerel node_modules klasörünüzü asla yüklemeyin. Bilgisayarınızda oluşturulan yerel (native) modüller bir Linux sunucusunda çalışmayacaktır.

Adım 5: cPanel'i Yapılandırın

cPanel'de Setup Node.js App bölümüne gidin: • Doğru Node.js sürümünü seçin. • Modu Production olarak ayarlayın. • Application root kısmını klasörünüz olarak ayarlayın. • Application startup file kısmını app.js olarak ayarlayın.

Adım 6: Ortam Değişkenleri

Gizli bilgilerinizi (DATABASE_URL veya API anahtarları gibi) doğrudan cPanel Node.js arayüzüne ekleyin. Kök dizinde bir .env dosyası da kullanabilirsiniz, ancak bunun dist klasörünün içinde olmadığından emin olun. Değişiklikleri yaptıktan sonra uygulamayı yeniden başlatın.

Yaygın Sorun Giderme

EADDRINUSE: Muhtemelen çalışan manuel bir işleminiz var. Uygulamayı yönetmesi için Passenger'a izin verin. • Cannot find module: Build dosyanız eksik veya app.js içindeki yol yanlış. • Redis connection failed: Namecheap'in Redis portunuz üzerinden dışa giden (outbound) bağlantılara izin verip vermediğini kontrol edin. Namecheap desteğinden bu portu açmalarını istemeniz gerekebilir.

Kaynak: https://dev.to/adesoji/how-to-deploy-and-run-a-nestjs-app-on-namecheap-shared-hosting-5c45