Bir Node.js uygulaması nasıl barındırılır?
Bu makalede Node.js ve özellikle IaaS, PaaS ve CaaS olmak üzere dağıtım seçenekleri hakkında konuşacağız. Seçeneklerin her birini analiz edeceğiz ve bu bulut hizmetlerini sunan en popüler satıcılardan bazılarına bakacağız.
Makalenin ikinci bölümünde, basit bir Node.js uygulamasının nasıl oluşturulacağını, dockerize edileceğini ve Back4app Containers‘a nasıl dağıtılacağını öğreneceğiz.
Contents
- 1 Node.js nedir?
- 2 Node.js uygulaması nerede barındırılır?
- 3 Bir Node.js uygulaması nasıl barındırılır?
- 4 Sonuç
- 5 SSS
- 6 Node.js nedir?
- 7 Node.js dağıtım seçenekleri nelerdir?
- 8 Bir Node.js uygulaması nasıl barındırılır?
Node.js nedir?
Node.js, JavaScript’i bir web tarayıcısının dışında çalıştırmanıza olanak tanıyan, platformlar arası, açık kaynaklı bir sunucu ortamıdır. Eşzamansız olay güdümlü bir mimariye sahiptir ve Google’ın V8 JavaScript Motoru üzerinde çalışır. Bu iki özellik onu son derece performanslı ve ölçeklenebilir hale getirir.
Node.js’den önce JavaScript geliştiricileri yalnızca ön uç kodu üzerinde çalışabiliyordu. Arka uçların başka bir programlama dilinde yazılması gerektiğinden bu oldukça zahmetliydi.
Bunun da ötesinde şirketlerin hem ön uç hem de arka uç mühendisleri istihdam etmesi gerekiyordu. Ancak 2009’da Node.js’nin piyasaya sürülmesiyle JavaScript geliştiricileri tam yığın geliştiriciler haline geldi.
Node’un çok sayıda kullanım alanı vardır. Sunucu çalışma zamanı, sunucu tarafı komut dosyası oluşturma, web oyunları, RESTful API’ler oluşturma, gerçek zamanlı uygulamalar ve daha fazlası için kullanılabilir. PayPal, Uber, Netflix ve LinkedIn gibi çok sayıda teknoloji şirketi tarafından kullanılmaktadır.
Node, hızı, ölçeklenebilirliği, geniş modül ve kütüphane ekosistemi, olgunluğu ve büyük topluluğu nedeniyle yaygın olarak kullanılmaktadır.
Bununla birlikte, karmaşık görevler için düşük performans, kararsız API ve güçlü bir kütüphane destek sisteminin olmaması gibi birkaç sınırlama ile birlikte gelir.
Node.js avantajları ve dezavantajları hakkında daha fazla bilgi edinmek için Node.js Uygulaması Nasıl Dağıtılır? (BaaS yaklaşımı)
Node.js uygulaması nerede barındırılır?
Node uygulamaları çeşitli bulut bilişim hizmetlerinde barındırılabilir. Node.js uygulamalarını dağıtmak için en popüler seçenekler şunlardır:
- Hizmet Olarak Altyapı
- Hizmet Olarak Platform
- Hizmet Olarak Konteynerler
Node uygulamaları için en iyi dağıtım seçeneğinin olmadığını unutmayın. Nihayetinde seçim, proje gereksinimlerinize, bütçenize ve istediğiniz soyutlama düzeyine bağlıdır.
Şimdi söz konusu bulut bilişim modellerinin her birine bakalım.
IaaS (Hizmet Olarak Altyapı)
Hizmet olarak altyapı (IaaS), bir bulut sağlayıcısının internet üzerinden bilgi işlem kaynakları sunduğu bir bulut bilişim modelidir.
IaaS kullanıldığında müşterinin sunucular, sanallaştırma, depolama ve ağ oluşturma konusunda endişelenmesine gerek kalmaz. IaaS sağlayıcıları genellikle kullandığın kadar öde fiyatlandırma modelini izler ve daha ucuz bulut hizmeti modellerinden biridir.
IaaS en az soyutlanmış seçenektir, bu nedenle son derece esnek ve özelleştirilebilirdir. Bunun dezavantajı, müşterinin kendi işletim sisteminden, uygulamalarından ve verilerinden sorumlu olmasıdır. Bu seçenek yeni başlayanlar için Node.js uygulaması barındırmak için uygun değildir, çünkü yeterli miktarda sistem yönetimi bilgisi gerektirir.
Amazon Web Services (AWS)
Amazon Web Services (AWS), Amazon tarafından sağlanan isteğe bağlı bir bulut bilişim platformudur. Sanal bilgisayarlar, nesne depolama, veritabanları, ML/AI araçları, ağ oluşturma, görüş ve daha fazlası dahil olmak üzere çok çeşitli bulut hizmetleri sunar.
Bu yazının yazıldığı sırada AWS, yaklaşık %32’lik pazar payı ile en popüler bulut bilişim platformudur. Trend olan IaaS çözümleri şunlardır:
- Amazon EC2 (Elastic Compute Cloud), yüksek düzeyde yapılandırılabilir sanal bilgisayarları döndürmek için kullanılır.
- Amazon S3 (Bulut Nesne Depolama) kullanımı kolay ve ölçeklenebilir nesne depolama sağlar.
- Amazon VPC (Sanal Özel Bulut) müşterilerin yalıtılmış sanal ağlar oluşturmasına olanak tanır.
Üretime hazır bir Node uygulamasını AWS’ye dağıtmak için büyük olasılıkla farklı IaaS ve PaaS çözümlerini birleştirmeniz gerekecektir.
Google Cloud Platform
Google Cloud Platform (GCP), Node.js’yi barındırmak için uygun olan bir diğer popüler bulut bilişim platformudur. On yıldan daha uzun bir süre önce piyasaya sürülen olgun ve istikrarlı bir platformdur.
GCP çok çeşitli IaaS, PaaS, CaaS ve BaaS çözümleri sunar. Google’ın Gmail, Slides ve Docs gibi son kullanıcı ürünlerinin çoğu GCP üzerinde çalışır.
En popüler IaaS ürünleri şunlardır:
- Google GKE (Compute Engine) müşterilerin sanal makineler oluşturmasına, yönetmesine ve çalıştırmasına olanak tanır.
- Google GCS (Bulut Depolama) yapılandırılmamış verilerin depolanması için yönetilen bir hizmettir.
- Google Persistent Disk, sanal makine örnekleri için güvenilir, yüksek performanslı bir blok depolama alanıdır.
AWS’de olduğu gibi, bir uygulamayı dağıtmak için birden fazla GCP ürününü birleştirmeniz gerekir.
Microsoft Azure
Microsoft Azure ya da sadece Azure, Microsoft tarafından sunulan ve Node.js’yi barındırmak için harika bir seçenek olan bir bulut bilişim platformudur. Bilgi işlem, depolama, yapay zeka, makine öğrenimi, vizyon, Nesnelerin İnterneti ve benzeri alanlarda 200’den fazla ürüne sahiptir. Appinventiv’in araştırmasına göre %22’lik bir pazar payına sahiptir.
Popüler IaaS teklifleri Azure Sanal Makineler, Azure Depolama ve Azure Yedekleme’dir.
PaaS (Hizmet Olarak Platform)
Hizmet Olarak Platform (PaaS), kullanıcıların bir bulut ortamında uygulama geliştirmesine, yönetmesine ve sunmasına olanak tanıyan bir bulut bilişim modelidir. Bunun da ötesinde PaaS sağlayıcıları genellikle uygulama geliştirme, özelleştirme ve test için çok çeşitli önceden oluşturulmuş araçlar sunar.
PaaS’ın kullanımı IaaS’a göre daha kolaydır ve fazla sistem yönetimi bilgisi gerektirmez. PaaS kullanarak yönetilen veritabanlarından, otomatik yedeklemelerden ve yük dengeleyicilerden de yararlanabilirsiniz. PaaS’ın dezavantajları arasında satıcıya kilitlenme riski ve IaaS’a kıyasla daha düşük düzeyde esneklik ve kontrol yer alır.
Heroku
Heroku piyasadaki en popüler PaaS’tır. 2007’de kurulmuştur ve ilk PaaS çözümlerinden biridir. Java, Node.js, PHP, Go, Scala ve Python gibi çeşitli programlama dillerini desteklemektedir. Platformun kullanımı son derece kolaydır, harika ölçeklendirme yetenekleri sağlar ve büyük bir eklenti sistemine sahiptir.
Platform, 2022’nin sonlarına kadar web uygulamaları için ücretsiz PostgreSQL ve Redis örnekleriyle birlikte ücretsiz bir plan sunuyordu. Ne yazık ki dolandırıcılık ve botlara karşı koymak için ücretsiz planı iptal ettiler.
Heroku’nun eksileri ise piyasadaki diğer çözümlere kıyasla pahalı olması, satıcı kilitlenmesi riskinin bulunması ve platformun iyi bir bölgesel destekten yoksun olmasıdır (kurumsal bir kullanıcı değilseniz).
Render
Render, tüm uygulamalarınızı ve web sitelerinizi oluşturmak ve çalıştırmak için birleşik bir buluttur. Kaygan bir kullanıcı arayüzüne sahiptir ve kullanımı son derece kolaydır. Render ile ilgili en iyi şey, statik web siteleri, web uygulamaları ve hatta PostgreSQL ve Render örnekleri için ücretsiz barındırma sağlamasıdır.
Render’ın dezavantajları nispeten yeni bir platform olması, ücretsiz katmandaki uygulamaların açılmasının uzun sürmesi ve kötü bölgesel destek (sadece 4 bölge).
CaaS (Hizmet Olarak Konteynerler)
Containers as a Service (CaaS), konteynerleştirilmiş yazılımı kolayca oluşturmanıza, çalıştırmanıza, dağıtmanıza ve yönetmenize olanak tanıyan bir bulut bilişim modelidir. Yazılım genellikle Docker teknolojisi kullanılarak konteynerleştirilir. Bu yaklaşım ilk kurulum gerektirir, ancak bundan sonra kullanımı son derece kolaydır.
Back4app Containers
Back4app Containers, dockerized uygulamaları kolayca dağıtmanıza olanak tanıyan bir Containers as a Service (CaaS) platformudur. Yerleşik bir CI/CD sistemine, mükemmel GitHub entegrasyonuna sahiptir ve Node.js sunucu barındırma için harika bir seçenektir.
Bir uygulamayı Back4app Containers’a dağıtmak, deponuzu içe aktarmak ve bir düğmeye tıklamak kadar kolaydır. Platform, ücretsiz bir katman ve ilerledikçe ölçeklenen ücretli katmanlar sunar.
Amazon Elastic Container Service (ECS)
Amazon Elastic Container Service (ECS), konteynerleri düzenlemeye yönelik kapsamlı bir hizmettir. Kapsayıcılı uygulamalarınızı dağıtmayı, yönetmeyi, gözlemlemeyi ve ölçeklendirmeyi basitleştirir. Platform nispeten ucuzdur ve diğer AWS ürünlerine zaten aşina iseniz kullanımı oldukça kolaydır.
Google Kubernetes Engine (GKE)
Google Kubernetes Engine (GKE) gelişmiş ve otomatik bir Kubernetes hizmetidir. Platform son derece ölçeklenebilirdir ve herhangi bir sitenin trafik ihtiyaçlarını karşılamanıza olanak tanır. GKE’nin en büyük iki dezavantajı, kullanımının o kadar kolay olmaması ve nispeten pahalı olmasıdır.
Bir Node.js uygulaması nasıl barındırılır?
Bu bölümde, bir Node.js uygulaması oluşturacak, dockerize edecek ve Back4app Containers‘a dağıtacağız.
Proje Tanıtımı
GitHub kullanıcı istatistiklerini almak için basit bir Node.js RESTful API oluşturacağız. API, kullanıcının GitHub bilgilerinin yanı sıra takipçi sayısını, takip ettiklerini ve aldığı yıldızları da döndürecektir.
API, bir Node.js web uygulama çatısı olan Express kullanılarak uygulanacak. Test ettikten sonra, onu Dockerize edeceğiz ve Back4app Containers‘a dağıtacağız.
Sadece dağıtım süreciyle ilgileniyorsanız, ilk iki bölümü atlamaktan çekinmeyin.
Init Projesi
Öğreticiyi takip etmek için Node.js’nin yüklü olması gerekir. Henüz sahip değilseniz Node.js web sitesinden indirmekten çekinmeyin.
İlk olarak, yeni bir dizin oluşturun ve bu dizine gidin:
$ mkdir express-github-stats && cd express-github-stats
Karmaşık bir Express uygulaması üzerinde çalışıyorsanız, büyük olasılıkla bunu Express uygulama oluşturucu aracılığıyla oluşturmak isteyeceksiniz. Bu araç, şablonlar, yönlendirme ve daha fazlası gibi gelişmiş Express uygulamaları oluşturmak için gereken her şeyi ayarlar.
Ardından, uygulama için bir package.json oluşturmak üzere npm init
‘ i
çalıştırın:
$ npm init
Bu komut size paket sürümü, açıklaması vb. hakkında bir dizi soru soracaktır. Doldurabilir ya da sadece birkaç kez ENTER tuşuna basabilirsiniz.
Express’i kullanmak istediğimiz için onu yükleyelim:
$ npm install express
Proje kök dizininde index.js adında yeni bir dosya oluşturun:
// index.js
const express = require("express");
const app = express();
app.get("/", (req, res) => {
res.send("Back4app rocks!");
});
app.listen(3000, () => {
console.log("App listening on port 3000")
});
Bu basit betik, 3000
numaralı bağlantı noktasını dinleyen yeni bir Express uygulamasını başlatır. Bunun da ötesinde, Back4app rocks!
mesajını döndüren dizin rotasını(/
) tanımlar. Eğer bir rota mevcut değilse 404
hatası döndürülür.
Test etmek için sunucuyu çalıştırın:
$ node index.js
Ardından favori web tarayıcınızı açın ve http://localhost:3000 adresine gidin.
Node.js uygulamalarını geliştirirken çalıştırmanın daha iyi bir yolu Nodemon kullanmaktır. Nodemon, dosya değişiklikleri algılandığında Node.js uygulamanızı otomatik olarak yeniden başlatan bir araçtır.
Kod Uygulaması
Web uygulamamızın iki URL’si olacak:
/
API bilgilerini döndürür/
/ belirli bir kullanıcının GitHub bilgilerini ve istatistiklerini döndürür
İlk olarak, dizin uç noktasını aşağıdaki gibi değiştirin:
// index.js
// ...
app.get("/", (req, res) => {
return res.json({
name: "express-github-stats",
description: "simple github user stats fetcher",
version: "1.0.0",
});
});
Ardından, index.js dosyasının alt kısmında kullanıcı uç noktasını tanımlayın:
// index.js
// ...
app.get("/:username", async (req, res) => {
const username = req.params["username"];
return res.json({
username: username,
});
});
Bu uç nokta, URL’den kullanıcı adını alır ve JSON biçiminde döndürür.
GitHub API
GitHub kullanıcı istatistiklerini almak için öncelikle API‘lerinin nasıl çalıştığına bir göz atmamız gerekiyor. Sayfayı açar ve navigasyonda ilerlerseniz Kullanıcılar bölümünü hızlıca bulacaksınız.
Kullanıcı bilgilerini almak aşağıdaki isteği göndermek kadar kolaydır:
$ curl -L https://api.github.com/users/<username>
# For example:
# curl -L https://api.github.com/users/duplxey
Bunu kodumuzda uygulamak için tarayıcı ve Node.js için vaat tabanlı bir HTTP istemcisi olan Axios ‘u kullanacağız.
NPM kullanarak yükleyin:
$ npm install axios
Ardından, index.js dosyasının en üstüne bağımlılık olarak ekleyin:
const axios = require("axios");
Son olarak, kullanıcı uç noktasını aşağıdaki gibi değiştirin:
// index.js
// ...
app.get("/:username", async (req, res) => {
const username = req.params["username"];
try {
const user = await axios({
method: "get",
url: `https://api.github.com/users/${username}`,
});
const { login, name, location, followers, following } = user.data;
return res.json({
username: login,
name: name,
location: location,
followers: followers,
following: following,
});
} catch (e) {
console.error(e);
return res.status(400).json({
detail: "Oops, something went wrong. Check the console for more information.",
});
}
});
Bu kod, GitHub API’sine bir GET
isteği göndermek için Axios’u kullanır. Daha sonra alınan verileri yeniden yapılandırır ve JSON biçiminde döndürür.
Test
Uygulamanın çalışıp çalışmadığını test etmek için önce sunucuyu yeniden başlatın ve ardından aşağıdaki komutu çalıştırın:
$ curl -L http://localhost:3000/duplxey/
Alternatif olarak web tarayıcınızda URL’yi ziyaret edebilirsiniz.
Yukarıdaki komut size benzer bir yanıt vermelidir:
{
"username": "duplxey",
"name": "Nik Tomazic",
"location": "Slovenia, Europe",
"followers": 108,
"following": 11,
}
Dockerize Uygulaması
Bu makale bölümünde, Node.js uygulamasını Dockerize edeceğiz.
.dockerignore
Projemiz, imaja dahil edilmemesi gereken bazı dosya ve dizinler içerir. Bunları hariç tutmak için proje kökünde aşağıdaki gibi bir .dockerignore dosyası oluşturabiliriz:
.git/
.idea/
node_modules/
Bu .dockerignore dosyası .git, .idea ve node_modules dizinlerini hariç tutar. Bir .dockerignore dosyası .gitignore dosyalarına benzer şekilde çalışır.
Yok saymak istediğiniz ek dosya ve dizinler varsa dosyayı buna göre değiştirin.
Dockerfile
Dockerfile, Docker’a bir konteynerin nasıl inşa edilmesi gerektiğini söyleyen talimatları tanımlamamızı sağlayan düz bir metin dosyasıdır. Temel imajı, çevresel değişkenleri, komutları ve daha fazlasını belirtmemizi sağlar.
Aşağıdaki içeriğe sahip bir Dockerfile oluşturun:
FROM node:18-alpine
# set the working directory
WORKDIR /app
# copy over the dependency files
COPY package.json ./
COPY package-lock.json ./
RUN npm install --production
ENV NODE_ENV="production"
# copy over the project
COPY . .
EXPOSE 3000
CMD ["node", "index.js"]
Bu Dockerfile, temel imaj olarak node:18-alpine
kullanır, çalışma dizinini ayarlar, package.json dosyasını kopyalar, bağımlılıkları yükler ve projeyi oluşturur. Son olarak, bir Node.js sunucusu başlatır ve 3000
numaralı bağlantı noktasını açar.
Node.js uygulamalarını docker’lama hakkında daha fazla bilgi için resmi Back4app dokümanlarına göz atın.
Test
Sonraki adımlar Docker ‘ın kurulu olmasını gerektirecektir.
Önce görseli oluşturun ve etiketleyin:
$ docker build --tag express-github-stats:1.0 .
Görüntüleri listeleyin ve express-github-stats
adlı yeni bir görüntü görüp göremediğinizi kontrol edin:
$ docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
express-github-stats 1.0 5fcb7e4a87a1 2 minutes ago 182MB
Ardından, yeni bir konteyner başlatmak için görüntüyü kullanın:
$ docker run -it -p 3000:3000 -d express-github-stats:1.0
Argüman özeti:
- -konteyneri etkileşimli modda çalıştırır
-p 3000:3000
ana bilgisayardaki3000
numaralı bağlantı noktasını konteynerdeki3000
numaralı bağlantı noktasıyla eşleştirir-d
konteyneri ayrılmış modda çalıştırır (böylece terminali işgal etmez)
Son olarak, çalışan konteynerleri kontrol edin:
$ docker ps
CONTAINER ID IMAGE COMMAND CREATED PORTS
60cfegdfe84d express-github-stats:1.0 "entrypoint.s…" 4s ago 3000->3000/tcp
Tarayıcınızda http://localhost:3000/ adresine giderseniz web uygulamasını görmeniz gerekir.
GitHub’a itin
Aşağıdaki adımları gerçekleştirmek için bir GitHub hesabına ve Git ‘in yüklü olmasına ihtiyacınız olacak.
Devam edin ve GitHub hesabınıza giriş yapın. Giriş yaptıktan sonra depo oluşturma işlemini başlatmak için “daha fazla düğmesini” kullanın.
Uygun bir isim seçin, diğer her şeyi varsayılan olarak bırakın ve “Depo oluştur “a tıklayın.
Ardından, oluşturulan uzak URL’yi not edin:
Projemize geri dönelim ve kodu gönderelim.
İlk olarak, terminali açın ve yerel Git deposunu başlatın:
$ git init
Ardından, uzaktan kumandayı ekleyin, tüm dosyaları VCS’ye ekleyin ve yeni bir commit oluşturun:
$ git remote add origin <your_remote_url>
$ git add . && git commit -m "init"
Değiştirdiğinizden emin olun GitHub uzak URL’niz ile.
Son olarak, kodu buluta aktarın:
$ git push origin master
GitHub deponuzu tarayıcıda tekrar açarsanız kaynak kodunu görebilmeniz gerekir.
Uygulama Dağıtma
Back4app Containers’a bir uygulama dağıtmak için bir Back4app hesabına ihtiyacınız olacak.
Back4app hesabınıza giriş yaptığınızda uygulama kontrol panelinize yönlendirileceksiniz. Uygulama oluşturma sürecini başlatmak için “Yeni uygulama oluştur” düğmesine tıklayın.
Back4app BaaS ve CaaS çözümleri sunar. Bir konteyner konuşlandırdığımız için “CaaS” seçeneğini seçin:
Ardından, devam edin ve GitHub hesabınızı Back4app ile bağlayın (henüz yapmadıysanız). Ardından daha önce oluşturduğumuz depoyu içe aktarın.
Back4app Containers gelişmiş yapılandırmaya izin verir. Basit bir uygulama oluşturuyoruz, bu nedenle yalnızca uygulama adını sağlamamız gerekiyor. Uygulamayı dağıtmak için “Deploy “a tıklayın.
Uygulamanızın dağıtılması için yaklaşık 5 dakika bekleyin ve işte! Uygulamanız hazır olduğunda durum “Hazır” olarak değişecektir. Ekranın sol tarafındaki bağlantıya tıkladığınızda uygulama tarayıcınızı açacaktır.
Sonuç
Makale boyunca Node.js hakkında bilgi edindik ve farklı Node.js dağıtım seçeneklerini inceledik. Artık IaaS, PaaS ve CaaS arasındaki farkları açıklayabiliyor olmalısınız. Bunun da ötesinde, basit bir Node.js uygulamasını Back4app Containers’a nasıl dağıtacağınızı öğrendiniz.
Kaynak koduna GitHub reposundan erişilebilir.
SSS
Node.js nedir?
Node.js, JavaScript’i bir web tarayıcısı dışında çalıştırmanıza olanak tanıyan, çapraz platform destekli ve açık kaynaklı bir sunucu ortamıdır. Asenkron olay güdümlü bir mimariye sahiptir ve Google’ın V8 JavaScript Motoru üzerinde çalışır.
Node.js dağıtım seçenekleri nelerdir?
Node uygulamaları çeşitli platformlara dağıtılabilir. Genellikle bunları IaaS (AWS, GCP, Azure), PaaS (Heroku, DigitalOcean App Platform, Render) ve CaaS (Back4app Containers, ECS) çözümleri olarak ayırabiliriz.
Bir Node.js uygulaması nasıl barındırılır?
1. Uygulamayı kodlayın.
2. Uygulamayı Docker ile paketleyin.
3. İmajı yerel olarak oluşturun ve test edin.
4. Kodu GitHub deposuna gönderin.
5. Back4app Containers‘a kaydolun ve depoyu içe aktarın.
6. Ortamı yapılandırın ve dağıtımı gerçekleştirin.