Развертывание приложения 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 и установки всех зависимостей.