Рубрики
Без рубрики

Разверните приложения Node.js на приложении Google App

Автор оригинала: Chidume Nnamdi.

Вступление

TL; DR; В этой статье мы собираемся развернуть приложение Node.js на приложении Google App и в процессе см. Как это сделано.

Это будет пошаговая демонстрация, начиная от настройки нашей среды двигателя Google App для развертывания.

NB : Это руководство требует базового понимания JavaScript, Node.js, MongoDB, NPM и Express.js.

Вы можете получить исходный код готового приложения здесь Отказ

Что такое приложение Google?

Двигатель Google App, A (PAAS) облачная вычислительная платформа, выпущенная Google 7 апреля 2008 года, написана на C ++, PHP, Node.js и Python.

Google App Engine обеспечивает идеальную среду для разработчиков и организаций для размещения своих приложений без необходимости думать о инфраструктуре, время простоя или масштабирования до миллиарда пользователей. Google App Engine обеспечивает все это, и, по правде говоря, вам не нужно беспокоиться о сервере, просто развертывание и приложение Google прилагают, будет справиться со всем остальным. Двигатель Google App будет автоматически масштабироваться и выделяет больше ресурсов к вашему приложению, когда запросы и спрос огромны.

Двигатель Google App – это облачная среда выполнения, которая позволяет легко развертывать и запустить стандартные веб-приложения. Он предоставляет инструменты для мониторинга, масштабирования и инфраструктуры балансировки нагрузки, поэтому вы можете сосредоточиться на создании ваших веб-приложений вместо серверов, которые запускают их.

Создайте экземпляр приложений Google (2-й генерал. Экземпляр)

Чтобы начать использование двигателя Google App, мы собираемся настроить проект платформы Google Cloud Platform:

  1. Войти к вашей учетной записи Google. Если у вас еще нет, вы должны Зарегистрируйтесь Отказ
  2. Перейти к Приложение Engine Веб-сайт
  3. Диалог может казаться требовательным использовать версию приложения Google Cloud Console: «Используйте приложение» или «не сейчас». Вам решать сделать ваш выбор, но желательно, нажмите «Не сейчас», чтобы продолжить.
  4. На экране появится, он представит два варианта: «Создать» или «Выбрать». Для этого учебника мы создаем новый проект, нажмите на кнопку «Создать». Если вы превысили максимальное количество вашей квоты проектов GCP, вы должны «выбрать» проект.
  5. Введите имя вашего проекта на текстовом поле «Имя проекта», под текстовым полем будет идентификатор проекта, сгенерированный GCP на основе имени вашего проекта. Нажмите на кнопку «Создать» при выполнении.
  6. Через несколько секунд экран отображается, чтобы «выбрать местоположение». На выпадающий виджет «Выберите регион» нажмите на него, чтобы выбрать предпочтительный регион, затем нажмите «Далее».
  7. Следующий экран отображается до «включения выставления счета». Нажмите на «Настройка биллинга».
  8. Модальный диалог отображается, нажмите «Создать аккаунт счетов».
  9. Введите ваше предпочтительное имя учетной записи биллинга в следующем окне или вы можете пойти с именем по умолчанию.
  10. Выберите вашу страну, USD был выбран по умолчанию в качестве валюты, нажмите на кнопку «Подтвердить».
  11. На следующем окне заполните свои данные, как личные, так и банковские данные
  12. Нажмите на кнопку «Отправить и включить биллинг». Теперь мы создали проект Google Cloud с включенным счетами.

Теперь мы сделаем!

Установка Google Cloud Tools (облако SDK)

Google Cloud Tools – это сумка, полная утилит, которые все очень полезны при настройке и доступа к продуктам Google Cloud: Google Kubernetes, Google App Engine, Google Big Proquery от вашего терминала. Чтобы начать устанавливать облако SDK, перейдите в Google Cloud SDK И загрузите установщик SDK для вашей ОС.

Google Cloud SDK содержит такие инструменты, как gcloud и ГЮТИЛ , но мы будем использовать gcloud Инструмент для инициализации и развертывания нашего приложения.

gcloud Инструмент содержит различные команды, чтобы позволить пользователям выполнять разные действия в проекте Google Cloud:

  • Информация GCloud : Отображает информацию о вашем облачном SDK, вашу систему, зарегистрированном пользователю и в текущем активном проекте.
  • GCLOUD Список авиг : Отображение списка учетных записей Google активно в облаке SDK.
  • gcloud init : Инициализирует проект Google Cloud.
  • GCloud Help : Отображает команды, доступные в gcloud и их использование.
  • Список конфигурации GCloud Отображает список gcloud конфигурации.

Хорошо, мы немного отстранены, давайте вернемся к тому, что у нас в руке, после загрузки установщика облачного SDK, запустите установщик и следуйте инструкциям, убедитесь, что вы проверяете соответствующие параметры. После завершения установки установщик запустит команду gcloud init в оконевом окне.

Эта команда приведет вас через серию конфигурации. Он представит вам возможность войти в систему:

You must log in to continue. Would you like to log in (Y/n)?

Введите «y» и нажмите клавишу Enter. Он запустит ваш веб-браузер по умолчанию, где вы выберете предпочитающую учетную запись Google. После этого он будет отображаться в списке терминалов ваших проектов Google:

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 для фильма Черная пантера Отказ WOOH !!! Это будет здорово. 16 февраля 2018 года первый фильм Marvel Black Superhero был премьером в кинотеатрах по всему миру, набрав огромные 903 миллиона долларов в бухгалтерском кабинете, по состоянию на время этого письма, что делает его 45-м самым уволенным фильмом всех времен и самых крутых фильмов В 2018 году.

Давайте построим API, которая вернет персонажей Черная пантера Отказ

API конечная точка

  1. Персонаж – Этот ресурс о черных символах пантеры.

    • Post -/BlackPanther/создает новую черную пантера экземпляра.
    • Get -/Blackpanthers/Возвращает все черные символы пантеры.
    • Получить -/Blackpanther/ Возвращает указанную черную символ символа пантеры.
    • Положить -/Blackpanther/ Обновите черную атрибуты символов пантеры.
    • Удалить -/BlackPanther/ Удалить черный символ пантера.

Черная структура модели символов пантеры

{
    "alias": String,
    "occupation": String,
    "gender": String,
    "place_of_birth": String,
    "abilities": String,
    "played_by": String,
    "image_path": String
}

Создание конечных точек API для Black Panter API

Чтобы начать, давайте начнем с создания нашей папки Project, откройте свой терминал и запустите следующую команду:

$ mkdir _nodejs_gae

Далее переходите в папку:

$ cd _nodejs_gae

Приложение Node.js инициализируется с использованием NPM init команда. Теперь мы находимся внутри нашей папки Project, запустите следующую команду для создания приложения Node.js:

$ npm init -y

Эта команда создает приложение Node.js, используя предварительно настроенные учетные данные. К настоящему времени ваша папка будет выглядеть так:

|- _nodejs_gae
    |- package.json

Чтобы следовать передовым опытам, мы собираемся разделить наше приложение в контроллеры, модели и маршруты. Да, я знаю, что это излишки для этого демо-приложения, но всегда хорошо, чтобы сделать это правильно.

Давайте создадим наш index.js Файл (наш сервер входной точки) – Нажмите index.js.

Создайте следующие папки:

  • MKDIR маршруты
  • MKDIR CTRLS.
  • MKDIR модели

У нас сейчас есть маршруты , Ctrls и модели папки.

  • маршруты : Удержит все маршруты, определенные в нашем API, и он позвонит функцию контроллера, назначенной соответствующим HTTP-запросу.
  • Ctrls : Будет держать действие, чтобы получить запрошенные данные из моделей.
  • модели : Удержит модель базы данных нашего API.

У нас будет один маршрут, одна модель и один контроллер, связанный с нашим API. Запустите следующие команды, чтобы создать файлы:

  • сенсорные маршруты/Route.js
  • Нажмите Ctrls/Ctrl.js
  • Touch Models/Charace.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

Теперь мы открываемся нашими Charace.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)

Здесь мы объявили нашу модель схемы Персонаж Использование мангуст Схема класса. Наша модель была экспортирована, чтобы мы могли импортировать и использовать схему в любом месте в нашем приложении.

Хорошо, давайте добавим код нашему 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 , getallcharacccters и UpdateCharacter Отказ Как их имена подразумевают, что они выполняют Создать , Читать , Обновить и Удалить Действия на нашем Черная пантера 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. Здесь мы связываем компоненты в один. Мы импортируем функцию маршрутов, подверженных нам в Маршруты/Route.js и мы проходим Express.Rooter () как аргумент для нашего маршруты функция. Далее мы подключаемся к Монгодб экземпляр и, тогда позвоните в 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}`)
})

Добавить DataStore MLAB на наши конечные точки API

Все это время мы использовали локальный экземпляр хранения данных MongoDB. Мы будем развертываться и доступ к нашему приложению на облачной вычислительной инфраструктуре, поэтому нет местного присутствующего хранения данных. Чтобы сохранить наши данные, мы собираемся выбрать данные в качестве платформы службы (DAAS), MLAB.

  • Перейти к Mlab.
  • Создайте учетную запись, если у вас их еще нет
  • Перейдите на вашу приборную панель, создайте новую базу данных
  • Скопируйте URL-адрес подключения к базе данных

Теперь, когда у нас есть наша строка URL-адреса подключения MLAB, мы теперь модифицируем index.js файл:

...
const url = process.env.MONGODB_URI || "mongodb://:@.mlab.com:/"
...

Проверьте свое приложение локально через Curl

Чтобы проверить наше приложение на нашей местной машине. Запустите следующую команду, чтобы запустить сервер:

$ node .

Это покажет что-то вроде этого на вашем терминале:

$ 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"}'

Как задача для читателя, вы должны продолжать и писать Curl Команды для других конечных точек API также.

Разверните наше приложение

Теперь наше Nodejs Приложение готово к развертыванию, но прежде чем мы сделаем это, есть конфигурации, которые мы должны настроить и добавить. Во-первых, мы собираемся создать App.yaml файл нашего проекта.

App.yaml Файл – это конфигурация выполнения для среды приложений. App.yaml Позволяет нам настроить нашу среду приложений (либо node.js, go, php, ruby, python, ete, php, ruby, python, .net или java) до развертывания.

С 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

Глядя на вышеуказанную конфигурацию, мы сообщаем приложению к приложению, что наше приложение будет работать на среде выполнения Node.js, также среда должна быть установлена на гибкость.

Бег на гибкой среде несет расходы, поэтому мы сократились, чтобы снизить затраты, добавив:

...
manual_scaling:
  instances: 1
resources:
  cpu: 1
  memory_gb: 0.5
  disk_size_gb: 10

Здесь мы указываем только один экземпляр, один CPU Core, 0,5 г RAM и размер диска 10G.

Это идеально подходит для целей тестирования и не для производства.

Далее мы должны добавить Начать В Сценарии Раздел нашего Package.json Используется это время выполнения Node.js, чтобы запустить наше приложение при развернутии.

Без Начать Свойство, проверка времени выполнения Node.js бросит «Ошибка обнаружения приложений: ошибка: Checkers Nodejs: ни запуска в разделе« Сценарии »в Package.json No Server.js были найдены« Ошибка ».

Давайте откроем Package.json и добавить Начать В Сценарии ключ:

...
    "scripts": {
        "start": "node .",
        "test": "echo \"Error: no test specified\" && exit 1"
    },
...

После этого мы теперь все настроены на развертывание. Чтобы развернуть наше приложение, запустите эту команду:

$ gcloud app deploy

Тестирование нашего развернутого приложения с завитым

Чтобы проверить наш развернутый API Node.js API, нам нужно будет использовать Целевой URL Двигатель Google App дал нам.

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"}'

С Curl Мы отправили Пост Запрос и A Черная пантера Рекламная нагрузка на символ к нашему развернутому приложению Node.js, используя Целевой URL Как наше URL параметр.

Наша конечная точка 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.

Заключение

В этой статье мы видели, насколько легко и без стресса Google App Engine делает нашу жизнь. Кроме того, как только с несколькими командами устанавливает мощный двигатель времени выполнения и разверните его приложение на нем. Не нужно думать о масштабировании, ресурсах, пропускной способности и остальном.

Приложение Двигатель делает для вас мышление.

Чтобы отметить, какие вкусности Google App Engine предлагает нам:

  1. Хорошая ошибка отчетности
  2. Упрощает безопасность API.
  3. Надежность и поддержка
  4. Использование квот для бесплатных приложений

Пожалуйста, не стесняйтесь спрашивать, есть ли у вас какие-либо вопросы или комментарии в разделе комментариев.