如何使用 MongoDB 在 Heroku 上托管我自己的 Parse Server? [关闭]

Posted

技术标签:

【中文标题】如何使用 MongoDB 在 Heroku 上托管我自己的 Parse Server? [关闭]【英文标题】:How can I host my own Parse Server on Heroku using MongoDB? [closed] 【发布时间】:2016-05-25 04:24:52 【问题描述】:

(需要明确的是,我提出这个问题是为了提供我找到的答案,以帮助其他同样受到 Parse 闭包影响的人)

Parse.com 最近宣布他们将在 2017 年 1 月关闭商店,但幸运的是他们已经创建了 Parse Server software open source,因此我们都可以托管我们自己的 Parse 服务器实例。

我已经研究了可用于托管 Parse Server 的各种选项,并决定将我的托管在 Heroku 上

我喜欢 Parse,因为它非常易于使用,而且我没有设置后端的实际经验。我曾尝试在网上遵循几个指南,但发现它们都有点难以理解,其中包含模糊的步骤或步骤,这些步骤会让你在另一个站点上安装一堆工具时陷入困境,这一切都变得有点混乱。

如何在 heroku 上托管 Parse Server,将其设置为接受来自我的应用程序的跨域请求,创建 MongoDB 数据库,并将我的所有数据从 Parse 迁移到新数据库?

【问题讨论】:

为什么投反对票?我知道它有点宽泛,但你看到我在底部的评论了吗? 为什么会有人反对这个...这是唯一真正有用的教程 “别人说什么并不重要。你知道你做了什么。”......来自“间谍之桥”......为了记录,这个答案确实帮助了我,这被否决了广泛的问题为我指明了正确的方向...... 这正是我想要的!谢谢你。不确定这是否因为过于宽泛而被关闭?我在这个问题上花了几天时间 这正是我想要的,谢谢! 【参考方案1】:

在 Heroku 上自托管 Parse 服务器


设置 Heroku、MongoDB 和 Parse

    访问https://signup.heroku.com/并注册一个帐号 验证您的电子邮件,然后登录 Heroku 转到Deploying a Parse Server to Heroku 点击“部署到 Heroku”


    为您的解析服务器命名 暂时跳过应用的 APP_ID 和 MASTER_KEY,我们将在后面的步骤中设置。 点击“免费部署”


    如果出现以下框,请输入您的信用卡信息以验证您的帐户。 不用担心,除非您稍后升级帐户,否则不会向您收费。这只是 Heroku 为防止滥用而采取的一项安全措施。


    Heroku 将创建您的应用程序。在后台,它还会为您创建一个 .git 存储库并克隆 official parse-server-example git repo 的内容,创建一个 MongoDB 数据库,并配置您的 Heroku 应用以使用该数据库。 创建应用后,您将被带到它的 Heroku 仪表板,或者您可以通过登录、单击“个人应用”然后单击解析服务器的名称来到达那里 在应用的仪表板上,点击“设置”,然后点击“显示配置变量”


    填写您应用的APP_ID和MASTER_KEY。如果您现在在 Parse.com 上有一个应用程序,您可以使用它使用的相同密钥。你可以在https://www.parse.com/apps/<APP_NAME>/edit#keys 找到<APP_NAME> 是你的应用程序的名称。如果您正在创建一个新应用程序,您可以generate random keys here。您可以为您计划使用的任何 sdk 添加新密钥,我在这里为 javascript sdk 添加一个。


    记下 MONGOLAB_URI 的值,如果您想将现有 Parse 数据迁移到新数据库,稍后将需要此值 向下滚动并记下您应用的 Git Url 和 Heroku 域,稍后您将需要这些


    安装Heroku Toolbelt,这是一个用于管理 Heroku 应用程序的命令行界面工具。

    打开终端提示符并输入$ heroku login,输入您的 Heroku 电子邮件和密码

    输入$ heroku git:clone -a <MY_APP_NAME>(其中<MY_APP_NAME> 是您的heroku 应用程序的名称)来制作您的服务器代码仓库​​的本地副本,您也可以使用我们之前看到的git url。当您克隆存储库时,您将看到消息“警告:您似乎克隆了一个空存储库。”。 app 文件夹将被创建,但它只包含标准的 git 文件,没有解析服务器。要解决这个问题。转到official parse-server-example git repo,下载 repo 的 zip 文件。解压文件夹,将所有文件和文件夹从 parse-server-example-master 文件夹拖到您的应用文件夹中。

    回到终端,输入$ cd <MY_APP_NAME>进入repo

启用 CORS(以便您可以使用其他域的 API)

    在您的硬盘驱动器上,找到并打开我们刚刚创建的存储库的本地副本 在文件夹中,打开package.json 并将"cors": "*" 添加到dependencies,如下所示:

.

  "dependencies": 
    "express": "~4.2.x",
    "kerberos": "~0.0.x",
    "parse": "~1.6.12",
    "parse-server": "~2.0",    // <= don't forget this comma
    "cors": "*"                // add this line
  

注意

确保在您的实际代码中删除上述 cmets,因为它不是有效的 JSON

    打开 index.js 并进行以下更改:

.

var express = require('express');  // find this line in the file
var cors = require('cors') // add this line below it

//....


//var databaseUri = process.env.DATABASE_URI || process.env.MONGOLAB_URI // old name, you may need to change this for new deployments
var databaseUri = process.env.DATABASE_URI || process.env.MONGODB_URI  // changed to MONGODB_URI in Heroku!

//....

var app = express();  // find this line in the file
app.use(cors()); // add this line below it

//Add declarations for any keys you plan to use as shown below
var api = new ParseServer(
  databaseURI: databaseUri || 'mongodb://localhost:27017/dev',
  cloud: process.env.CLOUD_CODE_MAIN || __dirname + '/cloud/main.js',
  appId: process.env.APP_ID || 'myAppId',
  masterKey: process.env.MASTER_KEY || '',
  serverURL: process.env.SERVER_URL || 'http://localhost:1337',
  javascriptKey: process.env.JAVASCRIPT_KEY || '',  //** add this line no need to set values, they will be overwritten by heroku config vars
  restAPIKey: process.env.REST_API_KEY || '', //** add this line
  dotNetKey: process.env.DOT_NET_KEY || '', //** add this line
  clientKey: process.env.CLIENT_KEY || '', //** add this line
);
    返回终端窗口,确保您仍在我们克隆的 repo 文件夹中,然后输入以下内容以将更改推送到 Heroku:

.

$ git add .
$ git commit -am "make it better"
$ git push heroku master

测试您的新解析服务器

    转到此jsFiddle page 将小提琴中的&lt;MY_APP_ID&gt;,&lt;MY_JS_KEY&gt;,&lt;MY_HEROKU_APP_NAME&gt; 更改为适合您应用的值,然后点击“运行”

.

Parse.initialize('<MY_APP_ID>', '<MY_JS_KEY>');
Parse.serverURL = 'https://<MY_HEROKU_APP_NAME>.herokuapp.com/Parse'
    您应该会收到以下警报,告知您新的 Parse 服务器工作正常

注意:

如果您将 jsfiddle 工具与多个解析服务器实例一起使用,您可能会收到错误“无效的会话令牌”。如果发生这种情况,请打开开发控制台,然后从本地存储中删除所有“解析”键,然后它应该可以工作了:


从 Parse 迁移现有数据

在迁移生产应用之前,您应该对测试应用至少执行一次此操作。此外,您的旧应用程序中的旧版files 似乎尚未转移,请参阅this GitHub Issue

    在我们迁移之前,如果您的新 MongoDB 中有数据,迁移将失败。如果您刚刚测试了服务器并创建了对象,请转到https://dashboard.heroku.com/apps/&lt;MY_HEROKU_APP_NAME&gt;/resources,单击其图标旁边的“MongoLab”,然后在下一页上,单击“删除所有集合” 转到https://dashboard.parse.com/apps/&lt;APP_NAME&gt;/settings/general,其中&lt;APP_NAME&gt; 是您的解析应用程序的名称 向下滚动页面并点击“迁移” 在模式中,在灰色区域(看起来不太像输入...)输入我们之前记下的MONGOLAB_URI 点击“开始迁移”


    迁移完成后,单击“Finalize”,然后在弹出的窗口中单击“Okay”,迁移完成后,您的所有数据都将保存在新的 MongoDB 数据库中。


    目前,您的 Parse 仪表板将继续显示您现在存在于新数据库中的数据。要测试一切,回到我们之前使用的测试 jsFiddle 并再次运行它。现在,转到 Parse 仪表板,您应该会看到新添加的类和行。 注意,当我使用新的 Parse 仪表板时,我可以看到行数,但行区域全是空白。我恢复到旧的 Parse 仪表板,一切正常。

【讨论】:

还要确保 ParseServer 构造函数应如下所示: var api = new ParseServer( databaseURI: databaseUri || 'mongodb://localhost:27017/dev', cloud: process.env.CLOUD_CODE_MAIN || __dirname + '/cloud/main.js', appId: process.env.APP_ID || 'myAppId', restAPIKey: process.env.REST_API_KEY || '', javascriptKey: process.env.JAVASCRIPT_KEY || '', masterKey: process.env.MASTER_KEY || '' //在这里添加你的主密钥。保密!); @alextc 这是不正确的。 Per Heroku:"The Parse server is configured during instantiation. The index.js file in the parse-server-example specifies defaults, which are superseded by config vars, made available to our application via environment variables." 请参见上面的第 12 步 记得在你更新你的东西后点击 RUN! @Spoeken 谢谢你。我做的一切都是正确的,但它仍然没有运行。该死的,我忘了在 Fiddle 上按“Run”。谢谢老兄。 @SuyashDixit 在小提琴中添加了一条消息,以提醒单击运行:)

以上是关于如何使用 MongoDB 在 Heroku 上托管我自己的 Parse Server? [关闭]的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Heroku.com 上托管的 Redmine 上安装插件

如何在Heroku上托管带有Node后端的React应用程序?

如何在没有 Flask 的 Heroku 上托管 websocket 应用程序 python 服务器?

如何解决 Heroku 上托管的 django 项目中的迁移问题?

如何使用 Fixie Socks(Heroku 插件)通过 mongoose 连接到 mongodb

如何将客户端的正确 IP 地址获取到 Heroku 上托管的 Node socket.io 应用程序中?