برنامه MEAN Stack بدون سرور در MongoDB Atlas و Cloud Run

۱. مقدمه

در این پست، خواهیم دید که چگونه Cloud Run و MongoDB برای ایجاد یک تجربه توسعه برنامه MEAN stack کاملاً بدون سرور، با هم ترکیب می‌شوند. یاد خواهیم گرفت که چگونه یک برنامه MEAN بدون سرور را با Cloud Run و MongoDB Atlas ، پلتفرم داده برنامه چند ابری MongoDB، بسازیم.

کلود ران چیست؟

Cloud Run شما را قادر می‌سازد تا برنامه‌های کانتینری مقیاس‌پذیر نوشته شده به هر زبانی (از جمله Go، Python، Java، Node.js، .NET و Ruby) را بر روی یک پلتفرم کاملاً مدیریت‌شده بسازید و مستقر کنید. Cloud Run با فراهم کردن موارد زیر، ما را از سایر رقبا متمایز می‌کند:

  • کد را در چندین کانتینر بدون وضعیت که از درخواست آگاه هستند، بسته‌بندی کنید و آن را از طریق درخواست‌های HTTP فراخوانی کنید.
  • فقط برای منابع دقیقی که استفاده می‌کنید هزینه دریافت می‌شود
  • پشتیبانی از هر زبان برنامه‌نویسی یا هر کتابخانه سیستم عامل مورد نظر شما، یا هر نوع فایل باینری

برای مشاهده‌ی ویژگی‌های بیشتر در متن کامل، این لینک را بررسی کنید.

پایگاه داده بدون سرور با MongoDB Atlas

MongoDB نمونه‌های بدون سرور، یک پایگاه داده کاملاً مدیریت‌شده و بدون سرور جدید در Atlas را برای حل این مشکل راه‌اندازی کرد. با نمونه‌های بدون سرور، هرگز لازم نیست در مورد زیرساخت فکر کنید - کافیست پایگاه داده خود را مستقر کنید و به طور یکپارچه بر اساس تقاضا افزایش و کاهش مقیاس خواهد یافت - نیازی به مدیریت عملی ندارد. و بهترین بخش، فقط برای عملیاتی که اجرا می‌کنید هزینه دریافت خواهید کرد. برای اینکه معماری ما واقعاً بدون سرور باشد، قابلیت‌های Cloud Run و MongoDB Atlas را با هم ترکیب خواهیم کرد.

پشته متوسط

پشته MEAN یک پشته فناوری برای ساخت برنامه‌های وب فول‌استک (full-stack) است که کاملاً با جاوا اسکریپت و JSON ساخته شده است. پشته MEAN از چهار جزء اصلی تشکیل شده است: MongoDB، Express، Angular و Node.js.

  • MongoDB مسئول ذخیره سازی داده ها است.
  • Express.js یک چارچوب برنامه وب Node.js برای ساخت APIها است.
  • انگولار یک پلتفرم جاوا اسکریپت سمت کلاینت است.
  • Node.js یک محیط اجرای جاوا اسکریپت سمت سرور است. سرور از درایور MongoDB Node.js برای اتصال به پایگاه داده و بازیابی و ذخیره داده‌ها استفاده می‌کند.

آنچه خواهید ساخت

شما یک برنامه کامل نقش کارمند-شغل را در MongoDB، Express JS، Angular JS و Node JS خواهید نوشت که شامل موارد زیر است:

  • یک برنامه سرور در Node JS و Express JS، به صورت کانتینری
  • یک برنامه کلاینت ساخته شده در AngularJS، به صورت کانتینر شده
  • هر دو برنامه در Cloud Run مستقر هستند
  • برنامه سرور با استفاده از درایور NodeJS در MongoDB به نمونه Serverless MongoDB متصل می‌شود.
  • API سرور تعاملات خواندن و نوشتن با پایگاه داده را انجام می‌دهد.
  • برنامه کلاینت، رابط کاربری برنامه نقش کارمند-شغل است.

آنچه یاد خواهید گرفت

  • چگونه یک نمونه MongoDB بدون سرور ایجاد کنیم؟
  • نحوه راه اندازی یک پروژه Cloud Run
  • نحوه استقرار برنامه‌های وب در Google Cloud Run
  • نحوه ایجاد و استقرار یک برنامه MEAN Stack

۲. الزامات

  • یک مرورگر، مانند کروم یا فایرفاکس
  • یک پروژه Google Cloud Platform که شامل نمونه Cloud Run و MongoDB Atlas شما باشد
  • بخش بعدی شامل فهرستی از مراحل ایجاد برنامه MEAN Stack است.

۳. نمونه و پایگاه داده MongoDB Serverless را ایجاد کنید

e5cc775a49f2fb0.png

  • پس از ثبت نام، برای ایجاد یک نمونه جدید بدون سرور، روی دکمه "ساخت پایگاه داده" کلیک کنید. پیکربندی زیر را انتخاب کنید:

fca10bf6f031af7a.png

  • پس از آماده‌سازی نمونه بدون سرور، باید آن را در حال اجرا ببینید.

d13c4b8bdd9569fd.png

  • برای اضافه کردن آدرس IP اتصال و کاربر پایگاه داده، روی دکمه "اتصال" کلیک کنید.
  • برای این آزمایشگاه کد، ما از تنظیم «اجازه دسترسی از هرجایی» استفاده خواهیم کرد. MongoDB Atlas با مجموعه‌ای از ویژگی‌های امنیتی و دسترسی ارائه می‌شود. می‌توانید در مقاله مستندات ویژگی‌های امنیتی، اطلاعات بیشتری در مورد آنها کسب کنید.
  • از اعتبارنامه‌های دلخواه خود برای نام کاربری و رمز عبور پایگاه داده استفاده کنید. پس از اتمام این مراحل، باید موارد زیر را مشاهده کنید:

bffeef16de1d1c2.png

  • با کلیک بر روی دکمه «انتخاب روش اتصال» و سپس انتخاب «اتصال برنامه» ادامه دهید.

75771e64427acd5e.png

  • رشته اتصالی که می‌بینید را کپی کنید و رمز عبور را با رمز عبور خودتان جایگزین کنید. ما از آن رشته برای اتصال به پایگاه داده خود در بخش‌های بعدی استفاده خواهیم کرد.

۴. یک پروژه Cloud Run راه‌اندازی کنید

  • ابتدا، وارد Cloud Console شوید، یک پروژه جدید ایجاد کنید یا از یک پروژه موجود دوباره استفاده کنید.
  • شناسه پروژه‌ای که ایجاد کرده‌اید را به خاطر بسپارید
  • در زیر تصویری وجود دارد که صفحه پروژه جدید را نشان می‌دهد، جایی که می‌توانید شناسه پروژه خود را هنگام ایجاد آن مشاهده کنید.

f32dbd4eb2b7501e.png

  • سپس، Cloud Run API را از Cloud Shell فعال کنید:
  • Cloud Shell را از کنسول Cloud فعال کنید. کافیست روی Activate Cloud Shell کلیک کنید.
  • پس از اتصال به Cloud Shell، باید ببینید که از قبل احراز هویت شده‌اید و پروژه از قبل روی شناسه پروژه شما تنظیم شده است. اگر به هر دلیلی، پروژه تنظیم نشده است، کافیست دستور زیر را اجرا کنید:
gcloud config set project PROJECT_ID

3da173210a016316.png

  • از دستور زیر استفاده کنید:
gcloud services enable run.googleapis.com
  • ما از Cloud Shell و Cloud Shell Editor برای ارجاع کد استفاده خواهیم کرد. برای دسترسی به Cloud Shell Editor، روی Open Editor از ترمینال Cloud Shell کلیک کنید:

۸۳۷۹۳a۵۷۷f۰۸e۴d۴.png

۵. کلون کردن پروژه پشته MEAN

  • ما یک برنامه وب مدیریت کارمندان را مستقر خواهیم کرد. REST API با Express و Node.js ساخته شده است؛ رابط وب با Angular؛ و داده‌ها در نمونه MongoDB Atlas که قبلاً ایجاد کردیم ذخیره می‌شوند.
  • با اجرای دستور زیر در ترمینال Cloud Shell، مخزن پروژه را کلون کنید:
git clone https://github.com/mongodb-developer/mean-stack-example.git

۶. پیاده‌سازی Express و Node.js REST API

فایل پیکربندی داکر

  • ابتدا، یک سرویس Cloud Run برای Express REST API مستقر خواهیم کرد. مهمترین فایل برای استقرار ما، فایل پیکربندی Docker است. بیایید نگاهی به آن بیندازیم:

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"]
  • این پیکربندی، Node.js را راه‌اندازی می‌کند و پروژه را کپی و می‌سازد. وقتی کانتینر شروع به کار می‌کند، دستور زیر سرویس را شروع می‌کند.
node dist/server.js
  • برای شروع یک استقرار جدید Cloud Run، روی آیکون Cloud Run در نوار کناری سمت چپ کلیک کنید:

48c73bda3aa4ea02.png

  • سپس، روی آیکون Deploy to Cloud Run کلیک کنید:

cde124ba8ec23b34.png

  • پیکربندی سرویس را به صورت زیر پر کنید:
  • نام سرویس: node-express-api
  • پلتفرم استقرار: Cloud Run (کاملاً مدیریت‌شده)
  • منطقه: برای کاهش تأخیر، منطقه‌ای نزدیک به منطقه پایگاه داده خود را انتخاب کنید
  • احراز هویت: اجازه دادن به فراخوانی‌های احراز هویت نشده
  • در قسمت تنظیمات ویرایش، روی نمایش تنظیمات پیشرفته کلیک کنید تا آنها را باز کنید:
  • بندر کانتینر: ۵۲۰۰
  • متغیرهای محیطی. جفت کلید-مقدار زیر را اضافه کنید و مطمئن شوید که رشته اتصال را برای استقرار MongoDB Atlas خود اضافه می‌کنید:
ATLAS_URI:mongodb+srv:/<username>:<password>@sandbox.pv0l7.mongodb.net/meanStackExample?retryWrites=true&w=majority
  • برای محیط ساخت، Cloud Build را انتخاب کنید.
  • در نهایت، در بخش تنظیمات ساخت، موارد زیر را انتخاب کنید:
  • سازنده: داکر
  • داکر: mean-stack-example/server/Dockerfile
  • برای پیگیری استقرار اولین سرویس Cloud Run خود، روی دکمه Deploy و سپس Show Details Logs کلیک کنید!
  • پس از اتمام ساخت، باید URL سرویس مستقر شده را مشاهده کنید:

759c69ba52a85b10.png

  • URL را باز کنید و '/employees' را به انتهای آن اضافه کنید.
  • شما باید یک آرایه خالی ببینید زیرا در حال حاضر، هیچ سندی در پایگاه داده وجود ندارد.

بیایید رابط کاربری را مستقر کنیم تا بتوانیم مواردی را اضافه کنیم!

۷. برنامه وب Angular را مستقر کنید

برنامه Angular ما در دایرکتوری کلاینت قرار دارد. برای استقرار آن، از سرور Nginx و Docker استفاده خواهیم کرد. فقط یک نکته، گزینه‌ای برای استفاده از Firebase Hosting برای استقرار برنامه Angular شما نیز وجود دارد زیرا می‌توانید محتوای خود را مستقیماً به یک CDN (شبکه تحویل محتوا) ارائه دهید.

فایل‌های پیکربندی

بیایید نگاهی به فایل‌های پیکربندی بیندازیم:

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، پورت پیش‌فرض - ۸۰۸۰ - و فایل شروع - index.html - را مشخص می‌کنیم.

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، وابستگی‌های Node.js را نصب کرده و پروژه را می‌سازیم. سپس، فایل‌های ساخته شده را در کانتینر کپی می‌کنیم، سرویس Nginx را پیکربندی و شروع می‌کنیم.
  • در نهایت، باید URL را برای REST API پیکربندی کنیم تا برنامه کلاینت ما بتواند درخواست‌ها را به آن ارسال کند. از آنجایی که ما فقط از URL در یک فایل در پروژه استفاده می‌کنیم، URL را به صورت hardcode در می‌آوریم. به عنوان یک روش جایگزین، می‌توانید متغیر محیطی را به شیء window متصل کنید و از آنجا به آن دسترسی داشته باشید.

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 هستیم! یک استقرار جدید را با تنظیمات پیکربندی زیر شروع کنید:
      - Service Settings: Create a service
    
  • نام سرویس: angular-web-app
  • پلتفرم استقرار: Cloud Run (کاملاً مدیریت‌شده)
  • احراز هویت: اجازه دادن به فراخوانی‌های احراز هویت نشده
  • برای محیط ساخت، Cloud Build را انتخاب کنید.
  • در نهایت، در بخش تنظیمات ساخت، موارد زیر را انتخاب کنید:
  • سازنده: داکر
  • داکر: mean-stack-example/client/Dockerfile
  • دوباره روی دکمه‌ی Deploy کلیک کنید و گزارش‌های ارسال برنامه به فضای ابری را مشاهده کنید! وقتی استقرار کامل شد، باید URL برنامه‌ی کلاینت را ببینید.

5da1d7defc1082fc.png

  • URL را باز کنید و با برنامه خود کار کنید!

db154f1cd57e38f0.png

۸. تمیز کردن

برای جلوگیری از تحمیل هزینه به حساب Google Cloud خود برای منابع استفاده شده در این پست، این مراحل را دنبال کنید.

خاتمه دادن به نمونه‌های MongoDB

  1. به خوشه‌های نمونه MongoDB بروید
  2. کلاستر یا نمونه‌ای که ایجاد کرده‌اید را انتخاب کنید
  3. روی بیضی‌های کنار نام خوشه کلیک کنید و از لیست، گزینه Terminate را انتخاب کنید.

حذف استقرارهای Cloud Run

  1. به صفحه Cloud Run در کنسول Google Cloud بروید
  2. سرویس Cloud Run که می‌خواهید حذف کنید را انتخاب کنید.
  3. روی نماد حذف در بالای کنسول کلیک کنید

۹. تبریک

تبریک می‌گویم، شما با موفقیت برنامه وب MEAN Stack را روی Cloud Run ایجاد کردید!