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

Следующим шагом является установка приложения Node.js на нашем сервере. В директории с файлом playbook.yml создайте файл с именем app.js и добавьте в него следующий код:

// Load the express module.
var express = require('express'),

// Respond to requests for / with 'Hello World'.
app.get('/', function(req, res){
    res.send('Hello World!');
});

// Listen on port 80 (like a true web server).
app.listen(80);
console.log('Express server started successfully.');

Поскольку это приложение зависит от Express (http framework Node), нам необходимо сообщить NPM об этой зависимости в файле package.json в том же каталоге, что и app.js:

{
    "name": "examplenodeapp",
    "description": "Example Express Node.js app.",
    "author": "Jeff Geerling <[email protected]>",
    "dependencies": {
        "express": "3.x.x"
    },
    "engine": "node >= 0.10.6"
}

Для того, чтобы скопировать файлы приложения с локальной машины на сервер и для устанвки необходимых NPM пакетов, добавьте в свой playbook, следующие инструкции:

- name: Ensure Node.js app folder exists.
  file: "path={{ node_apps_location }} state=directory"

- name: Copy example Node.js app to server.
  copy: "src=app dest={{ node_apps_location }}"

- name: Install app dependencies defined in package.json.
  npm: path={{ node_apps_location }}/app

Во-первых, мы проверяем, что каталог, в котором будет установлено приложение, существует, используя модуль file. Переменная {{ node_apps_location }}, используемая в каждой команде, может быть определена в разделе vars в верхней части нашего playbook, в инвентарном файле или в терминале строке при вызове ansible-playbook.

Во-вторых, мы копируем весь каталог приложения на сервер, используя команду copy.

Модуль copy работает хорошо с одиночными файлами или небольшими группами файлов, так же с каталогами с небольшой вложенностью. При копировании сотен файлов или глубоко вложенных структур каталогов copy откажется выполнять задание или выполнит его с ошибками. В таких случаях рекомендуется использовать модуль synchronize.

В-третьих, мы используем npm, без дополнительных аргументов, кроме пути к приложению. Таким образом сообщая NPM о необходимости анализа файла package.json и установки всех зависимостей.

results matching ""

    No results matching ""