如何在Heroku上使用MongoDB托管自己的Parse服务器?

29

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

Parse.com 最近宣布他们将在2017年1月结束服务,但幸运的是,他们已经开源了Parse Server软件,因此我们都可以托管自己的Parse服务器实例。

我已经调查了各种可用的选项来托管Parse Server,并决定将我的托管在Heroku上。

我喜欢Parse,因为它非常容易使用,而且我没有设置后端的实际经验。我尝试过遵循几个在线指南,但发现它们都有一些模糊的步骤或者把你带到安装一堆工具的另一个网站里,这让人感到有点困惑。

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


3
为什么会有负评?我知道这个问题有些笼统,但你看到我底部的评论了吗? - Wesley Smith
2
为什么会有人踩这个教程...这是唯一真正有用的教程。 - sterling archer
2
“别在意别人说什么,你知道自己做了什么。”——《间谍之桥》。就记录而言,这个答案确实帮了我,而这个被踩和过于宽泛的问题也指引我找到了正确的方向。 - Marka A
2
这正是我一直在寻找的!谢谢。不确定这是否因为范围过大而关闭?我已经花了几天时间解决这个问题。 - Lango
1
这正是我在寻找的,谢谢! - Peter H. Boling
1个回答

60

在Heroku上自助托管Parse Server


设置Heroku、MongoDB和Parse

  1. 访问https://signup.heroku.com/并注册一个账户。
  2. 验证你的电子邮件,并登录到Heroku。
  3. 转到将Parse服务器部署到Heroku
  4. 点击“Deploy to Heroku”。

enter image description here


  1. 给你的Parse服务器起个名字。
  2. 现在跳过应用程序的APP_ID和MASTER_KEY,我们将在稍后的步骤中进行设置。
  3. 点击“Deploy for free”。

enter image description here


  1. 如果下面的框出现了,请输入您的信用卡信息以验证您的帐户。 别担心,除非您在以后升级您的帐户,否则不会被收取任何费用。这只是Heroku为防止滥用而采取的一种安全措施。

enter image description here


  1. Heroku将创建您的应用程序。在后台,它还将为您创建一个.git仓库,并克隆官方parse-server-example git仓库的内容,创建一个MongoDB数据库,并配置您的Heroku应用程序使用该数据库。
  2. 创建应用程序时,您将被带到其Heroku仪表板,或者您可以通过登录后单击“个人应用程序”,然后单击您的parse服务器名称来到达该位置。
  3. 在应用程序的仪表板上,点击“设置”,然后点击“显示配置变量”。

enter image description here


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

enter image description here


  1. 记下MONGOLAB_URI的值,在以后迁移现有的Parse数据到新的DB时需要用到它
  2. 向下滚动并记下您的应用程序的Git Url和Heroku域名,稍后会用到

enter image description here


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

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

  3. 输入$ heroku git:clone -a <MY_APP_NAME>(其中<MY_APP_NAME>是您的heroku应用程序名称)以创建您的服务器代码仓库的本地副本,您也可以使用之前看到的git url。当您克隆仓库时,您将看到消息“warning:You appear to have cloned an empty repository。”app文件夹将被创建,但它只包含标准的git文件和没有parse server。要解决此问题,请转到official parse-server-example git repo,下载该repo的zip文件。解压文件夹,将parse-server-example-master文件夹中的所有文件和文件夹拖到您的应用程序文件夹中。

  4. 回到终端,输入$ cd <MY_APP_NAME>进入仓库

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

  1. 在硬盘上找到并打开我们刚刚创建的本地repo的副本
  2. 在文件夹中打开 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
  }

注意

在实际代码中,请务必删除上述注释,因为它不是有效的 JSON。

  1. 打开 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
});

回到终端窗口,确保仍然在我们克隆的存储库文件夹中,并输入以下内容将更改推送到Heroku:
$ git add .
$ git commit -am "make it better"
$ git push heroku master

测试你的新 Parse 服务器

  1. 前往这个 jsFiddle 页面
  2. 在 fiddle 中将 <MY_APP_ID><MY_JS_KEY><MY_HEROKU_APP_NAME> 更改为你的应用程序的相应值,然后点击“运行”

.

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

enter image description here

注意:

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

enter image description here


将现有数据从Parse迁移

在迁移生产应用程序之前,您应该至少使用测试应用程序进行一次迁移。此外,似乎旧应用程序中的传统文件可能尚未转移,请参见此GitHub问题

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

enter image description here


  1. 当迁移完成时,单击“完成”,然后在弹出窗口中单击“确定”即可。迁移完成后,您的所有数据都将存储在新的MongoDB数据库中。

enter image description here


  • 目前,您的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
    我知道了。这些参数应该由Heroku上的配置变量设置。index.js还应该在Parse构造函数中具有缺失的属性。 - alextc
    3
    在更新完你的东西后,记得在 Fiddle 中点击“运行”! - Spoeken
    1
    @Spoeken 谢谢你。我做了一切正确的事情,但它仍然没有运行。该死,我忘记在 Fiddle 上点击“运行”了。谢谢,伙计。 - Suyash Dixit
    1
    @SuyashDixit 在小提琴上添加了一条消息,以提醒点击运行 :) - Wesley Smith
    显示剩余16条评论

    网页内容由stack overflow 提供, 点击上面的
    可以查看英文原文,
    原文链接