Express.js Uygulaması Nasıl Dağıtılır?

How to Deploy a ExpressJS Application_
How to Deploy a ExpressJS Application_

Doğru dağıtım seçeneğini seçmek, uygulamanızın büyüdükçe kolayca ölçeklenebilmesini sağlamak için çok önemlidir. Bu makale, Express.js uygulamaları için mevcut olan farklı dağıtım seçeneklerini incelemektedir. Özellikle, Express.js uygulamalarının bir Back4app konteynerine nasıl dağıtılacağına odaklanmaktadır.

Express.js nedir?

Express, Node.js üzerine inşa edilmiş, karmaşık web ve mobil API’ler oluşturma sürecini basitleştiren, bağımsız ve hafif bir çerçevedir.

API rotaları için uç noktaları kolayca tanımlamanıza ve bunları işleyici işlevleriyle eşleştirmenize yardımcı olan basit bir yönlendirme sistemi sunar.

Ayrıca, istek-yanıt döngüsüne günlük kaydı, kimlik doğrulama ve hata işleme gibi işlevler eklemenize olanak tanıyan ara katman desteğine de sahiptir.

Express.js Kullanmanın Avantajları

Express kullanmanın avantajlarından bazıları şunlardır:

  • Minimalist ve kullanımı basit: Express.js, yönlendirme gibi bazı Node.js özelliklerinin karmaşıklığını soyutlar. API isteklerini ve yanıtlarını işlemek için basit bir yol sağlar.
  • Son derece genişletilebilir: Express.js, uygulamalara kolayca entegre edebileceğiniz kapsamlı bir NPM paketleri ve uzantıları ekosistemi ile sonuçlanan geniş bir topluluğa sahiptir.
  • Yüksek performanslı: Minimal tasarımı ve Node’un engellemesiz, olay güdümlü mimarisinden yararlanması nedeniyle Express yüksek performanslıdır.
  • Güçlü topluluk desteği: Express.js 2010 yılından beri kullanılmaktadır. Bu süre içinde birçok geliştirici onu benimsedi. Bu nedenle, takıldığınız noktalarda size yardımcı olabilecek Express ile ilgili geniş bir topluluk oluşmuştur. Ayrıca, Express’in nasıl çalıştığını açıklayan çok sayıda makale, öğretici ve iyi yazılmış dokümanlar bulunmaktadır.

Express.js’nin Dezavantajları

Aşağıda Express.js’nin bazı dezavantajları yer almaktadır:

  • Fikirsiz: Nest.js gibi çerçevelerle karşılaştırıldığında, Express.js oldukça fikir sahibidir. Bu fikir eksikliği, proje yapısı ve organizasyonu hakkında kararlar vermeniz gerektiği anlamına gelir, bu da özellikle işleri yapmanın birden fazla yolu olduğunda sıkıcı olabilir.
  • Yerleşik özelliklerden yoksundur: Express.js önceden yapılandırılmış olarak gelmez ve günlük kaydı gibi çoğu gelişmiş özellik için ek bağımlılıklar yüklemeniz gerekir.

Express.js Dağıtım Seçenekleri

Hizmet Olarak Altyapı (IaaS)

Hizmet Olarak Altyapı, talep üzerine İnternet üzerinden bilgi işlem, ağ ve depolama kaynakları sunan bir bulut bilişim hizmetidir.

IaaS ile, IaaS sağlayıcısı altta yatan fiziksel altyapıyı korurken, uygulamanız için kaynakları sağlamak ve yapılandırmaktan siz sorumlusunuz. Örneğin, bir Express uygulaması dağıtmak istiyorsanız, seçtiğiniz IaaS sağlayıcısı üzerinde bir sanal makine oluşturabilir ve yapılandırabilirsiniz.

VM üzerinde Node ve npm gibi gerekli bağımlılıkları yüklemeniz ve ardından Express kodunu VM’ye eklemeniz gerekir. Daha sonra Express uygulamanızı VM üzerinde başlatabilirsiniz ve internet üzerinden erişilebilir olacaktır.

IaaS’in ana avantajlarından biri sağladığı kontrol seviyesidir. Sanal makinenin CPU, bellek ve depolama kaynaklarını uygulamanızın ihtiyaçlarına uyacak şekilde özelleştirebilirsiniz

Ancak bu yaklaşımın bazı dezavantajlarını göz önünde bulundurmak önemlidir.

Uygulamalarınız ölçeklendikçe ve talep değiştikçe altyapıyı ve kaynakları yönetmek karmaşık ve zaman alıcı olabilir.

Popüler IaaS sağlayıcılarından bazıları şunlardır:

  • Microsoft Azure
  • Amazon Web Services (AWS)
  • Google Cloud Platform (GCP)

Hizmet Olarak Konteyner (CaaS)

Hizmet Olarak Konteyner (CaaS), konteynerleştirilmiş uygulamaları hızlı bir şekilde dağıtmanıza ve çalıştırmanıza olanak tanıyan temel altyapıyı soyutlayan bir bulut hizmeti modülüdür.

Express uygulamasını bir CaaS sağlayıcısına dağıtmak için Docker gibi bir konteynerleştirme aracı kullanarak kodu, bağımlılıkları ve uygulamayı bir konteynerde çalıştırmak için gereken çalışma zamanını paketlersiniz. Kapsayıcıyı oluşturduktan sonra, onu dağıtırsınız. CaaS sağlayıcısı konteyneri çalıştırmak için gereken altyapıyı sizin için hazırlar ve yönetir.

CaaS kullanmanın temel faydası, düşük seviyeli altyapıyı yapılandırma konusunda endişelenmenize gerek olmadığından, yüksek soyutlama seviyesinin dağıtımı basitleştirmesidir. Bunun yerine uygulamanın mantığını oluşturmaya odaklanabilirsiniz. Ek olarak, konteynerleştirme uygulamanızın birden fazla ortamda tutarlı bir şekilde çalışmasını sağlar.

Popüler CaaS sağlayıcılarından bazıları şunlardır:

  • Back4app Containers
  • Amazon Elastic Container Service (ECS)
  • Google Kubernetes Engine (GKE)

Bir Express Uygulaması Back4app Konteynerine Nasıl Dağıtılır

Ön Koşullar

Bu öğreticiyi takip etmek için aşağıdakilere sahip olduğunuzdan emin olun:

  • Node.js makinenizde yüklüdür.
  • Bir GitHub hesabı.
  • Docker makinenizde yüklü. Eğer yoksa, Docker sitesini ziyaret edin ve Docker masaüstünü yükleyin.
  • Express.js hakkında çalışma bilgisi.

Back4app Konteynerlerine Genel Bakış

Back4app konteynerleri, sunucu tarafı altyapısını sizin için yöneterek dağıtımı otomatikleştiren bir platformdur.

Back4app konteynerlerinin bazı özellikleri aşağıdakileri içerir:

  • GitHub entegrasyonu: GitHub depolarınızı Back4app’e bağlayarak kod tabanı değiştiğinde uygulamanızın otomatik olarak dağıtılmasını sağlayabilirsiniz.
  • Docker dağıtımı: Uygulama kodunuzu bir konteynerde paketlemek için popüler bir konteynerleştirme aracı olan Docker’ı kullanabilirsiniz. Bu, uygulamanızın ortamlar arasında öngörülebilir bir şekilde çalışmasını sağlar.
  • Otomatik dağıtımlar: GitHub deposunu Back4app’e bağladıktan sonra, varsayılan dala yapılan her kod aktarımı dağıtımı tetikleyecektir.
  • Gerçek zamanlı dağıtım takibi: Dağıtımlarınızın durumunu ve ilerlemesini görüntüleyebilirsiniz.
  • Gerçek zamanlı uygulama izleme
  • Sıfır kesinti süresi güncellemeleri

Proje Tanıtımı

Bu kılavuzda, bir Express uygulamasını Back4app’e dağıtma sürecini ele alacağız. İlk olarak tek bir uç noktaya sahip basit bir Express REST API oluşturacağız, Docker kullanarak dockerize edeceğiz ve ardından GitHub’a göndereceğiz. Daha sonra bunu bir Back4app konteynerine dağıtacağız.

Basit bir Express API Oluşturma

Bir Express uygulaması oluşturmak için aşağıdaki adımları izleyin:

  1. Yeni bir Node.js projesini başlatmak için terminalinizde aşağıdaki komutu çalıştırın.
npm init

Bu komut sizden paket adı, sürüm, açıklama, giriş noktası, yazar ve lisans gibi uygulama ayrıntılarınızı girmenizi isteyecektir. Yanıt verdiğinizde, bu yapılandırmaları içeren bir package.json dosyası oluşturacaktır.

Varsayılan yapılandırmaları kullanmak için aşağıda gösterildiği gibi -y bayrağını kullanın:

npm init -y
  • Bu komutu çalıştırarak Express’i bir bağımlılık olarak yükleyin.
npm install express
  • Proje klasörünüzün kök dizininde bir index.js dosyası oluşturun. Giriş noktası dosyanız için başka bir ad belirlediyseniz, bunu kullanın.
  • index.js dosyasını açın ve Express uygulamasının bir örneğini oluşturun.
const express = require('express');
const app = express();
  • “/” uç noktasına gelen GET isteklerini işlemek için bir rota işleyicisi ekleyin.
app.get("/", (req, res) => {
  res.json({
    message: "Success",
  });
});

Bu uç nokta yanıt olarak bir JSON mesajı gönderir.

  • Bağlantı noktası numarasını tanımlayın ve belirtilen bağlantı noktasındaki gelen istekleri dinleyin.
const port = process.env.PORT || 3000;
app.listen(port, () => {
  console.log(`App listening at <http://localhost>:${port}`);
});

process.env.PORT'un PORT adlı bir ortam değişkenine atıfta bulunduğunu unutmayın. Bu değer .env dosyasında tanımlanmamışsa, uygulama 3000 değerini kullanacaktır.

  • Express sunucusunu başlatmak için aşağıdaki komutu çalıştırın.
node index.js

Tarayıcınızda http://localhost:3000/api adresini ziyaret ederseniz, aşağıdaki yanıtı almanız gerekir.

{
  "message": "Success!"
}

Bu bir Express API’nin çok basit bir örneğidir ve gerçek bir uygulama daha fazla uç nokta, harici veri, ara katman yazılımı vb. ile daha karmaşık olacaktır.

Bu makalenin amaçları doğrultusunda, bu, dockerize edilmiş bir Express uygulamasını nasıl dağıtabileceğinizi göstermek için yeterlidir.

Express Uygulamasını Docker’lama

Bir Express.js uygulamasını Docker’lamak, uygulamanın farklı ortamlarda çalıştırılmasını kolaylaştırmak için bir Docker konteyneri oluşturmak anlamına gelir.

Docker nedir?

Docker, uygulamanızı, çalışma zamanını, kütüphanelerini ve bağımlılıklarını yalıtılmış ve taşınabilir bir konteyner ortamında paketlemenizi sağlayan açık kaynaklı bir araçtır.

Docker, uygulamayı bu konteyner içinde kapsülleyerek, altta yatan ana sistemden bağımsız olarak uygulamanın çalışması için tutarlı bir ortam sağlar.

Bu, “benim makinemde çalışıyor” sorununu ortadan kaldırır. Express uygulamanız üzerinde yerel ortamınızda çalışabilir, onu konteynerleştirebilir ve uyumluluk sorunları hakkında endişelenmeden birden fazla ortama dağıtabilirsiniz.

Docker’ı yükleyin

Docker macOS, Windows ve Linux dahil olmak üzere birden fazla platformda çalışabilir. İşletim sisteminiz için Docker’ı resmi web sitesinden indirebilir ve yükleyebilirsiniz.

Bir Express.js Uygulaması Nasıl Dockerize Edilir

Docker’ı kurduktan sonra, uygulamanızı dockerize etmeniz, yani bir Docker konteynerinde paketlemeniz gerekir.

Aşağıdaki adımları izleyin:

  • Projenizin kök dizininde Dockerfile adında bir dosya oluşturun. Bu dosya, Express uygulaması için Docker görüntüsünü oluşturma talimatlarını içerir.
  • Genellikle Dockerfile oluştururken yaptığınız ilk şey bir temel imaj belirlemektir. Temel imaj, uygulamanızın imajı için başlangıç noktası görevi gören ve genellikle uygulamayı çalıştırmak için minimum talimatları içeren önceden oluşturulmuş bir imajdır.
  • Dockerfile’da, daha sonra bu imajın üzerinde çalışacak talimatları ve yapılandırmaları sağlayabilirsiniz. Kendi özel temel imajınızı oluşturabilirsiniz ancak Docker’ın çoğu durumda yeterli olan resmi imajları vardır.
  • Bu kılavuzda, özellikle küçük boyutlu olan alpine varyantı olan node temel imajını kullanacağız. Bu temel imajı Dockerfile’a aşağıdakileri ekleyerek belirleyelim.
FROM node:20-alpine

Burada, node:20-alpine, Node.js sürüm 20 ile önceden yüklenmiş olarak gelir.

  • Konteyner içindeki çalışma dizinini ayarlamak için aşağıdaki satırı ekleyin.
WORKDIR /usr/src/app
  • package.json ve package-lock.json dosyalarını çalışma dizinine kopyalayın. Bu, Docker’ın yüklemesi gereken tüm bağımlılıkları listeler.
# A wildcard ensures package.json AND package-lock.json are copied
COPY package*.json ./
  • Bağımlılıkları yüklemek için komutu ekleyin.
RUN npm install
  • Kodun geri kalanını konteynerdeki çalışma dizinine kopyalayın.
COPY . .
  • Express uygulamasının dinlediği bağlantı noktası numarasını gösterin. Bu durumda, bağlantı noktası 3000.
expose 3000
  • Uygulamayı başlatmak için komut ekleyin.
CMD["node", "index.js"]

Toplamda, DockerFile’ınız aşağıdaki gibi görünmelidir:

FROM node:20-alpine

WORKDIR /usr/src/app

COPY package*.json  ./

RUN npm install

COPY . .

EXPOSE 3000

CMD [ "node", "index.js" ]

Bir .dockerignore dosyası ekleyin

Bir .dockerignore dosyası Docker’ın yok sayması gereken dosyaları belirtir. Gereksiz dosyaları yok saymanıza izin vererek Docker görüntüsünün boyutunu azaltmanıza yardımcı olur. Ayrıca hassas dosyaları görüntüden gizlemenize de yardımcı olur.

Projenize eklemek için, projenizin tabanında bir dosya oluşturun ve adını.dockerignore koyun. Aşağıdaki içeriği ekleyin.

.git
.gitignore
.env
README.md
Dockerfile
node_modules/
.github
.vscode
npm-debug.log
npm-debug.log.*

Yukarıdaki dosya git dosyalarının, node modüllerinin, günlüklerin ve env değişkenlerinin Docker görüntüsüne kopyalanmasını engeller.

Docker Görüntüsünü Yerel Olarak Oluşturun

Proje dizininizde, Docker görüntüsünü oluşturmak için aşağıdaki komutu çalıştırın.

docker build -t docker-express-api .

t bayrağı etiket anlamına gelir ve docker görüntüsüne anlamlı bir isim vermenizi sağlar. Sonundaki nokta (.) Docker’a geçerli dizinde Dockerfile’ı aramasını ve içindeki talimatları çalıştırmasını söyler.

Docker Görüntüsünü Yerel Olarak Çalıştırma

Docker görüntüsünü oluşturduktan sonra, aşağıdaki komutu kullanarak Express uygulamasını çalıştırmak için kullanın:

docker run -p 3000:3000 docker-express-api

Burada -p 3000:3000, localhost’un 3000 numaralı portunu konteynerdeki 3000 numaralı porta eşler. Tarayıcıda http://localhost:3000 adresini ziyaret ederek uygulamaya erişebilmeniz gerekir.

Çalışan Docker örneğini görüntülemek için aşağıdaki komutu kullanın:

docker ps

Örneği durdurmak için çalıştırın:

docker stop docker-express-api

Dockerized Express Uygulamasını Back4app Konteynerine Dağıtma

Docker görüntüsünün yerel olarak çalıştığından emin olduğumuza göre, onu Back4app’e dağıtmamız gerekiyor.

Express Uygulamasını GitHub’a Gönderme

Backapp uygulamanızı GitHub‘dan dağıtır. Bu nedenle, aşağıdaki adımları izleyerek uygulama deposunu GitHub’a itmeniz gerekir:

  • GitHub sitesine gidin ve hesabınıza giriş yapın.
  • Giriş yaptıktan sonra, sayfanın sağ üst köşesindeki “+” simgesini bulun ve tıklayın. Açılır menüden “Yeni depo” seçeneğini seçin.
  • “Create a new repository” sayfasında deponuza bir isim verin. Bu kılavuz için “express-api” kullanacağız. “Depo adı oluştur” düğmesine tıklayın. Yerel depoyu GitHub’a göndermek için ihtiyacınız olacağından bir sonraki sayfada deponun URL’sini hatırlayın.

Yerel makinenizde proje klasörünüze gidin ve uygulamayı GitHub’daki uzak depoya göndermek için aşağıdaki komutu çalıştırın.

git remote add origin <https://github.com/remigathoni/express-api.git>
git branch -M main
git push -u origin main

Uygulamanızın dosyalarını GitHub deposunda görüntüleyebilmeniz gerekir.

Ekspres Uygulamayı Dağıtma

Uygulamayı Back4app’e dağıtmak için aşağıdaki adımları izleyin:

  • Back4app’e gidin ve bir hesap için kaydolun. Zaten bir hesabınız varsa, giriş yapın. Back4app, kimlik doğrulamasından sonra sizi kontrol paneline yönlendirecektir.
  • Kontrol panelinde, Yeni bir uygulama oluştur düğmesine tıklayın. Size iki seçenek sunulacaktır – Hizmet Olarak Arka Uç ve Hizmet Olarak Konteyner. BaaS sizin adınıza arka uçla ilgilenirken, CaaS uygulamanızı konteynerli bir ortamda dağıtmanıza olanak tanır. Yalnızca uygulamayı dağıtmak istediğimiz için Containers as a Service seçeneğine tıklayın.
Hizmet uygulaması olarak yeni bir kapsayıcı oluşturma
  • Komut isteminde Back4app’e GitHub hesabınıza erişim izni verin ve Express deposunu seçin.
Dockerize edilmiş Express uygulamasını seçin
  • Dağıtılan uygulamanıza bir isim verin. Bu kılavuzda “Deployed Express API” kullanıyoruz. Ayrıca varsayılan dal, kök dizin, otomatik dağıtım durumu evet ya da hayır ve ortam değişkenleri gibi ek dağıtım seçeneklerini de ayarlayabilirsiniz.
Express.js uygulamasını şu adrese dağıtın
  • Dağıtım işlemini sonlandırmak için Uygulama Oluştur düğmesine tıklayın.

Artık Express uygulamanızı Back4app’e ücretsiz olarak dağıttınız.

Docker Görüntüsü Nasıl Optimize Edilir

Aşağıdaki nedenlerden dolayı docker imajınızın boyutunu optimize etmek çok önemlidir:

  • Geliştirilmiş performans: Küçük bir görüntü, yürütülmesi gereken gereksiz katmanları içermez. Bu da hızlı başlatma süreleriyle sonuçlanır.
  • Daha hızlı dağıtım: Daha küçük görüntüler daha hızlı dağıtılır.
  • Daha düşük kaynak tüketimi: Daha küçük görüntüler çalışırken daha az disk alanı ve bellek tüketir.
  • Geliştirilmiş güvenlik: Gereksiz kütüphaneleri ve bağımlılıkları hariç tutarak, daha küçük görüntüler uygulamanın saldırı yüzeyini azaltır.

Express.js Docker görüntüsünü optimize etmek için çok aşamalı bir derleme kullanabiliriz.

Çok aşamalı derlemeler, derleme ortamını çalışma zamanı ortamından ayırmanıza olanak tanır. Uygulamayı derleme aşamasında oluşturabilir ve ardından yalnızca gerekli dosyaları son üretim aşamasına kopyalayabilirsiniz.

Express uygulamasına geri dönecek olursak, iki aşama tanımlayabiliriz – bağımlılıkları yükleyeceğimiz derleme aşaması ve çalışma zamanı görüntüsünü oluşturacağımız üretim sayfası.

Oluşturma Aşamasını Oluşturma

Derleme aşamasını tanımlamak için aşağıdaki talimatları izleyin:

  • Dockerfile’ın tüm içeriğini silin ve temel görüntüden derleme aşamasını tanımlayın.
FROM node:20-alpine AS build

Bir aşama, FROM komutuna AS name-of-stage eklenerek adlandırılır. Ayrıca alpin taban görüntülerinin node: görüntülerinden çok daha küçük olduğunu unutmayın.

  • Çalışma dizinini tanımlayın.
WORKDIR /usr/src/app
  • package.json ve package-lock.json dosyalarını konteynere kopyalayın.
COPY package*.json ./
  • Geliştirme bağımlılıklarını yükleyin.
RUN npm install --only=development
  • Uygulama kodunu derleme aşamasına kopyalayın.
COPY . .
  • Uygulamayı çalıştırın.
CMD ["node", "index.js"]

Burada çalıştıracağınız komut projenize bağlıdır. Örneğin, uygulamanızı oluşturmak için TypeScript kullandıysanız, uygulamanızı transpile etmeniz gerekebilir.

Üretim Aşamasının Oluşturulması

İkinci aşamada, derleme aşamasından yalnızca derlenmiş uygulama dosyalarını kopyalayacaksınız. Aşağıdaki adımları izleyin:

  • Node.js temel görüntüsünü ekleyin ve production olarak adlandırın.
# Production Stage
FROM node:20-alpine AS production
  • Çalışma dizinini ayarlayın.
WORKDIR /usr/src/app
  • COPY komutunda --from=build belirterek gerekli dosyaları “Build Stage “den kopyalayın. Build komutu olmadığı için her şeyi doğrudan kopyalıyoruz.
COPY --from=build /usr/src/app .
  • Express uygulamanızın dinlediği bağlantı noktasını gösterin.
EXPOSE 3000
  • Express uygulamasını başlatın.
CMD ["node", "index.js"]

Docker dosyasını oluşturduktan sonra değişikliklerinizi GitHub’a gönderin ve Back4app uygulamanızı otomatik olarak yeniden dağıtacaktır.

Bu makalenin kodunu görüntülemek istiyorsanız, uygulamanın GitHub deposuna bakın.

Sonuç

Express.js, hafif ve bağımsız bir Node.js çerçevesidir. Geliştiricilerin web ve mobil uygulamalar için hızlı ve minimal API’ler oluşturmasına yardımcı olur.

Express uygulamalarını dağıtmak söz konusu olduğunda, Hizmet Olarak Altyapı (IaaS) ve Hizmet Olarak Konteyner (CaaS) platformları dahil olmak üzere çeşitli seçenekleriniz vardır.

IaaS platformları, altta yatan sunucu altyapısı üzerinde maksimum kontrol istediğinizde daha uygundur; CaaS ise altyapıyı manuel olarak yönetmek zorunda kalmadan hızlı bir şekilde geliştirmeden üretime geçmek istediğinizde iyi bir seçimdir.

En iyi CaaS sağlayıcılarından biri Back4app konteynerleridir. Back4app uygulama dağıtımını sizin adınıza yönetir ve izler, size de uygulamanın özelliklerini oluşturmaya konsantre olmak kalır.

Bu kılavuzda, bir Express.js uygulamasını nasıl dockerize edeceğinizi ve bir Back4app konteynerine nasıl dağıtacağınızı öğrendiniz. Daha fazla bilgi edinmek için Back4app konteynerleri belgelerini ziyaret edin.

SSS

Express.js nedir?

Express, Node.js üzerine inşa edilmiş, hafif ve görüşsüz bir framework’tür ve karmaşık web ve mobil API’lerini oluşturma sürecini basitleştirir.

Express.js uygulamaları için dağıtım seçenekleri nelerdir?

– IaaS (AWS, GCP, Azure)
– CaaS (Back4app Containers, AWS ECS, Google Kubernetes Engine (GKE))

Express.js uygulamasını Back4app konteynerine nasıl dağıtırsınız?

Bir Express.js uygulaması oluşturun.
Express.js uygulamasını Dockerize edin.
Dockerize edilmiş uygulamayı GitHub’a yükleyin.
Bir Back4app hesabı oluşturun.
Bir Back4app konteyneri oluşturun.
Back4app’a GitHub erişimi verin.
Express.js deposunu seçin ve uygulamanızı dağıtın.


Leave a reply

Your email address will not be published.