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

时间:2016-02-14 07:27:11

标签: node.js mongodb heroku parse-platform parse-server

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

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

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

我喜欢Parse,因为它很容易使用,而且我没有设置后端的真实经验。我曾尝试在线跟踪几个指南,但发现它们有点难以理解,模糊的步骤或步骤会让你在另一个安装了大量工具的网站上挖洞,这一切都让人感到有些困惑。

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

1 个答案:

答案 0 :(得分:57)

在Heroku上自托管解析服务器

设置Heroku,MongoDB和Parse

  1. 访问https://signup.heroku.com/并注册帐号
  2. 验证您的电子邮件,然后登录Heroku
  3. 转到Deploying a Parse Server to Heroku
  4. 点击"部署到Heroku"
  5. enter image description here

    1. 为您的解析服务器命名
    2. 暂时取消应用程序的APP_ID和MASTER_KEY,我们将在后面的步骤中设置它。
    3. 点击"免费部署"
    4. enter image description here

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

        1. Heroku将创建您的应用程序。在后台,它还将为您创建一个.git repo并克隆official parse-server-example git repo的内容,创建一个MongoDB数据库,并配置您的Heroku应用程序以使用该数据库。
        2. 创建应用程序后,您将被带到它的Heroku仪表板,或者您可以通过登录,点击"个人应用程序"然后单击解析服务器的名称
        3. 在您应用的信息中心上,点击"设置"然后点击"显示配置变量"
        4. enter image description here

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

            1. 记下MONGOLAB_URI的值,如果您想将现有的Parse数据迁移到新数据库,则稍后需要此功能
            2. 向下滚动并为您的应用记下Git Url和Heroku域名,稍后您将需要这些
            3. enter image description here

              1. 安装Heroku Toolbelt这是一个用于管理Heroku应用程序的命令行界面工具。
              2. 打开终端提示并输入$ heroku git:clone -a <MY_APP_NAME>,输入您的Heroku电子邮件和密码
              3. 输入<MY_APP_NAME>(其中$ cd <MY_APP_NAME>是您的heroku应用程序的名称)来制作服务器代码仓库​​的本地副本,您也可以使用我们之前看到的git url。克隆存储库时,您将看到消息&#34;警告:您似乎克隆了一个空存储库。&#34;。将创建app文件夹,但它只包含标准git文件而不包含解析服务器。解决这个问题。转到official parse-server-example git repo,下载回购的 zip文件。解压缩文件夹,将所有文件和文件夹从parse-server-example-master文件夹拖到app文件夹中。

              4. 返回终端,输入package.json进入回购

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

                1. 在您的硬盘上,找到并打开我们刚创建的回购邮件的本地副本
                2. 在文件夹中,打开"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 } ,如下所示:
                3. index.js

                  注意

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

                  1. 打开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 }); 并进行以下更改:
                  2. $ git add .
                    $ git commit -am "make it better"
                    $ git push heroku master
                    
                    1. 返回终端窗口,确保您仍然在我们克隆的repo的文件夹中,并输入以下内容将更改推送到Heroku:
                    2. <MY_APP_ID>

                      测试新的Parse Server

                      1. 转到此jsFiddle page
                      2. 将小提琴中的<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' 更改为您应用的相应值,然后点击&#34;运行&#34;
                      3. files
                        1. 您应该收到以下警告,告知您新的Parse服务器工作正常
                        2. enter image description here

                          注意:

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

                          enter image description here

                          从Parse

                          迁移现有数据

                          在迁移生产应用之前,您应该使用测试应用至少执行一次此操作。此外,旧应用中的遗留https://dashboard.heroku.com/apps/<MY_HEROKU_APP_NAME>/resources似乎尚未转移,请参阅this GitHub Issue

                          1. 迁移之前,如果您的新MongoDB中包含数据,则迁移将失败。如果您刚测试了服务器并创建了对象,请转到https://dashboard.parse.com/apps/<APP_NAME>/settings/general,单击&#34; MongoLab&#34;在它旁边的图标上,然后在下一页上,点击&#34;删除所有馆藏&#34;
                          2. 转到<APP_NAME>,其中MONGOLAB_URI解析应用的名称
                          3. 向下滚动页面,然后点击&#34;迁移&#34;
                          4. 在模式中,在灰色区域(看起来不像输入......)输入我们之前记下的{{1}}
                          5. 点击&#34;开始迁移&#34;
                          6. enter image description here

                            1. 完成迁移后,点击&#34;完成&#34;然后,在弹出窗口点击&#34;好的&#34;当迁移完成时,您的所有数据都将存储在新的MongoDB数据库中。
                            2. enter image description here

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