macOS’ta ServBay ile Yerel NestJS Projesi Oluşturma ve Çalıştırma
NestJS, yüksek performanslı ve ölçeklenebilir Node.js sunucu uygulamaları geliştirmek için kullanılan, TypeScript tabanlı, ilerlemeci bir Node.js framework’üdür. Angular’dan ilham alan modüler mimarisi ve bağımlılık enjeksiyonu (DI) modelini kullanır. NestJS, sürdürülebilir, test edilebilir ve yüksek derecede ayrıştırılmış karmaşık uygulamalar oluşturmak için güçlü araçlar ve özellikler sunar.
NestJS’in Temel Özellikleri ve Avantajları
- Modüler Mimari: Kodunuzu modüllerle organize ederek uygulamanın daha düzenli, anlaşılır ve bakımı kolay olmasını sağlar.
- Bağımlılık Enjeksiyonu: Güçlü ve kullanımı kolay bağımlılık enjeksiyonu sistemiyle kodun test edilebilirliğini ve sürdürülebilirliğini artırır.
- TypeScript Kullanımı: TypeScript’in statik tip kontrolü, arayüzleri ve modern JavaScript özelliklerinden tam anlamıyla faydalanılır; geliştirme verimliliği ve kod kalitesi artar, çalışma zamanı hataları azalır.
- Zengin Dekoratörler: Kontrolör, servis ve modül gibi öğeleri tanımlamak için dekoratörler kullanılır; kod daha anlaşılır ve niyet odaklı olur.
- Güçlü Ekosistem: NestJS, dinamik bir topluluğa ve çok sayıda üçüncü parti modül/eklenti desteğine sahiptir. TypeORM, Mongoose, GraphQL, WebSocket, cache ve doğrulama gibi sık kullanılan işlevler kolayca entegre edilebilir.
- Standartlara Dayalı: Express veya Fastify gibi olgun HTTP sunucu çatıları üzerine kuruludur; iyi bir uyumluluk ve performans sunar.
NestJS ile geliştiriciler, SOLID prensipleri ve tasarım kalıpları gibi en iyi backend geliştirme pratiklerini kullanarak yüksek performanslı, kurumsal web uygulamaları, API hizmetleri ya da mikroservisler oluşturabilirler.
ServBay ile NestJS Projesi Oluşturma ve Çalıştırma
ServBay, macOS için güçlü ve entegre bir yerel web geliştirme ortamı sağlar. Birden çok Node.js sürümünü, yaygın veritabanlarını ve web sunucularını bünyesinde barındırır. Bu rehberde, ServBay’in Node.js ortamı ve ‘Web Sitesi’ işlevini kullanarak bir NestJS projesi nasıl oluşturulur, çalıştırılır ve yapılandırılır gösterilecektir. ServBay’in ters proxy özelliği sayesinde, yerel NestJS uygulamanıza özel bir alan adıyla kolayca erişebilirsiniz.
Ön Koşullar
Başlamadan önce aşağıdakilerin hazır olduğundan emin olun:
- ServBay’in Kurulması: ServBay’i başarıyla macOS üzerine kurmuş olmalısınız.
- Node.js Paketinin Etkinleştirilmesi: ServBay kontrol panelindeki ‘Paketler’ sekmesinden ihtiyacınız olan Node.js sürümünü seçip yükleyin. Eğer Node.js etkin değilse, lütfen ServBay Node.js Kullanım Rehberi belgesine başvurun.
NestJS Projesi Oluşturma
Global NestJS CLI Kurulumu
Terminali açıp, genellikle Node.js ile birlikte gelen npm ile NestJS komut satırı aracını (CLI) küresel olarak yükleyin. NestJS CLI, uygulamaları başlatmak, geliştirmek ve yönetmek için güçlü bir araçtır.
bashnpm install -g @nestjs/cli1Proje Başlatma
ServBay’in varsayılan web kök klasörü olan
/Applications/ServBay/wwwdizinine gidin. Projenizi burada oluşturmak, ilerideki web sitesi yapılandırmalarında kolaylık sağlar. NestJS CLI ile yeni bir proje oluşturun:bashcd /Applications/ServBay/www nest new servbay-nest-app1
2Komutu çalıştırdıktan sonra, CLI size proje oluşturma adımlarında yardımcı olacak ve paket yöneticisi seçimi (npm, yarn veya pnpm) isteyecektir. Tutarlılık açısından npm önerilir. Proje,
/Applications/ServBay/www/servbay-nest-appdizininde oluşturulacaktır.Proje Bağımlılıklarını Kurma
Yeni oluşturulan
servbay-nest-appdizinine girin ve gerekli bağımlılıkları yükleyin:bashcd servbay-nest-app npm install1
2nest newkomutuyla otomatik olarak gerekli paketler yüklense de, bu komutu tekrar çalıştırarak tüm bağımlılıkların doğru şekilde kurulduğuna emin olabilirsiniz.
NestJS Projesinin Çıktı İçeriğini Değiştirme (Opsiyonel)
Projenin başarıyla çalışıp çalışmadığını ve ServBay üzerinden erişilebildiğini doğrulamak için varsayılan root route yanıtını değiştirebilirsiniz.
src/app.controller.tsDosyasını DüzenlemeProje klasörünüzdeki
src/app.controller.tsdosyasını favori kod editörünüzle açın. İçeriğini aşağıdaki şekilde değiştirin, böylece kök yol (/) ziyaret edildiğinde "Hello ServBay!" döner:typescriptimport { Controller, Get } from '@nestjs/common'; import { AppService } from './app.service'; // AppService'i koruduğunuzu varsayın @Controller() export class AppController { constructor(private readonly appService: AppService) {} // AppService korunuyorsa @Get() getHello(): string { // return this.appService.getHello(); // Eğer AppService kullanılıyorsa return 'Hello ServBay!'; // Direkt dize döndürülüyor } }1
2
3
4
5
6
7
8
9
10
11
12
13Bu kod, uygulamanın kök yoluna (
/) gelen HTTP GET isteğini işleyen ve belirtilen metni döndüren basit bir denetleyici (controller) tanımlar.
Geliştirme Modunda NestJS'i Çalıştırma ve ServBay ile Erişim
NestJS projeleri genellikle geliştirme sırasında dahili bir sunucu ile belirli bir port dinleyerek başlatılır. Ardından, ServBay’in ‘Web Sitesi’ işlevinde bir ters proxy yapılandırarak, özel alan adınızdan bu uygulamaya erişebilirsiniz.
Geliştirme Sunucusunu Başlatma
Proje ana dizininiz
/Applications/ServBay/www/servbay-nest-appaltında aşağıdaki komutu çalıştırarak NestJS uygulamasının geliştirme sunucusunu başlatın. Örneğin, uygulamanın dinleyeceği portuPORTortam değişkeni ile8585olarak belirleyin.bashcd /Applications/ServBay/www/servbay-nest-app PORT=8585 npm run start:dev1
2npm run start:dev, NestJS projelerinde tanımlı hazır bir scripttir;ts-nodeile TypeScript kodunuzu çalıştırır ve dosya izleme ile değişikliklerde sunucuyu otomatik yeniden başlatır. Sunucu,localhost:8585üzerinde çalışmaya başlar.ServBay’de Web Sitesi Ters Proxy Yapılandırması
ServBay kontrol panelini açın ve ‘Web Sitesi’ (Websites) sekmesine geçin. Ekle (+) butonuna tıklayarak yeni bir web sitesi yapılandırması oluşturun:
- İsim (Name): Kolay tanımlanabilir bir isim verin, ör.
İlk NestJS geliştirme sitem. - Alan Adları (Domains): Yerelde projenize erişmek istediğiniz alan adını girin, ör.
servbay-nest-test.dev. ServBay,.devgibi uzantıları otomatik olarak yerel olarak çözümlediğinden hosts dosyasına müdahale gerekmez. - Tür (Type):
Ters Proxy (Reverse Proxy)olarak seçin. - IP Adresi (IP Address): Node.js uygulamanızın dinlediği IP’yi girin; genellikle
127.0.0.1(localhost). - Port (Port): NestJS uygulamasının dinlediği port, burada
8585.
Ayarları kaydedin. ServBay, web sunucu (Caddy veya Nginx) yapılandırmasını otomatik olarak günceller. Detaylı web sitesi ekleme bilgisi için ServBay Web Sitesi Ekleme Dokümantasyonu sayfasına bakabilirsiniz.
- İsim (Name): Kolay tanımlanabilir bir isim verin, ör.
Geliştirme Sitesine Erişim
Tarayıcınızdan, az önce tanımladığınız alan adını ziyaret edin:
https://servbay-nest-test.dev.Dikkat:
- ServBay, yapılandırılmış yerel siteler için otomatik olarak ServBay User CA tarafından imzalanmış ücretsiz SSL sertifikası sağlar. Bu nedenle güvenli
httpsüzerinden erişebilirsiniz. Eğer sertifika uyarısı alırsanız, ServBay User CA sertifikasını güvenilir olarak eklemeniz gerekebilir. Ayrıntılar için Web Sitenizi SSL ile Güvenceye Alma Dokümantasyonu sayfasına bakabilirsiniz. - NestJS geliştirme sunucunuzun (
PORT=8585 npm run start:dev) çalışıyor olduğundan emin olun. Sunucu çalışmıyorsa alan adınızdan erişilemezsiniz.
- ServBay, yapılandırılmış yerel siteler için otomatik olarak ServBay User CA tarafından imzalanmış ücretsiz SSL sertifikası sağlar. Bu nedenle güvenli
Üretim (Production) Versionu Yayınlama ve ServBay ile Erişim
NestJS uygulamanızı üretim ortamında yayınlamadan önce (ister gerçek ister yerelde üretim taklidi), projenizi derleyerek başlatmalısınız.
Üretim Versiyonu Derleme
Ana proje dizininizde aşağıdaki komutla projeyi derleyin:
bashcd /Applications/ServBay/www/servbay-nest-app npm run build1
2Bu komut, TypeScript derleyicisiyle kaynak kodunuzu
distklasörüne derler.Üretim Sunucusunu Başlatma
Derleme bittikten sonra üretim sürümünü başlatmak için aşağıdaki komutu kullanın.
nodeile derlenmiş dosyayı çalıştırın, portu örneğin8586olarak belirleyin veNODE_ENV=productiondeğişkenini ayarlayın.bashcd /Applications/ServBay/www/servbay-nest-app PORT=8586 NODE_ENV=production node dist/main.js1
2Üretim modunda dosya izleme ve hot-reload genellikle devre dışıdır.
ServBay Web Sitesi Ters Proxy Ayarları
ServBay kontrol panelindeki ‘Web Sitesi’ sekmesine dönün, üretim sitesine erişmek için yeni bir konfigürasyon oluşturun ya da var olanı düzenleyin:
- İsim (Name): Ör.
İlk NestJS üretim sitem. - Alan Adları (Domains): Ör.
servbay-nest-test.prod - Tür (Type):
Ters Proxy (Reverse Proxy) - IP Adresi (IP Address):
127.0.0.1 - Port (Port):
8586(üretim sunucusunun dinlediği port)
Ayarları kaydedin.
- İsim (Name): Ör.
Üretim Sitesine Erişim
https://servbay-nest-test.prodadresine girerek üretimda çalışan NestJS projenizi görebilirsiniz. ServBay otomatik olarak SSL ile koruma sağlar.
ServBay Sağladığı Veritabanlarına Bağlanma
ServBay, MariaDB (MySQL uyumlu), PostgreSQL, MongoDB ve Redis dahil pek çok veritabanı sunucusunu dahili olarak destekler. NestJS uygulaması geliştirirken bu veritabanlarına kolayca bağlanıp kullanabilirsiniz.
Önemli Not: Bağlantıdan önce, ServBay kontrol panelindeki ‘Paketler’ sekmesinden ilgili veritabanı paketinin etkinleştirildiğinden emin olun. Varsayılan port, kullanıcı adı ve şifre bilgilerini ServBay arayüzünde veya dokümantasyonunda bulabilirsiniz. Üretim ortamı için varsayılan şifreleri mutlaka değiştirin ve özel veritabanı kullanıcıları oluşturun.
Aşağıda, NestJS projelerinde yaygın ORM/kütüphaneler kullanılarak ServBay veritabanlarına bağlantı örnekleri yer almaktadır. Bu örnekler genellikle ana modülünüzde (AppModule) veya ayrı bir veritabanı modülünde yer alır.
MongoDB ile Bağlantı
@nestjs/mongoosemodülü ile MongoDB’ye bağlanın. Önce paketleri yükleyin:bashnpm install @nestjs/mongoose mongoose1Modülünüzde
MongooseModule'i şu şekilde ayarlayabilirsiniz:typescriptimport { Module } from '@nestjs/common'; import { MongooseModule } from '@nestjs/mongoose'; // ... Diğer importlar @Module({ imports: [ MongooseModule.forRoot('mongodb://localhost:27017/servbay-nest-app'), // Varsayılan port 27017 // ... diğer modüller ], controllers: [], // ... providers: [], // ... }) export class AppModule {}1
2
3
4
5
6
7
8
9
10
11
12
13ServBay’in varsayılan MongoDB bağlantısı genellikle
mongodb://localhost:27017/şeklindedir. Gerekirse MongoDB Compass veyamongoshile bağlanıpservbay-nest-appveritabanını oluşturabilirsiniz.Redis ile Bağlantı
@nestjs/redismodülüyle Redis’e bağlanmak için aşağıdaki paketleri yükleyin:bashnpm install @nestjs/redis redis @types/redis1Modülünüzü şöyle yapılandırın:
typescriptimport { Module } from '@nestjs/common'; import { RedisModule } from '@nestjs/redis'; // ... Diğer importlar @Module({ imports: [ RedisModule.forRoot({ url: 'redis://localhost:6379', // Varsayılan port 6379 }), // ... diğer modüller ], controllers: [], // ... providers: [], // ... }) export class AppModule {}1
2
3
4
5
6
7
8
9
10
11
12
13
14
15ServBay’in varsayılan Redis adresi:
localhost:6379.MariaDB (MySQL Uyumlu) ile Bağlantı
@nestjs/typeormmodülüyle MariaDB’ye bağlanın. ServBay, MariaDB ve MySQL paketlerini, MySQL protokolüyle uyumlu olarak destekler. TypeORM'damysqlveyamariadbtipiyle bağlanabilirsiniz. Önce şu paketleri kurun:bashnpm install @nestjs/typeorm mysql2 typeorm1Ardından şu şekilde yapılandırın:
typescriptimport { Module } from '@nestjs/common'; import { TypeOrmModule } from '@nestjs/typeorm'; // ... Diğer importlar @Module({ imports: [ TypeOrmModule.forRoot({ type: 'mariadb', // ya da 'mysql' host: 'localhost', port: 3306, // Varsayılan port 3306 username: 'root', // ServBay MariaDB/MySQL varsayılan root kullanıcısı password: 'password', // Varsayılan root şifresi database: 'servbay_nest_app', // Bu veritabanı önceden oluşturulmalı entities: [], // Entity sınıflarınız synchronize: true, // Geliştirme ortamında true olabilir, prod'da dikkatli olun }), // ... diğer modüller ], controllers: [], // ... providers: [], // ... }) export class AppModule {}1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22Not: ServBay MariaDB/MySQL’de varsayılan
rootşifresipassword’dur.localhost:3306’ya (ör. TablePlus, DBeaver ya da MySQL CLI ile) bağlanıproot/passwordile giriş yaparakservbay_nest_appveritabanını oluşturmanız gerekir. Üretimde, güvenlik için root şifresini değiştirin ve sadece yetkili uygulama kullanıcıları oluşturun.PostgreSQL ile Bağlantı
@nestjs/typeormmodülüyle PostgreSQL’e bağlanmak için gerekli paketleri kurun:bashnpm install @nestjs/typeorm pg typeorm1Ardından şu şekilde yapılandırın:
typescriptimport { Module } from '@nestjs/common'; import { TypeOrmModule } from '@nestjs/typeorm'; // ... Diğer importlar @Module({ imports: [ TypeOrmModule.forRoot({ type: 'postgres', host: 'localhost', port: 5432, // Varsayılan port 5432 username: 'servbay', // ServBay PostgreSQL’de örnek varsayılan kullanıcı, mutlaka kontrol edin password: 'password', // Varsayılan şifre, kesin doğrulayın database: 'servbay_nest_app', // Bu veritabanı önceden oluşturulmalı entities: [], // Entity sınıflarınız synchronize: true, // Geliştirme için true, prod için dikkatli olun }), // ... diğer modüller ], controllers: [], // ... providers: [], // ... }) export class AppModule {}1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22Not: ServBay PostgreSQL’in varsayılan kullanıcı adı ve şifresi sürüme göre değişebilir; yaygın olanlar
servbayveyapostgres’tir. Güncel bilgileri ServBay arayüzünden veya dökümantasyonundan kontrol edin. Ayrıca üretim için varsayılan şifreleri değiştirmeniz gereklidir.
Sonuç
Bu rehber ile, ServBay’i kullanarak macOS üzerinde yerel bir NestJS projesini nasıl oluşturup çalıştıracağınızı, test/üretim ortamına nasıl alacağınızı ve proje için güvenli alan adı ve SSL yapılandırmasını nasıl yapacağınızı öğrendiniz. ServBay’in entegre Node.js ortamı, kolay web sitesi ve ters proxy yapılandırması ve güçlü veritabanı desteğiyle yerel NestJS geliştirme ve test süreçleriniz büyük ölçüde kolaylaşacaktır. Geliştirme ve üretim modları arasında hızlıca geçiş yapabilir, özel alan adları ve HTTPS ile uygulamanıza güven içinde erişebilir ve ServBay’in dahili veritabanı hizmetlerinin tüm avantajlarından yararlanabilirsiniz.
