Parse-Server 运行多应用

2019年7月2日 0 条评论 70 次阅读 3 人点赞

Parse 简介

• Parse是一个移动后端,最初由提供商Parse Inc开发。该公司于2013年被Facebook收购,并于2017年1月关闭。继2016年宣布即将关闭后,该平台随后开源。 由于托管服务被关闭,Parse Platform已经发展成为一个开源社区,拥有自己的博客,文档和社区论坛。

• Parse是一个基于云端的后端管理平台。对于开发者而言,Parse提供后端的一站式和一揽子服务:服务器配置、数据库管理、API、影音文件存储,实时消息推送、客户数据分析统计、等等。这样,开发者只需要处理好前端/客户端/手机端的开发,将后端放心的交给Parse即可。目前Parse支持超过50万个App。摘自浅谈 Parse

• Parse可以让一个作为Android/IOS开发的你,不用后台开发人员配合就可以处理后台数据,并且其有专门的用户系统,消息推送功功能等等,而且API简单易用,虽然坑还是有,但是还是一个很值得Android开发者入手的一个框架。

Parse目前支持以下平台语言:

注意:

默认情况下,不支持在一个Parse服务器上运行多个应用程序,也称为多应用程序租用。如果您在parse-configuration文件中定义多个应用程序,则在启动实例时,Parse-server日志会抱怨应用程序启动。简单地说,App启动失败,抛出了大量错误消息,并且不允许使用Multi-App Tenancy

那么解决方法是什么?

幸运的是,有一种解决方法可以实现这一目标,即使用PM2  ,它是Node.js的高级流程管理器。PM2中有针对您的Node应用程序的各种有用功能,例如群集,但我们将讨论在一个解析服务器上运行多个应用程序的目标。

Server & Dashboard 部署

node部署

wget https://npm.taobao.org/mirrors/node/v10.16.0/node-v10.16.0-linux-x64.tar.gz 
tar -zxf node-v10.16.0-linux-x64.tar.gz && mv node-v10.16.0-linux-x64 node 
ln -s /usr/local/node/bin/node /usr/bin/node && ln -s /usr/local/node/bin/npm /usr/bin/npm

cnpm 部署

npm install -g cnpm --registry=https://registry.npm.taobao.org

parse-server 部署

npm install -g parse-server && ln -s /usr/local/node/lib/node_modules/parse-server/bin/parse-server /usr/local/bin/parse-server

parse-dashboard 部署

npm install -g parse-dashboard && ln -s /usr/local/node/lib/node_modules/parse-dashboard/bin/parse-dashboard /usr/local/bin/parse-dashboard

pm2 部署

npm install pm2 -g

安装后,可以初始化示例配置文件并将其用于个人参考。此文件名为“ecosystem.config.js ”,将在其中生成pwd

pm2 init

Parse 多应用程序文件配置

初始化文件(ecosystem.config.js)已经为您提供了一些用于参考的样本数据。如果您想定义自己的配置,这完全取决于您。下面的示例显示3个应用程序总共运行,其中2个运行在同一个解析服务器(localhost)上,第三个是Parse-Dashboard(也托管在localhost上)。

需要注意的重要部分是Parse-Server中的每个应用程序都有自己的数据库URI "PARSE_SERVER_DATABASE_URI"和服务器端口号即ie "PORT": "1335"。两个不同的应用程序不能使用相同的端口,因为实例将报告“端口已在使用中”错误消息。

[[email protected] parse]# more ecosystem.config.js 
module.exports = {
  apps : [
    {
    //Parse server configuration for App1
    name: 'API',
    script : 'parse-server',
    env: {
       "PARSE_SERVER_DATABASE_URI": "mongodb://192.168.0.234:27017/parse1",
       "PARSE_SERVER_APPLICATION_ID": "AppId1",
       "PARSE_SERVER_MASTER_KEY": "masterKey1",
       "PORT": "1335",
       "PARSE_SERVER_URL": "http://localhost:1335/parse",
        },
    },
    // parse server for App2
    {
    name : 'App2',
    script : 'parse-server',
    env: {
       "PARSE_SERVER_DATABASE_URI": "mongodb://192.168.0.234:27017/parse2",
       "PARSE_SERVER_APPLICATION_ID": "AppId2",
       "PARSE_SERVER_MASTER_KEY": "masterKey2",
       "PORT": "1336",
       "PARSE_SERVER_URL": "http://localhost:1336/parse",
        },
    },
    //parse dashboard
    {
    name : 'DASHBOARD',
    script : 'parse-dashboard',
    "watch" : true,
    "merge_logs" : true,
    "cwd" : "/usr/local/bin/",
    "args" : "--config /usr/local/parse/parse-dashboard.json --allowInsecureHTTP --port 5050"
    },
  ]
};
[[email protected] parse]# more parse-dashboard.json 
{
  "apps": [
    {
      "serverURL": "http://192.168.0.133:1335/parse",
      "appId": "AppId1",
      "masterKey": "masterKey1",
      "appName": "My Parse Server App1",
      "production": true,
      "supportedPushLocales": ["en","zh","ch"],
      "iconName": "garena-icon_91645.png",
      "primaryBackgroundColor": "",
      "secondaryBackgroundColor": ""
    },
   {
      "serverURL": "http://192.168.0.133:1336/parse",
      "appId": "AppId2",
      "masterKey": "masterKey2",
      "appName": "My Parse Server App2",
      "production": true,
      "supportedPushLocales": ["en","zh","ch"],
      "iconName": "garena-icon_91645.png",
      "primaryBackgroundColor": "",
      "secondaryBackgroundColor": ""
    }
  ],
  "users": [
    {
      "user":"admin",
      "pass":"admin"
    },
   {
      "user":"root",
      "pass":"admin"
    }

  ],
 "trustProxy": 1,
 "iconsFolder": "icons"
}

Parse 启动运行

[[email protected] parse]# su - www -c 'pm2 start /usr/local/parse/ecosystem.config.js'
[PM2][WARN] Applications API, App2, DASHBOARD not running, starting...
[PM2] App [API] launched (1 instances)
[PM2] App [App2] launched (1 instances)
[PM2] App [DASHBOARD] launched (1 instances)
┌───────────┬────┬─────────┬──────┬───────┬────────┬─────────┬────────┬─────┬───────────┬──────┬──────────┐
│ App name  │ id │ version │ mode │ pid   │ status │ restart │ uptime │ cpu │ mem       │ user │ watching │
├───────────┼────┼─────────┼──────┼───────┼────────┼─────────┼────────┼─────┼───────────┼──────┼──────────┤
│ API       │ 1  │ N/A     │ fork │ 59263 │ online │ 0       │ 0s     │ 0%  │ 16.3 MB   │ www  │ disabled │
│ App2      │ 2  │ N/A     │ fork │ 59269 │ online │ 0       │ 0s     │ 0%  │ 11.6 MB   │ www  │ disabled │
│ DASHBOARD │ 3  │ N/A     │ fork │ 59276 │ online │ 0       │ 0s     │ 0%  │ 4.9 MB    │ www  │ enabled  │
│ app       │ 0  │ 1.7.0   │ fork │ 45176 │ online │ 19      │ 5D     │ 0%  │ 75.3 MB   │ www  │ disabled │
└───────────┴────┴─────────┴──────┴───────┴────────┴─────────┴────────┴─────┴───────────┴──────┴──────────┘
 Use `pm2 show <id|name>` to get more details about an app

浏览器访问 http://192.168.0.133:5050/apps

API 测试验证

[[email protected] parse]# curl -X POST -H "X-Parse-Application-Id:AppId2" -H "Content-Type: application/json" -d '{"score":1336,"playerName":"Sean Plott","cheatMode":false}' http://192.168.0.133:1336/parse/classes/GameScore

返回信息如下:
{"objectId":"OevLGNh5jM","createdAt":"2019-07-02T03:28:14.050Z"}[[email protected] parse]# 

参考文献

http://parseplatform.org/
https://github.com/parse-community

https://www.jianshu.com/p/d92c5b2380ea

Einic Yeo

Per Aspera Ad Astra

文章评论(0)

*

code