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

How can I host my own Parse Server on Heroku using MongoDB?

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

Parse.com recently anounced that they are closing shop January 2017 but thankfully they have made their Parse Server software open source 所以我们都可以托管我们自己的 Parse 服务器实例。

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

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

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

在 Heroku 上自托管 Parse Server


设置 Heroku、MongoDB 和 Parse

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


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


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


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


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


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


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

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

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

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

启​​用 CORS(这样您就可以使用来自其他域的 API)

  1. 在您的硬盘上,找到并打开我们刚刚创建的存储库的本地副本
  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
});
  1. 返回终端window,确保你仍在我们克隆的repo 文件夹中,然后输入以下内容将更改推送到Heroku:

.

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

测试您的新 Parse Server

  1. 转到这个jsFiddle page
  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 服务器正在正常工作

注意:

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


从 Parse 迁移现有数据

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

  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. 点击“开始迁移”


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


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