7

如何将生产 MeteorJS 应用程序部署到 Windows Azure?

4

2 回答 2

6

是的。见http://www.meteorpedia.com/read/Deploying_to_a_PaaS

在大多数情况下,这就像使用“meteor bundle”、 demeteorizer一样简单,然后使用 PaaS 提供商的CLI 部署工具上传生成的文件。

Demeteorizer 通过创建更类似于标准外观的 Node.js 应用程序来包装和扩展 Meteor 的 bundle 命令,并带有用于依赖管理的 package.json 文件。

$ cd /my/meteor/app
$ demeteorizer -o /my/node/app
$ cd /my/node/app
$ npm install
$ export MONGO_URL='mongodb://user:password@host:port/databasename?autoReconnect=true&connectTimeout=60000'
$ export PORT=8080
$ forever start main.js

Forever使您的应用程序在断开连接或崩溃后保持运行,但除非您手动添加启动项,否则不会重新启动

使用Meteor Up代替整个部署要容易得多。或者可能是 mups,尽管它甚至没有更新的文档。

在 Azure Web 应用程序中运行 Meteor 应用程序:

Azure Web App 
Python 2.7
Websockets ON (optional)
WEBSITE_NODE_DEFAULT_VERSION 0.10.32 (default)
ROOT_URL http://webapp.azurewebsites.net
MONGO_URL mongodb://username:password@instance.mongolab.com:36648/dbname (For advanced apps. Request log should say if you need it.)

Dev Machine
Install Visual Studio Community 2015
Install Node 0.12.6
Install Meteor MSI

app> demeteorizer -o ..\app-dem
app-dem\programs\server\packages\webapp.js change .PORT line to "var localPort = process.env.PORT"
app-dem\package.json change "node": "0.10.36" to "node": "0.12.6"
app-dem> npm install 
app-dem> git init
app-dem> git add -A .
app-dem> git commit -m "version 1.0 demeteorized Meteor + tweaks"
app-dem> git remote add azure https://username@webapp-slot.scm.azurewebsites.net:443/webapp.git
app-dem> git config http.postBuffer 52428800
app-dem> git push azure master

而不是demeteorizer -o,也许您可meteor build​​以在输出根目录中使用并创建一个 package.json :

{
    "name": "App name",
    "version": "0.0.1",
    "main": "main.js",
    "scripts": {
        "start": "node main.js"
    },
    "engines": {
        "node": "0.12.6"
    }
}

如果 bcrypt 无法编译,请确保使用更新的版本:

    "dependencies": {
        "bcrypt": "https://registry.npmjs.org/bcrypt/-/bcrypt-0.8.4.tgz"
    }
于 2015-04-28T12:12:24.450 回答
4

在开始之前,请确保您已经安装了 32 位版本的 nodejs 并在您的 Windows 构建机器上运行了“npm -g install fiber”。azure 上的默认 nodejs 仅运行 32 位!

注意:如果您使用例如在 PhantomJS 上中继的可爬虫包,这将不起作用。PhantomJS 不能在 azure 上的 webapp 中执行?

  1. 在您的项目“meteor build ..\buildOut”中并提取位于“..\buildOut”中的 .tar.gz 文件。
  2. 在“..\buildOut\bundle”中放置/创建一个“package.json”,其中包含:
{
    "name": "AppName",
    "version": "0.0.1",
    "main": "main.js",
    "scripts": {
        "start": "node main.js"
    },
    "engines": {
        "node": "0.12.6"
    }
}

注意:确保“名称”不包含空格,Azure 上的部署将失败。

  1. 在您最喜欢的 shell 上,转到“..\buildOut\bundle\programs\server”并运行“npm install”。这将预先下载所有需求并构建它们。
  2. 现在打开文件“..\buildOut\bundle\programs\server\packages\webapp.js”并搜索“process.env.PORT”。

它看起来像这样:

var localPort = parseInt(process.env.PORT) || 0;

将此行更改为:

var localPort = process.env.PORT || 0;

这是必需的,因此您的流星项目一旦在节点中运行就可以接受命名套接字。函数“parseInt”不会让字符串通过,命名套接字是位于 webapp 环境中的字符串。我这样做是有原因的,这里有一个警告!现在保存这个更改,我们几乎完成了......

  1. 解决 bcrypt 问题:下载此文件并将其提取到某个位置:https ://registry.npmjs.org/bcrypt/-/bcrypt-0.8.4.tgz 提取它。

现在替换位于:“..\buildOut\bundle\programs\server\npm\npm-bcrypt\node_modules\bcrypt*”的文件

目录和文件位于某处:“.\bcrypt-0.8.4\package*”

现在进入目录“..\buildOut\bundle\programs\server\npm\npm-bcrypt\node_modules\bcrypt\”中的shell,并确保删除“node_modules”目录。如果 node_modules 目录没有被删除,npm 将不会出于某种原因构建包。

在外壳“npm install”上运行。

确保在门户中为您的 webapp 设置“环境”变量:“MONGO_URL”和“ROOT_URL”。

如果一切正常,您可以将您的应用程序部署到 web 应用程序部署槽上的 git 存储库。转到“..\buildOut\bundle”并将那里的文件提交到部署槽的存储库。这将在部署槽上进行部署并创建所需的 iis 配置文件。

现在稍等片刻,您的应用应该会在一段时间后触发...您的应用应该正在运行,您可以在 *.azuresites.net 上访问它

感谢这一切使这成为可能。

于 2015-08-07T17:50:13.367 回答