giriiş
Modern web uygulamaları sağlam ve güvenli desteğe dayanır. Bu nedenle, küçük ve/veya büyük geliştirici ekipleri tarafından yönetilebilecek ölçeklenebilir, güvenli ve mimari açıdan karmaşık uygulamalar oluşturmak çok önemlidir.
Modern geliştiriciler hem ön uçta hem de arka uçta JavaScript kullanmayı tercih ediyor. Express.js, çoğu geliştirici tarafından kullanılan harika bir JavaScript çerçevesidir. Ancak, minimal mimarisi, ölçeklenebilirlik ve büyük ekipler tarafından bakım için uygun değildir. İşte Nest.js tam da bu noktada devreye giriyor. Nest.js, ölçeklenebilirlik ve dağıtım için oldukça uygun olan yerleşik bir mimariye sahiptir. Ayrıca, TypeScript için yerel desteği, onu geliştiriciler için saf JavaScript'ten daha uygun hale getirir.
Bu eğitimde, bir VPS'de Nginx web sunucusunu kullanarak bir NestJS uygulamasını nasıl dağıtacağınızı ve uygulamanızı web'e nasıl güvenli bir şekilde dağıtacağınızı öğreneceksiniz.
Ön koşullar
- Ubuntu 20.04+ VPS veya fiziksel bir Ubuntu makinesi
- Node.js ve npm (veya yarn) paket yöneticisi.
- Nginx web sunucusu
Adım 1 – NestJS uygulamasını hazırlama ve dağıtma
Bu bölümde NestJS CLI'yi kuracak ve temel bir NestJS uygulaması oluşturacaksınız; bunu sonraki bölümlerde Nginx kullanarak nasıl dağıtacağınızı öğreneceksiniz.
NestJS CLI'yi global olarak yükleyin
NestJS CLI'yi Ubuntu makinenize kurmak için bir terminal açın ve aşağıdaki komutu yazın.
npm i -g @nestjs/cliBu, NestJS komut satırı arayüzünü bilgisayarınıza kuracaktır. Ardından, yeni bir NestJS projesinin nasıl oluşturulacağını öğreneceksiniz.
Yeni bir NestJS projesi oluşturun
NestJS artık yeni bir projeye başlamak için iki yol sunuyor. Size en uygun yöntemi seçebilirsiniz.
CLI ile bir NestJS projesi oluşturmak için aşağıdaki komutu yazın.
nest new <project-name>Output? Which package manager would you ❤️ to use? (Use arrow keys)
❯ npm
yarn
pnpmİşlem tamamlandığında aşağıdaki gibi bir çıktı alacaksınız.
OutputCREATE node_app/.eslintrc.js (663 bytes)
CREATE node_app/.prettierrc (51 bytes)
CREATE node_app/README.md (3340 bytes)
CREATE node_app/nest-cli.json (171 bytes)
CREATE node_app/package.json (1947 bytes)
CREATE node_app/tsconfig.build.json (97 bytes)
CREATE node_app/tsconfig.json (546 bytes)
CREATE node_app/src/app.controller.ts (274 bytes)
CREATE node_app/src/app.module.ts (249 bytes)
CREATE node_app/src/app.service.ts (142 bytes)
CREATE node_app/src/main.ts (208 bytes)
CREATE node_app/src/app.controller.spec.ts (617 bytes)
CREATE node_app/test/jest-e2e.json (183 bytes)
CREATE node_app/test/app.e2e-spec.ts (630 bytes)Bu, geçerli çalışma dizininde yeni bir proje oluşturacaktır. Bunun yerine şunu kullanabilirsiniz: ; Başka bir dizine giden mutlak yolu da belirtin.
Başlangıç şablonu simülasyonu
NestJS, yeni bir proje başlatmak için alternatif bir yol sunar. Standart bir şablon görevi gören bir Git deposudur. Bu deponun bir kopyasını oluşturabilir ve projeyi aşağıdaki komutlarla başlatabilirsiniz.
git clone https://github.com/nestjs/typescript-starter.git <project-directory >Klonlama tamamlandıktan sonra proje dizinine cd yapmanız ve ardından package.json dosyasından bağımlılıkları yüklemek için npm install komutunu çalıştırmanız gerekir.
cd <project-directory>
npm installProjeniz hazır olduğunda aşağıdaki komutu kullanarak uygulama sunucusunu başlatabilirsiniz:
npm run startBu, uygulamayı http://localhost:3000 adresinde çalıştıracaktır. Artık localhost'ta çalışmaya hazır, basit bir NestJS uygulamanız var.
Uygulama testi
Uygulamanızı geliştirdikten sonra, beklendiği gibi performans gösterip göstermediğini kontrol etmek için testler çalıştırabilirsiniz. NestJS, uygulamanızda testler çalıştıran varsayılan Jest testleri sunar. Aşağıdaki komutu kullanarak test etmeye başlayabilirsiniz:
npm run testBu program sizi test edecek ve aşağıdakine benzer sonuçlar gösterecektir:
Output> [email protected] test
> jest
PASS src/app.controller.spec.ts
AppController
root
✓ should return "Hello World!" (24 ms)
Test Suites: 1 passed, 1 total
Tests: 1 passed, 1 total
Snapshots: 0 total
Time: 2.895 s
Ran all test suites.Aşağıdaki bölümde, bu NestJS uygulamasını web sunucunuzda ters proxy olarak Nginx kullanarak nasıl dağıtacağınızı öğreneceksiniz.
Adım 2 – Nginx'i NestJS uygulamasını sunacak şekilde yapılandırın
Şimdi, bu NestJS uygulamasını barındırmak için bir web sunucusu kurmaya geçebiliriz. Ters proxy yaklaşımını kullanacağız. Bu yaklaşımda, uygulamamızı localhost'ta belirli bir portta çalıştırır ve ardından Nginx sunucusunu kullanarak VPS genel IP adresine veya etki alanına gelen tüm istekleri localhost'taki uygulamaya yönlendiririz. Ters proxy sunucularının kullanımı, gelen istekler ile arka uç uygulaması arasında bir bariyer oluşturarak web sunucusunun güvenliğini artırdığı için bir endüstri uygulamasıdır. Ayrıca, ters proxy'ler, özellikle sunucu birden fazla web uygulamasını barındırmak için kullanıldığında, sunucuda daha iyi yük yönetimi sağlar.
Paket yöneticisini yüklüyoruz pm2 Çalışma zamanında programı yönetenle başlıyoruz.
pm2 İşlem Yöneticisini yükleyin
İşlem yöneticisini açmak için aşağıdaki komutu kullanabilirsiniz. pm2 Düzenlemek.
npm install -g pm2Bu çalışmayla pm2 Cihazınıza global olarak kurulur.
NestJS uygulaması için Nginx yapılandırması oluşturma
Şimdi, uygulamayı çalıştırmak için Nginx'i yapılandırın. Ön koşul eğitiminde belirtildiği gibi, güvenlik duvarınızda Nginx uygulamasına HTTP ve HTTPS erişimini etkinleştirdiğinizden emin olun. UFW güvenlik duvarı kullanıyorsanız, talimatları izleyerek bunu yapabilirsiniz.
ufw enable
ufw allow ‘Nginx Full‘Şimdi, NestJS uygulamamız için bir yapılandırma bloğu oluşturacaksınız. Varsayılan ayarları düzenlemek yerine, yeni uygulamalar için yeni yapılandırma blokları oluşturmanız önerilir. Bloğu oluşturmak için terminalinize aşağıdaki kodu yazın.
sudo nano /etc/nginx/sites-available/your_domainBurada, uygulama için your_domain kullandık, ancak siz bunu kendi uygulamanızın adıyla değiştireceksiniz. Ardından düzenleyicide aşağıdaki kodu girin:
server {
server_name your_domain www.your_domain;
location / {
proxy_pass http://localhost:3000;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection 'upgrade';
proxy_set_header Host $host;
proxy_cache_bypass $http_upgrade;
}
}Şimdi, Nginx'e sites-available klasöründeki kullanılabilir web uygulamalarını aramasını söyleyen bir sembolik bağlantı oluşturacaksınız:
sudo ln -s /etc/nginx/sites-available/your_domain /etc/nginx/sites-enabled/Ayrıca, varsayılan bağlantıyı devre dışı bırakmanız gerekir; aksi takdirde nginx tüm istekleri varsayılan siteye yönlendirecektir. Bağlantıyı kaldırmak için aşağıdaki komutu kullanın.
sudo unlink /etc/nginx/sites-enabled/defaultŞimdi aşağıdaki komutu kullanarak Nginx servisini yeniden başlatın.
sudo systemctl restart nginxNginx kullanarak NestJS uygulamasını dağıtma
Şimdi, NestJS uygulamanızın yürütülmesini yönetmek için pm2 paket yöneticisini başlatacaksınız. Çalışma dizinini NestJS uygulama dizininize değiştirin ve aşağıdaki komutu yazın.
pm2 start npm --name "your_domain" – startSunucu yeniden başlatıldığında pm2'nin çalışmasını yapılandırmak için aşağıdaki komutu çalıştırabilirsiniz.
pm2 startupProgramı pm2'de kurmayı tamamladığınızda, pm2 işlem listesini aşağıdaki şekilde kaydedin:
pm2 save
Şimdi, web uygulamasını başlangıçta çalışacak şekilde ayarladık ve Nginx'i localhost'ta çalışan uygulamamıza ters proxy yapacak şekilde yapılandırdık.
Web uygulama testi
Aşağıdaki komutu yazarak web uygulamanızı konsolunuzdan test edebilirsiniz.
curl http://localhostTers proxy'yi sunucunun kendi IP adresine ayarladığımız için sunucunun genel IP adresine, etki alanına veya yerel ana bilgisayara gelen her istek uygulamaya iletilecektir. NestsJS sizin_alan_adınız Rehberlidir.
OutputHello World!Bir sonraki bölümde, istekleriniz için HTTPS protokolünü kullanmanıza olanak sağlayacak SSL'i uygulamanıza nasıl ekleyeceğinizi öğreneceksiniz.
Adım 3 – Let's Encrypt kullanarak SSL ekleyin (İsteğe bağlı)
Şimdiye kadar, Nginx sunucusuyla tam işlevli bir NestJS uygulamasını nasıl dağıtacağınızı öğrendiniz. Ancak bu dağıtım, güvenlik açıkları nedeniyle üretimde önerilmeyen HTTP protokolünü kullanır. Bu nedenle, HTTP'nin şifreli bir sürümü olan HTTPS protokolüne geçmek istersiniz. HTTPS, bir Sertifika Yetkilisi tarafından verilen SSL/TLS sertifikalarını kullanır. Bu sertifikalar bir web sitesine özgüdür ve istemci ile sunucu arasındaki iletişimi şifreler.
Let's Encrypt Certbot CLI'yi yükleyin
Let's Encrypt, tüketiciler için SSL sertifikalarını yönetmek ve otomatikleştirmek için bir CLI sağlar. Aracı aşağıdaki komutla yükleyebilirsiniz:
sudo apt install certbot python3-certbot-nginxBu, certbot istemcisini Ubuntu VPS'inize kuracaktır.
Alan adınız için SSL/TLS sertifikalarını alın
Artık aşağıdaki komutu kullanarak alan adınız için SSL sertifikaları alabilirsiniz
sudo certbot --nginx -d <your_domain> -d <www.your_domain>Mecbursun alan_adınız Certbot'u gerçek alan adınızla değiştirin. Certbot'u VPS'nizde ilk kez çalıştırıyorsanız, e-postanızı girmeniz ve kullanıcı koşullarını kabul etmeniz istenecektir. Gerekli bilgileri girip devam edin.
Sertifikalar yüklendikten sonra tüm istekleri HTTPS'ye yönlendirebilirsiniz. Web sitenizin bütünlüğünü sağlamak için tüm istekleri yönlendirmeniz önerilir.
Sonuç
Bu eğitimde, üretimdeki bir Ubuntu VPS'de Nginx web sunucusunu kullanarak bir NestJS uygulamasını nasıl dağıtacağınızı öğrendiniz. Ayrıca, Nginx kullanarak bir NestJS projesi ve uygulamanız için bir ters proxy nasıl kuracağınızı da öğrendiniz. Son olarak, sunucu alanınız için SSL/TLS sertifikaları eklemeyi ve istemcileriniz ile sunucunuz arasındaki iletişimin bütünlüğünü nasıl sağlayacağınızı öğrendiniz.









