Middleware / 运维笔记

Parse-Server 运行多应用

Einic Yeo · 7月2日 · 2019年 · · · ·

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日志会抱怨应用版权声明:本文遵循 CC 4.0 BY-SA 版权协议,若要转载请务必附上原文出处链接及本声明,谢谢合作!程序启动。简单地说,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版权声明:本文遵循 CC 4.0 BY-SA 版权协议,若要转载请务必附上原文出处链接及本声明,谢谢合作!

pm2 init

Parse 多应用程序文件配置

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

需要注意的重要部分是Parse-Server中的每个应用程序都有自己的数据库URI "PARSE_SERVER_DATA版权声明:本文遵循 CC 4.0 BY-SA 版权协议,若要转载请务必附上原文出处链接及本声明,谢谢合作!BASE_URI"和服务器端口号即ie "PORT": "1335"。两个不同的应用程序不能使用相同的端口,因为实例将报版权声明:本文遵循 CC 4.0 BY-SA 版权协议,若要转载请务必附上原文出处链接及本声明,谢谢合作!告“端口已在使用中”错误消息。

[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

ht版权声明:本文遵循 CC 4.0 BY-SA 版权协议,若要转载请务必附上原文出处链接及本声明,谢谢合作!tps://www.jianshu.com/p/d92c5b2380ea

0 条回应