Если вы не знакомы с StrongLoop, вам может понадобиться проверить мой предыдущий пост:
http://www.technicaladvices.com/2015/09/12/build-and-customize-your-first-api-with-strongloop-in -Меньше чем-7-минут /
Развертывание приложений StrongLoop в Bluemix довольно сложно и требует от вас внесения некоторых изменений в ваше приложение. В этом посте обсуждаются шаги, необходимые для развертывания приложения StrongLoop, использующего MongoDB в IBM Bluemix.
1. Создайте свое приложение StrongLoop в Bluemix
Прежде чем развертывать локальное приложение Strongloop в IBM Bluemix, обязательно создайте приложение Bluemix «StrongLoop Arc» из Boilerplates Bluemix, как показано ниже.
Затем создайте и привяжите сервис MongoDB к созданному вами приложению StrongLoop в IBM Bluemix.
Затем загрузите стартовый код приложения со "Start Coding"
страницы, извлеките zip-файл и получите manifest.yml
файл, который в моем случае выглядит следующим образом.
applications:
- path: .
memory: 512M
instances: 1
domain: mybluemix.net
name: iReport
host: iReport
disk_quota: 1024M
services:
- iReport-MongoDB
Скопируйте manifest.yml
файл в каталог вашего локального приложения StrongLoop.
2. Используйте VCAP_APP_HOST и VCAP_APP_PORT в файле Server.js
В server.js
файле в server
каталоге обязательно используйте process.env.VCAP_APP_HOST
и process.env.VCAP_APP_PORT
как показано в коде ниже.
...
boot(app, __dirname, function(err) {
if (err) throw err;
//Use Bluemix host and port ...
var host = process.env.VCAP_APP_HOST || 'localhost';
var port = process.env.VCAP_APP_PORT || 1337;
app.set('host', host);
app.set('port', port);
// start the server if `$ node server.js`
if (require.main === module)
app.start();
});
3. Используйте атрибут «Пуск» в Package.json
Если вы не используете "start"
атрибут в своем package.json
файле, вы можете столкнуться со следующим исключением при переносе приложения в IBM Bluemix.
[App/0] ERR npm ERR! Linux 3.19.0-25-generic
[App/0] ERR npm ERR! argv "/home/vcap/app/vendor/node/bin/node" "/home/vcap/app/vendor/node/bin/npm" "start"
[App/0] ERR npm ERR! node v0.12.7
[App/0] ERR npm ERR! npm v2.11.3
[App/0] ERR npm ERR! missing script: start
[App/0] ERR npm ERR!
[App/0] ERR npm ERR! If you need help, you may report this error at:
[App/0] ERR npm ERR! <https://github.com/npm/npm/issues>
[App/0] ERR npm ERR! Please include the following file with any support request:
[App/0] ERR npm ERR! /home/vcap/app/npm-debug.log
[DEA/14] ERR Instance (index 0) failed to start accepting connections
Это мой package.json
файл, который использует "start"
атрибут следующим образом.
{
"name": "iReport-Services",
"version": "1.0.0",
"scripts": {
"pretest": "jshint .",
"start": "node server/server.js"
},
"dependencies": {
"compression": "^1.0.3",
"cors": "^2.5.2",
"loopback": "^2.22.0",
"loopback-boot": "^2.6.5",
"loopback-component-explorer": "^2.1.0",
"loopback-connector-mongodb": "^1.13.0",
"loopback-datasource-juggler": "^2.39.0",
"serve-favicon": "^2.0.1"
},
"devDependencies": {
"jshint": "^2.5.6"
},
"repository": {
"type": "",
"url": ""
},
"description": "iReport-Services"
}
4. Обновите файл Datasources.json в каталоге сервера приложения.
Под server
каталогом находится файл, datasources.json
который содержит конфигурации источника данных приложения, отредактируйте этот файл, чтобы указать приложению Bluemix MongoDB вместо старой MongoDB.
Ниже мой datasources.json
файл.
{
...
,
"iReport-db": {
"connector": "mongodb",
"url": "mongodb://xxx"
}
}
Вы можете получить "url"
атрибут из конфигурации MongoDB Bluemix, как показано на скриншоте ниже.
После выполнения предыдущих шагов вы можете, наконец, cf push [your local strongloop application]
перейти на IBM Bluemix.
Изменение конфигурации на основе NODE_ENV
Также возможно изменить конфигурацию на основе NODE_ENV, как предложено Деннисом Эшби (эксперт StrongLoop).
Следующим лучшим подходом было бы воспользоваться преимуществами функций конфигурации, специфичных для среды StrongLoop: https://docs.strongloop.com/display/public/LB/Environment-specific+configuration.
Это позволит приложению изменять свою конфигурацию на основе Значение NODE_ENV. Например, на шаге 3 вы можете подключиться к различным экземплярам MongoDB на основе переменной среды NODE_ENV, которую вы установили в своей среде Bluemix (dev, test, stage, prod, dr и т. Д.).
Таким образом, на шаге 2 вы можете сделать следующее:
1. В каталоге сервера создайте файл с именем ‘config.local.js’
2. Содержимое файла будет выглядеть примерно так:
module.exports = {
restApiRoot: '/api',
host: process.env.VCAP_APP_HOST || 'localhost';
port: process.env.VCAP_APP_PORT || 1337
};
Аналогично для шага 3 вы можете сделать следующее:
1. Изменить файл datasources.json так, чтобы он имел только:
{
...
,
"iReport-db": {
"connector": "mongodb"
}
}
2. In the server directory create a file called ‘datasources.XXX.js’ where XXX is the value of NODE_ENV you are deploying. Let’s say XXX is ‘dev’. So, we would create a file ‘datasources.dev.js’.
3. The content of the file would be something like:
module.exports = {
iReport-db: {
url: process.env.MONGODB_URL || "mongodb://xxx"
}
};
These are all the steps you need to do in order to have your StrongLoop application up-and-running in Bluemix, Enjoy!