Parse 简介
• Parse是一个移动后端,最初由提供商Parse Inc开发。该公司于2013年被Facebook收购,并于2017年1月关闭。继2016年宣布即将关闭后,该平台随后开源。 由于托管服务被关闭,Parse Platform已经发展成为一个开源社区,拥有自己的博客,文档和社区论坛。
• Parse是一个基于云端的后端管理平台。对于开发者而言,Parse提供后端的一站式和一揽子服务:服务器配置、数据库管理、API、影音文件存储,实时消息推送、客户数据分析统计、等等。这样,开发者只需要处理好前端/客户端/手机端的开发,将后端放心的交给Parse即可。目前Parse支持超过50万个App。摘自浅谈 Parse
• Parse可以让一个作为Android/IOS开发的你,不用后台开发人员配合就可以处理后台数据,并且其有专门的用户系统,
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)已经为您提供了一些用于参考的样本数据。如果您想定义自己的配置,这完全取
需"PARSE_SERVER_DATABASE_URI"
和服务器端口号即ie "PORT": "1335"
。两个不同的应用程序不能使用相同的端口,因为实例将报告“端口已在使用中”错误消息。
[root@parseplatform parse]# more ecosystem.config.js
module.exports = {
apps : [
{
//Parse server configuration for App1
name: 'AP1',
script : 'parse-server',
"error_file" :"/data/wwwlogs/AP1_err.log",
"out_file" : "/data/wwwlogs/AP1_out.log",
"merge_logs" : true,
"log_date_format" : "YYYY-MM-DD HH:mm Z",
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
{
instances: 4,
autorestart: true,
name : 'DASHBOARD',
script : 'parse-dashboard',
watch : true,
min_uptime: '60s',
max_restarts: '30',
exec_mode: 'cluster',
max_memory_restart: '1G',
"error_file" :"/data/wwwlogs/dashboard_err.log",
"out_file" : "/data/wwwlogs/dashboard_out.log",
"merge_logs" : true,
"log_date_format" : "YYYY-MM-DD HH:mm Z",
"cwd" : "/usr/local/bin/",
"args" : "--config /usr/local/parse/parse-dashboard.json --allowInsecureHTTP --port 5050"
},
]
};
[root@parseplatform 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 启动运行
[root@parseplatform 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 │
├───────────┼────┼─────────┼──────┼───────┼────────┼─────────┼────────┼──────┼───────────┼──────┼──────────┤
│ APP-000 │ 0 │ N/A │ fork │ 22549 │ online │ 6 │ 8D │ 0.2% │ 47.1 MB │ www │ disabled │
│ APP-001 │ 1 │ N/A │ fork │ 22551 │ online │ 6 │ 8D │ 0.3% │ 39.2 MB │ www │ disabled │
│ APP-002 │ 2 │ N/A │ fork │ 22575 │ online │ 6 │ 8D │ 0.2% │ 47.3 MB │ www │ disabled │
│ APP-003 │ 3 │ N/A │ fork │ 22576 │ online │ 6 │ 8D │ 0.1% │ 46.8 MB │ www │ disabled │
│ APP-004 │ 4 │ N/A │ fork │ 22605 │ online │ 6 │ 8D │ 0.2% │ 46.0 MB │ www │ disabled │
│ APP-005 │ 5 │ N/A │ fork │ 22603 │ online │ 6 │ 8D │ 0.1% │ 48.4 MB │ www │ disabled │
│ APP-006 │ 6 │ N/A │ fork │ 22630 │ online │ 6 │ 8D │ 0.2% │ 46.1 MB │ www │ disabled │
│ APP-007 │ 7 │ N/A │ fork │ 22629 │ online │ 6 │ 8D │ 0.2% │ 24.2 MB │ www │ disabled │
│ APP-008 │ 8 │ N/A │ fork │ 22657 │ online │ 6 │ 8D │ 0.2% │ 47.7 MB │ www │ disabled │
│ APP-009 │ 9 │ N/A │ fork │ 22655 │ online │ 6 │ 8D │ 0.1% │ 47.2 MB │ www │ disabled │
│ APP-010 │ 10 │ N/A │ fork │ 22685 │ online │ 6 │ 8D │ 0.2% │ 42.9 MB │ www │ disabled │
└───────────┴────┴─────────┴──────┴───────┴────────┴─────────┴────────┴──────┴───────────┴──────┴──────────┘
Use `pm2 show <id|name>` to get more details about an app
浏览器访问 http://192.168.0.133:5050/apps

API 测试验证
[root@parseplatform 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"}[root@parseplatform parse]#
参考文献
http://parseplatform.org/
https://github.com/parse-community