1. Giriş
Bu yayında,Cloud Run ve MongoDB'nin tamamen sunucusuz bir MEAN yığını uygulama geliştirme deneyimi sağlamak için nasıl birlikte çalıştığını göreceğiz. MongoDB'nin çoklu bulut uygulama veri platformu olan Cloud Run ve MongoDB Atlas ile sunucusuz bir MEAN uygulaması oluşturmayı öğreneceğiz.
Cloud Run nedir?
Cloud Run, tamamen yönetilen bir platformda herhangi bir dilde (Go, Python, Java, Node.js, .NET ve Ruby dahil) yazılmış ölçeklenebilir container mimarisine alınmış uygulamalar oluşturup dağıtmanıza olanak tanır. Cloud Run, aşağıdakileri yapmamızı sağlayarak rakiplerinden ayrılıyor:
- İsteğe duyarlı birden fazla durum bilgisiz container'da kodu paketleme ve HTTP istekleriyle çağırma
- Yalnızca kullandığınız kaynaklar için ödeme yaparsınız.
- İstediğiniz programlama dilini, işletim sistemi kitaplığını veya ikili dosyayı destekler.
Tüm bağlamdaki diğer özellikler için bu bağlantıyı inceleyin.
MongoDB Atlas ile sunucusuz veritabanı
MongoDB, bu sorunu çözmek için Atlas'ta yeni bir tümüyle yönetilen, sunucusuz veritabanı dağıtımı olan sunucusuz örnekleri kullanıma sundu. Sunucusuz örneklerle altyapı hakkında hiç düşünmeniz gerekmez. Veritabanınızı dağıtmanız yeterlidir. Veritabanınız, talebe göre sorunsuz bir şekilde ölçeklenir ve herhangi bir yönetim gerektirmez. En iyi yanı ise yalnızca çalıştırdığınız işlemler için ücretlendirilirsiniz. Mimarimizi tamamen sunucusuz hale getirmek için Cloud Run ve MongoDB Atlas özelliklerini birleştireceğiz.
MEAN Stack
MEAN yığını, tamamen JavaScript ve JSON ile tam yığın web uygulamaları oluşturmaya yönelik bir teknoloji yığınıdır. MEAN yığını dört ana bileşenden oluşur: MongoDB, Express, Angular ve Node.js.
- Veri depolama işleminden MongoDB sorumludur.
- Express.js, API'ler oluşturmak için kullanılan bir Node.js web uygulaması çerçevesidir.
- Angular, istemci tarafında JavaScript platformudur.
- Node.js, sunucu tarafında JavaScript çalışma zamanı ortamıdır. Sunucu, veritabanına bağlanmak, verileri almak ve depolamak için MongoDB Node.js sürücüsünü kullanır.
Ne oluşturacaksınız?
MongoDB, Express JS, Angular JS ve Node JS'de tam yığınlı bir Çalışan-İş Rolü uygulaması yazacaksınız. Şunları içerir:
- Node JS ve Express JS'de kapsayıcıya alınmış bir sunucu uygulaması
- AngularJS'de oluşturulmuş, container mimarisine alınmış bir istemci uygulaması
- Her iki uygulama da Cloud Run'da dağıtılır.
- Sunucu uygulaması, MongoDB NodeJS sürücüsünü kullanarak sunucusuz MongoDB örneğine bağlanır.
- Server API, veritabanıyla okuma-yazma etkileşimlerini gerçekleştirir.
- İstemci uygulaması, Çalışan-İş Rolü uygulamasının kullanıcı arayüzüdür.
Neler öğreneceksiniz?
- Sunucusuz MongoDB örnekleri oluşturma
- Cloud Run projesi oluşturma
- Google Cloud Run'da web uygulamalarını dağıtma
- MEAN yığını uygulaması oluşturma ve dağıtma
2. Şartlar
3. MongoDB Serverless örneğini ve veritabanını oluşturma
- Başlamak için Google Cloud'da MongoDB Atlas'ı kullanmaya başlayın.

- Kaydolduktan sonra yeni bir sunucusuz örnek oluşturmak için "Veritabanı Oluştur" düğmesini tıklayın. Aşağıdaki yapılandırmayı seçin:

- Sunucusuz örneğiniz sağlandıktan sonra çalışır durumda olduğunu görürsünüz.

- Bağlantı IP adresi ve veritabanı kullanıcısı eklemek için "Bağlan" düğmesini tıklayın.
- Bu codelab'de "Her yerden erişime izin ver" ayarını kullanacağız. MongoDB Atlas, bir dizi güvenlik ve erişim özelliğiyle birlikte gelir. Bu özellikler hakkında daha fazla bilgiyi güvenlik özellikleri dokümanı makalesinde bulabilirsiniz.
- Veritabanı kullanıcı adı ve şifresi için istediğiniz kimlik bilgilerini kullanın. Bu adımlar tamamlandıktan sonra aşağıdakileri görmeniz gerekir:

- "Bir bağlantı yöntemi seçin" düğmesini tıklayıp "Uygulamanızı bağlayın"ı seçerek devam edin.

- Gördüğünüz bağlantı dizesini kopyalayın ve şifreyi kendi şifrenizle değiştirin. Bu dizeyi, aşağıdaki bölümlerde veritabanımıza bağlanmak için kullanacağız.
4. Cloud Run projesi oluşturma
- Öncelikle Cloud Console'da oturum açın, yeni bir proje oluşturun veya mevcut bir projeyi yeniden kullanın.
- Oluşturduğunuz projenin proje kimliğini unutmayın.
- Aşağıda, proje oluştururken proje kimliğinizi görebileceğiniz yeni proje sayfasını gösteren bir resim yer almaktadır.

- Ardından, Cloud Shell'den Cloud Run API'yi etkinleştirin:
- Cloud Shell'i Cloud Console'dan etkinleştirin. Cloud Shell'i Etkinleştir'i tıklamanız yeterlidir.
- Cloud Shell'e bağlandıktan sonra kimliğinizin doğrulandığını ve projenin, proje kimliğinize ayarlandığını görürsünüz. Herhangi bir nedenle proje ayarlanmamışsa şu komutu verin:
gcloud config set project PROJECT_ID

- Aşağıdaki komutu kullanın:
gcloud services enable run.googleapis.com
- Kod referansları için Cloud Shell ve Cloud Shell Düzenleyici'yi kullanacağız. Cloud Shell Düzenleyici'ye erişmek için Cloud Shell Terminali'nden Düzenleyiciyi Aç'ı tıklayın:

5. MEAN Stack projesini klonlama
- Çalışan yönetimi web uygulaması dağıtacağız. REST API, Express ve Node.js ile; web arayüzü ise Angular ile oluşturulur. Veriler, daha önce oluşturduğumuz MongoDB Atlas örneğinde depolanır.
- Cloud Shell terminalinde aşağıdaki komutu çalıştırarak proje deposunu klonlayın:
git clone https://github.com/mongodb-developer/mean-stack-example.git
6. Express ve Node.js REST API'yi dağıtma
Docker Yapılandırma Dosyası
- İlk olarak, Express REST API için bir Cloud Run hizmeti dağıtacağız. Dağıtımımız için en önemli dosya Docker yapılandırma dosyasıdır. Şimdi bu duruma göz atalım:
mean-stack-example/server/Dockerfile
# Use the official lightweight Node.js 12 image.
# https://hub.docker.com/_/node
FROM node:17-slim
WORKDIR /usr/app
COPY ./ /usr/app
# Install dependencies and build the project.
RUN npm install
RUN npm run build
# Run the web service on container startup.
CMD ["node", "dist/server.js"]
- Yapılandırma, Node.js'yi kurar, projeyi kopyalar ve oluşturur. Kapsayıcı başlatıldığında aşağıdaki komut hizmeti başlatır.
node dist/server.js
- Yeni bir Cloud Run dağıtımı başlatmak için sol kenar çubuğundaki Cloud Run simgesini tıklayın:

- Ardından, Cloud Run'a dağıt simgesini tıklayın:

- Hizmet yapılandırmasını aşağıdaki gibi doldurun:
- Hizmet adı: node-express-api
- Dağıtım platformu: Cloud Run (tümüyle yönetilen)
- Bölge: Gecikmeyi azaltmak için veritabanı bölgenize yakın bir bölge seçin.
- Kimlik doğrulama: Kimliği doğrulanmamış çağrılara izin ver
- Düzeltme Ayarları bölümünde, Gelişmiş Ayarları Göster'i tıklayarak ayarları genişletin:
- Container bağlantı noktası: 5200
- Ortam değişkenleri. Aşağıdaki anahtar/değer çiftini ekleyin ve kendi MongoDB Atlas dağıtımınızın bağlantı dizesini eklediğinizden emin olun:
ATLAS_URI:mongodb+srv:/<username>:<password>@sandbox.pv0l7.mongodb.net/meanStackExample?retryWrites=true&w=majority
- Derleme ortamı için Cloud Build'ü seçin.
- Son olarak, Build Settings (Derleme Ayarları) bölümünde şunları seçin:
- Oluşturucu: Docker
- Docker: mean-stack-example/server/Dockerfile
- İlk Cloud Run hizmetinizin dağıtımını takip etmek için Dağıt düğmesini ve ardından Ayrıntılı Günlükleri Göster'i tıklayın.
- Derleme tamamlandıktan sonra dağıtılan hizmetin URL'sini görürsünüz:

- URL'yi açıp sonuna "/employees" ifadesini ekleyin.
- Şu anda veritabanında herhangi bir belge bulunmadığından boş bir dizi görmeniz gerekir.
Ekleyebilmek için kullanıcı arayüzünü dağıtalım.
7. Angular web uygulamasını dağıtma
Angular uygulamamız istemci dizininde yer alıyor. Dağıtmak için Nginx sunucusunu ve Docker'ı kullanacağız. İçeriğinizi doğrudan bir CDN'ye (içerik dağıtım ağı) sunabileceğiniz için Angular uygulama dağıtımınızda Firebase Hosting'i kullanma seçeneği de vardır.
Yapılandırma Dosyaları
Yapılandırma dosyalarına göz atalım:
mean-stack-example/client/nginx.conf
events{}
http {
include /etc/nginx/mime.types;
server {
listen 8080;
server_name 0.0.0.0;
root /usr/share/nginx/html;
index index.html;
location / {
try_files $uri $uri/ /index.html;
}
}
}
- Nginx yapılandırmasında varsayılan bağlantı noktasını (8080) ve başlangıç dosyasını (index.html) belirtiriz.
mean-stack-example/client/Dockerfile
FROM node:17-slim AS build
WORKDIR /usr/src/app
COPY package.json package-lock.json ./
# Install dependencies and copy them to the container
RUN npm install
COPY . .
# Build the Angular application for production
RUN npm run build --prod
# Configure the nginx web server
FROM nginx:1.17.1-alpine
COPY nginx.conf /etc/nginx/nginx.conf
COPY --from=build /usr/src/app/dist/client /usr/share/nginx/html
# Run the web service on container startup.
CMD ["nginx", "-g", "daemon off;"]
- Docker yapılandırmasında Node.js bağımlılıklarını yüklüyor ve projeyi oluşturuyoruz. Ardından, oluşturulan dosyaları kapsayıcıya kopyalayıp Nginx hizmetini yapılandırır ve başlatırız.
- Son olarak, istemci uygulamamızın REST API'ye istek gönderebilmesi için URL'yi yapılandırmamız gerekir. URL'yi projede yalnızca tek bir dosyada kullandığımız için URL'yi sabit kodlayacağız. Alternatif olarak, ortam değişkenini pencere nesnesine ekleyip oradan erişebilirsiniz.
mean-stack-example/client/src/app/employee.service.ts
...
@Injectable({
providedIn: 'root'
})
export class EmployeeService {
// Replace with the URL of your REST API
private url = 'https://node-express-api-vsktparjta-uc.a.run.app';
...
- Cloud Run'a dağıtmaya hazırız. Aşağıdaki yapılandırma ayarlarıyla yeni bir dağıtım başlatın:
- Service Settings: Create a service - Hizmet adı: angular-web-app
- Dağıtım platformu: Cloud Run (tümüyle yönetilen)
- Kimlik doğrulama: Kimliği doğrulanmamış çağrılara izin ver
- Derleme ortamı için Cloud Build'ü seçin.
- Son olarak, Build Settings (Derleme Ayarları) bölümünde şunları seçin:
- Oluşturucu: Docker
- Docker: mean-stack-example/client/Dockerfile
- Dağıt düğmesini tekrar tıklayın ve uygulamanız buluta gönderilirken günlükleri izleyin. Dağıtım tamamlandığında istemci uygulamasının URL'sini görmeniz gerekir.

- URL'yi açın ve uygulamanızla oynayın.

8. Temizleme
Bu yayında kullanılan kaynaklar için Google Cloud hesabınızın ücretlendirilmesini istemiyorsanız şu adımları uygulayın.
MongoDB örneklerini sonlandırma
- MongoDB örneği kümelerine gidin.
- Oluşturduğunuz kümeyi veya örneği seçin.
- Küme adının yanındaki üç nokta simgesini tıklayın ve listeden Sonlandır'ı seçin.
Cloud Run dağıtımlarını silme
- Google Cloud Console'da Cloud Run sayfasına gidin.
- Silmek istediğiniz Cloud Run hizmetini seçin.
- Konsolun üst kısmındaki silme simgesini tıklayın.
9. Tebrikler
Tebrikler! Cloud Run'da MEAN yığını web uygulamasını başarıyla oluşturdunuz.