از طریق منوی جستجو مطلب مورد نظر خود در وبلاگ را به سرعت پیدا کنید
برنامه های Node.js را مستقر کنید روی Google App EngineTL;DR; در این مقاله قصد داریم یک برنامه Node.js را اجرا کنیم روی Google App Engine و در process ببینید چگونه انجام می شود این یک نمایش گام به گام از راهاندازی محیط Google App Engine تا استقرار است. توجه: این آموزش نیاز به …
سرفصلهای مطلب
معرفی
TL;DR; در این مقاله قصد داریم یک برنامه Node.js را اجرا کنیم روی Google App Engine و در process ببینید چگونه انجام می شود
این یک نمایش گام به گام از راهاندازی محیط Google App Engine تا استقرار است.
NB: این آموزش نیاز به درک اولیه جاوا اسکریپت، Node.js، MongoDB، NPM و Express.js دارد.
می توانید کد منبع برنامه تمام شده را دریافت کنید اینجا.
Google App Engine چیست؟
Google App Engine، یک پلت فرم رایانش ابری (PaaS) که توسط گوگل منتشر شده است روی 7 آوریل 2008 به زبان های C++، PHP، Node.js و Python نوشته شده است.
Google App Engine یک محیط ایده آل برای توسعه دهندگان و سازمان ها فراهم می کند host برنامه های خود را بدون نیاز به فکر کردن در مورد زیرساخت، خرابی، یا مقیاس پذیری به یک میلیارد کاربر. Google App Engine همه اینها را فراهم می کند، و در حقیقت، شما نیازی به نگرانی در مورد سرور ندارید، فقط استقرار کنید و Google App Engine اکثر موارد دیگر را انجام خواهد داد. وقتی درخواست ها و تقاضاها زیاد باشد، Google App Engine به طور خودکار مقیاس و منابع بیشتری را به برنامه شما اختصاص می دهد.
Google App Engine یک محیط اجرای ابری است که به شما امکان می دهد به راحتی برنامه های وب استاندارد را اجرا و اجرا کنید. این ابزارها را برای نظارت، مقیاس بندی و زیرساخت های متعادل کننده بار فراهم می کند تا بتوانید تمرکز کنید روی ساختن برنامه های وب خود به جای سرورهایی که آنها را اجرا می کنند.
ایجاد یک نمونه Google App Engine (نمونه ژنرال دوم)
برای شروع استفاده از Google App Engine، ما قصد داریم یک پروژه Google Cloud Platform را راه اندازی کنیم:
- ورود به حساب Google شما. اگر قبلاً یکی را ندارید، باید ثبت نام.
- برو به موتور برنامه سایت اینترنتی
- ممکن است دیالوگی برای استفاده از نسخه برنامه Google Cloud Console درخواست کند: «استفاده از برنامه» یا «اکنون نه». این به شما بستگی دارد که انتخاب خود را انجام دهید، اما ترجیحاً کلیک کنید روی “الان نه” برای ادامه.
- در صفحه نمایش داده شده، دو گزینه نمایش داده می شود: “ایجاد” یا “انتخاب”. برای این آموزش، ما در حال ایجاد یک پروژه جدید هستیم، کلیک کنید روی دکمه “ایجاد” اگر از حداکثر تعداد سهمیه پروژه های GCP خود فراتر رفته اید، باید یک پروژه را “انتخاب کنید”.
- نام پروژه خود را تایپ کنید روی فیلد متنی “نام پروژه”، در زیر فیلد متنی شناسه پروژه شما تولید شده توسط GCP بر اساس GCP خواهد بود روی نام پروژه شما کلیک روی دکمه “ایجاد” پس از اتمام.
- پس از چند ثانیه، صفحه ای با عنوان “انتخاب مکان” ظاهر می شود. در ویجت کشویی «انتخاب منطقه»، کلیک کنید روی آن را انتخاب کنید تا منطقه مورد نظر خود را انتخاب کنید، سپس کلیک کنید روی “بعد”.
- صفحه بعدی تا “فعال کردن صورتحساب” نشان داده می شود. کلیک روی “تنظیم صورتحساب”.
- یک گفتگوی مدال نشان داده می شود، کلیک کنید روی “ایجاد حساب صورتحساب”.
- نام حساب صورتحساب مورد نظر خود را وارد کنید روی پنجره بعدی یا می توانید با نام پیش فرض بروید.
- کشور خود را انتخاب کنید، USD به عنوان ارز پیش فرض انتخاب شده است، کلیک کنید روی دکمه “تأیید”.
- در پنجره بعدی، مشخصات شخصی و بانکی خود را وارد کنید
- کلیک روی دکمه “ارسال و فعال کردن صورتحساب”. اکنون، یک پروژه Google Cloud با فعال کردن صورتحساب ایجاد کردهایم.
حالا، کار ما تمام شد!
نصب Google Cloud Tools (Cloud SDK)
Google Cloud tools کیسهای پر از ابزارهای کاربردی است که همگی در راهاندازی و دسترسی به محصولات Google Cloud بسیار مفید هستند: Google Kubernetes، Google App Engine، Google Big Query از شما terminal. برای شروع نصب Cloud SDK، به Google Cloud SDKو نصب کننده SDK را برای سیستم عامل خود دانلود کنید.
Google Cloud SDK حاوی ابزارهایی مانند gcloud
، و gsutil
، اما ما از آن استفاده خواهیم کرد gcloud
ابزاری برای مقداردهی اولیه و استقرار برنامه ما.
این gcloud
ابزار شامل دستورات مختلفی است تا کاربران را قادر به انجام اقدامات مختلف کند روی یک پروژه Google Cloud:
- اطلاعات gcloud: اطلاعات مربوط به Cloud SDK، سیستم شما، کاربر وارد شده و پروژه فعال فعلی را نمایش می دهد.
- لیست احراز هویت gcloud: لیستی از حساب های Google فعال در Cloud SDK را نمایش می دهد.
- gcloud init: یک پروژه ابری گوگل را راه اندازی می کند.
- کمک gcloud: دستورات موجود در را نمایش می دهد
gcloud
و استفاده از آنها - لیست پیکربندی gcloud لیستی را نمایش می دهد
gcloud
پیکربندی.
خوب، کمی منحرف شدهایم، اجازه دهید به آنچه در دست داریم برگردیم، پس از دانلود نصبکننده Cloud SDK، نصبکننده را راهاندازی کنید و دستورات را دنبال کنید، مطمئن شوید که گزینههای مربوطه ارائه شده را بررسی کردهاید. پس از اتمام نصب، نصب کننده دستور را اجرا می کند gcloud init
در یک terminal پنجره
این دستور شما را از طریق یک سری تنظیمات هدایت می کند. گزینه ای برای ورود به سیستم به شما ارائه می دهد:
You must log in to continue. Would you like to log in (Y/n)?
Y را تایپ کرده و کلید Enter را بزنید. مرورگر وب پیشفرض شما را راهاندازی میکند، جایی که حساب Google دلخواه خود را انتخاب میکنید. پس از آن نمایش داده خواهد شد روی را terminal لیست پروژه های گوگل شما:
You are logged in as (YOUR_GOOGLE_ACCOUNT_EMAIL):
pick cloud project to use:
(1) (YOUR_PROJECT_NAME)
(2) Create a new project
Please enter numeric choice or text value (must exactly match list item):
NB: gcloud
اگر فقط یک پروژه داشته باشید، به طور خودکار انتخاب می شود.
در مرحله بعد، از شما خواسته می شود که یک منطقه موتور محاسباتی پیش فرض را انتخاب کنید:
Which Google Compute Engine zone would you like to use project default:
(1) asia-east1-a
...
(16) us-east1-b
...
(25) Do not select default zone
Please enter numeric choice or text value (must exactly match list item):
پس از انتخاب منطقه پیش فرض خود، gcloud
یک سری چک می کند و چاپ می کند:
Your project default Compute Engine zone has been set to (YOUR_CHOICE_HERE)
You can change it by running (gcloud config set compute/zone NAME)
Your project default Compute Engine region has been set to (YOUR_CHOICE_HERE)
You can change it by running (gcloud config set compute/region NAME)
Google Cloud SDK شما پیکربندی شده و آماده استفاده است!
برنامه Node.js ما را راه اندازی کنید
اکنون، پروژه Google Cloud ما پیکربندی شده است. بیایید برنامه Node.js خود را راه اندازی کنیم. ما قصد داریم یک API RESTful برای فیلم ایجاد کنیم پلنگ سیاه. وای!!! این عالی خواهد بود. در 16 فوریه 2018 اولین فیلم ابرقهرمانی سیاهپوست مارول در سینماهای سراسر جهان اکران شد و تا زمان نگارش این مقاله 903 میلیون دلار در باکس آفیس به دست آورد و آن را به عنوان چهل و پنجمین فیلم پرفروش تمام دوران و پرفروشترین فیلم تبدیل کرد. در سال 2018
بیایید یک API بسازیم که کاراکترهای آن را برگرداند پلنگ سیاه.
نقطه پایانی API
-
شخصیت – این منبع در مورد شخصیت های Black Panther است.
- POST – /blackpanther/ یک نمونه Black Panther جدید ایجاد می کند.
- GET – /blackpanthers/ همه شخصیت های Black Panther را برمی گرداند.
- GET – /blackpanther/
<id>
شناسه کاراکتر Black Panther مشخص شده را برمی گرداند. - PUT – /blackpanther/
<id>
ویژگی های شخصیت پلنگ سیاه را به روز کنید. - حذف – /blackpanther/
<id>
یک شخصیت پلنگ سیاه را حذف کنید.
ساختار مدل شخصیت پلنگ سیاه
{
"alias": String,
"occupation": String,
"gender": String,
"place_of_birth": String,
"abilities": String,
"played_by": String,
"image_path": String
}
نقطه پایانی API را برای Black Panther API ایجاد کنید
برای شروع، اجازه دهید با ایجاد پوشه پروژه خود شروع کنیم، پوشه خود را باز کنید terminal و دستور زیر را اجرا کنید:
$ mkdir _nodejs_gae
سپس به پوشه بروید:
$ cd _nodejs_gae
برنامه Node.js با استفاده از npm init
فرمان اکنون، ما در پوشه پروژه خود هستیم، دستور زیر را برای نمونه سازی یک برنامه Node.js اجرا کنید:
$ npm init -y
این دستور یک برنامه Node.js را با استفاده از اعتبار از پیش پیکربندی شده شما ایجاد می کند. در حال حاضر پوشه شما به شکل زیر خواهد بود:
|- _nodejs_gae
|- package.json
برای پیروی از بهترین شیوه ها، برنامه خود را به کنترلرها، مدل ها و مسیرها تقسیم می کنیم. بله، می دانم که برای این برنامه آزمایشی زیاده روی می کند، اما همیشه خوب است که آن را به درستی انجام دهید.
بیایید خودمان را ایجاد کنیم index.js
فایل (نقطه ورودی سرور ما) – touch index.js
پوشه های زیر را ایجاد کنید:
mkdir routes
mkdir ctrls
mkdir models
اکنون داریم routes
، ctrls
، و models
پوشه ها
- مسیرها: تمام مسیرهای تعریف شده در API ما را نگه می دارد و تابع کنترل کننده اختصاص داده شده به درخواست HTTP منطبق را فراخوانی می کند.
- ctrls: اکشن را برای دریافت داده های درخواستی از مدل ها نگه می دارد.
- مدل ها: مدل پایگاه داده API ما را نگه می دارد.
ما یک مسیر، یک مدل و یک کنترلر مرتبط با API خود خواهیم داشت. برای ایجاد فایل ها دستورات زیر را اجرا کنید:
touch routes/route.js
touch ctrls/ctrl.js
touch models/Character.js
ساختار پوشه ما اکنون باید به شکل زیر باشد:
|- _nodejs_gae
|- routes/
|- route.js
|- ctrls/
|- ctrl.js
|- models/
|- Character.js
|- index.js
|- package.json
خوب، بیایید وابستگی های خود را نصب کنیم:
npm i express -S
npm i mongoose -S
npm i body-parser -S
ما اکنون، خود را باز می کنیم Character.js
و کد زیر را در آن قرار دهید:
const mongoose = require('mongoose')
let Character = new mongoose.Schema({
alias: String,
occupation: String,
gender: String,
place_of_birth: String,
abilities: String,
played_by: String,
image_path: String
})
module.exports = mongoose.model('Character', Character)
در اینجا، ما طرح مدل خود را اعلام کردیم Character
استفاده کردن mongoose
کلاس طرحواره. مدل ما صادراتی بود تا بتوانیم import و از Schema در هر نقطه از برنامه ما استفاده کنید.
خوب، بیایید کد را به ما اضافه کنیم ctrl.js
فایل:
const Character = require('./../models/Character')
module.exports = {
getCharacter: (req, res, next) => {
Character.findById(req.params.id, (err, Character) => {
if (err)
res.send(err)
else if (!Character)
res.send(404)
else
res.send(Character)
next()
})
},
getAllCharacters: (req, res, next) => {
Character.find((err, data) => {
if (err) {
res.send(err)
} else {
res.send(data)
}
next()
})
},
deleteCharacter: (req, res, next) => {
Character.findByIdAndRemove(req.params.id, (err) => {
if (err)
res.send(err)
else
res.sendStatus(204)
next()
})
},
addCharacter: (req, res, next) => {
(new Character(req.body)).save((err, newCharacter) => {
if (err)
res.send(err)
else if (!newCharacter)
res.send(400)
else
res.send(newCharacter)
next()
})
},
updateCharacter: (req, res, next) => {
Character.findByIdAndUpdate(req.params.id, req.body, (err, updatedCharacter) => {
if (err)
res.send(err)
else if (!updatedCharacter)
res.send(400)
else
res.send(req.body)
next()
})
}
}
در اینجا، 4 ما را اعلام کرد CRUD
توابع y: getCharacter
، deleteCharacter
، getAllCharaccters
، و updateCharacter
. همانطور که از نام آنها برمی آید آنها اجرا می کنند CREATE
، READ
، UPDATE
و DELETE
اقدامات روی ما پلنگ سیاه API.
خوب، بیایید در را باز کنیم route.js
فایل و کد زیر را در آن قرار دهید:
const ctrl = require('./../ctrls/ctrl')
module.exports = (router) => {
/** get all Black Panther characters */
router
.route('/blackpanthers')
.get(ctrl.getAllCharacters)
/** save a Black Panther character */
router
.route('/blackpanther')
.post(ctrl.addCharacter)
/** get a Black Panther character */
router
.route('/blackpanther/:id')
.get(ctrl.getCharacter)
/** delete a Black Panther character */
router
.route('/blackpanther/:id')
.delete(ctrl.deleteCharacter)
/** update a Black Panther character */
router
.route('/blackpanther/:id')
.put(ctrl.updateCharacter)
}
در بالا دو مسیر اساسی تعریف کرده ایم(/blackpanther
، و /blackpanther/:id
) با روش های مختلف.
همانطور که می بینیم، ما به کنترلر نیاز داریم تا هر یک از متدهای مسیرها بتوانند تابع کنترل کننده مربوطه خود را فراخوانی کنند.
در نهایت فایل index.js خود را باز می کنیم. در اینجا، ما اجزاء را به یکی متصل می کنیم. ما import عملکرد مسیرها در معرض ما قرار می گیرد routes/route.js
، و عبور می کنیم express.Router()
به عنوان یک استدلال برای ما routes
تابع. سپس به a متصل می شویم MongoDB
به عنوان مثال و سپس با شماره تماس بگیرید app.listen()
روش راه اندازی سرور
const express = require('express')
const mongoose = require('mongoose')
const bodyParser = require('body-parser')
const app = express()
const router = express.Router()
const routes = require('./routes/route')
const url = process.env.MONGODB_URI || "mongodb://localhost:27017/blackpanther"
mongoose.connect(url, {
//useMongoClient: true
})
routes(router)
app.use(bodyParser.json())
app.use('/api/v1', router)
const port = process.env.PORT || 1000
app.listen(port, () => {
console.log(`Black Panther API v1: ${port}`)
})
mLab Datastore را به نقاط پایانی API خود اضافه کنید
در تمام این مدت ما از یک نمونه محلی MongoDB datastore استفاده کرده ایم. ما برنامه خود را مستقر کرده و به آن دسترسی خواهیم داشت روی یک زیرساخت رایانش ابری، بنابراین هیچ داده محلی وجود نخواهد داشت. به منظور تداوم دادههایمان، میخواهیم یک پلتفرم Data as a Service (DaaS)، mLab را انتخاب کنیم.
- رفتن به mLab
- اگر قبلاً ندارید یک حساب کاربری ایجاد کنید
- به داشبورد خود بروید، یک پایگاه داده جدید ایجاد کنید
- URL اتصال پایگاه داده را کپی کنید
اکنون که رشته URL اتصال mLab خود را داریم، اکنون آن را اصلاح می کنیم index.js فایل:
...
const url = process.env.MONGODB_URI || "mongodb://<DB_USER>:<DB_PASSWORD>@<MLAB_URL>.mlab.com:<MLAB_PORT>/<DB_NAME>"
...
برنامه ما را به صورت محلی از طریق cURL آزمایش کنید
برای تست برنامه ما روی ماشین محلی ما دستور زیر را برای راه اندازی سرور اجرا کنید:
$ node .
چیزی شبیه به این نمایش خواهد داد روی شما terminal:
$ node .
Black Panther API v1: 1000
باشه، حالا ما پلنگ سیاه API آماده و در حال اجرا است، ما می توانیم استفاده کنیم cURL
برای تست API ها در اینجا ما برای ایجاد یک API جدید پست می کنیم پلنگ سیاه شخصیت:
curl --request POST \
--url http://localhost:1000/api/v1/blackpanther \
--header 'content-type: application/json' \
--data '{"alias":"tchalla","occupation":"King of Wakanda","gender":"male","place_of_birth":"Wakanda","abilities":"enhanced strength","played_by":"Chadwick Boseman"}'
به عنوان یک وظیفه برای خواننده، شما باید بروید روی و بنویس حلقه دستورات برای سایر نقاط پایانی API نیز وجود دارد.
برنامه ما را مستقر کنید
حالا ما nodejs
برنامه آماده استقرار است، اما قبل از انجام این کار، تنظیماتی وجود دارد که باید آنها را تغییر داده و اضافه کنیم. اول، ما می خواهیم یک را ایجاد کنیم app.yaml
فایل به پروژه ما
این app.yaml
فایل یک پیکربندی زمان اجرا برای محیط App Engine است. app.yaml
ما را قادر می سازد تا محیط App Engine خود را پیکربندی کنیم (یا Node.js، GO، PHP، Ruby، Python، .NET یا Java Runtime) قبل از استقرار.
با app.yaml
فایل، می توانیم کارهای زیر را انجام دهیم:
- منابع شبکه و دیسک را اختصاص دهید
- محیط انعطاف پذیر را انتخاب کنید
- تعداد هسته های CPU را که باید تخصیص داده شود را انتخاب کنید
- اندازه memory_gb (RAM) را مشخص کنید
لیست طولانی است، می توانید به منبع بروید در حال پیکربندی برنامه خود با app.yaml برای مشاهده تنظیمات پیکربندی کامل توسط Google.
خوب، بیایید ایجاد کنیم app.yaml
فایل در پروژه ما:
touch app.yaml
باز کن app.yaml
فایل کنید و مطالب زیر را اضافه کنید:
runtime: nodejs
env: flex
manual_scaling:
instances: 1
resources:
cpu: 1
memory_gb: 0.5
disk_size_gb: 10
با نگاهی به پیکربندی بالا، به App Engine می گوییم که برنامه ما اجرا خواهد شد روی محیط زمان اجرا Node.js، همچنین محیط باید انعطاف پذیر باشد.
در حال دویدن روی محیط انعطاف پذیر هزینه هایی را به همراه دارد، بنابراین ما برای کاهش هزینه ها با اضافه کردن موارد زیر را کاهش دادیم:
...
manual_scaling:
instances: 1
resources:
cpu: 1
memory_gb: 0.5
disk_size_gb: 10
در اینجا، ما فقط یک نمونه، یک هسته CPU، رم 0.5G و اندازه دیسک 10G را مشخص می کنیم.
این برای اهداف آزمایشی ایده آل است و برای استفاده در تولید نیست.
بعد باید a اضافه کنیم start
در scripts
بخش ما package.json
، این توسط زمان اجرا Node.js برای شروع برنامه ما در هنگام استقرار استفاده می شود.
بدون start
ویژگی، چک کننده زمان اجرا Node.js خطای “تشخیص برنامه انجام نشد: خطا: چک کننده nodejs: نه شروع در بخش اسکریپت ها در package.json و نه server.js یافت نشد” را پرتاب می کند.
بیایید در را باز کنیم package.json
و اضافه کنید start
در scripts
کلید:
...
"scripts": {
"start": "node .",
"test": "echo \"Error: no test specified\" && exit 1"
},
...
پس از این، ما اکنون آماده استقرار هستیم. برای استقرار برنامه ما، این دستور را اجرا کنید:
$ gcloud app deploy
آزمایش برنامه مستقر ما با cURL
برای آزمایش API برنامه Node.js مستقر شده، باید از آن استفاده کنیم آدرس مورد نظر Google App Engine به ما داد.
curl --request POST \
--url http://YOUR_TARGET_URL.appspot.com/api/v1/blackpanther \
--header 'content-type: application/json' \
--data '{"alias":"tchalla","occupation":"King of Wakanda","gender":"male","place_of_birth":"Wakanda","abilities":"enhanced strength","played_by":"Chadwick Boseman"}'
با حلقه ما فرستادیم POST
درخواست و الف پلنگ سیاه بار کاراکتر به برنامه Node.js مستقر شده ما، با استفاده از آدرس مورد نظر به عنوان ما آدرس اینترنتی پارامتر.
نقطه پایانی API ما تابع POST را اجرا می کند، بارگذاری را در ما ذخیره می کند mLab پایگاه داده و نتیجه را برای ما ارسال می کند:
{
"alias":"tchalla",
"occupation":"King of Wakanda",
"gender":"male",
"place_of_birth":"Wakanda",
"abilities":"enhanced strength",
"played_by":"Chadwick Boseman","_id":"5aa3a3905cd0a90010c3e1d9",
"__v":0
}
تبریک می گویم! ما اولین برنامه Node.js خود را با موفقیت در Google App Engine اجرا کردیم.
نتیجه
ما در این مقاله دیدیم که موتور اپلیکیشن گوگل چقدر زندگی ما را آسان و بدون استرس می سازد. همچنین، چگونه تنها با چند دستور یک موتور زمان اجرا قدرتمند را راه اندازی کرده و برنامه خود را به کار می گیرد روی آی تی. نیازی نیست به مقیاس، منابع، پهنای باند و بقیه فکر کنید.
App Engine این تفکر را برای شما انجام می دهد.
برای مشخص کردن موارد خوبی که Google App Engine به ما ارائه می دهد:
- گزارش خطای خوب
- امنیت API را ساده می کند
- قابلیت اطمینان و پشتیبانی
- سهمیه های استفاده برای برنامه های کاربردی رایگان
لطفا در صورت داشتن هرگونه سوال یا نظر در قسمت نظرات بپرسید.
(برچسبها برای ترجمه)# جاوا اسکریپت
منتشر شده در 1403-01-26 21:44:03