美文网首页
基于node和mongodb的对象存储ParseServer

基于node和mongodb的对象存储ParseServer

作者: 何伟东 | 来源:发表于2018-12-12 16:21 被阅读0次

背景


 前几年资本活跃,也就是说风口上有猪的那几年,常有想做点啥的冲动,前期不好找资本和团队。那会我想过很多,不过我并没有抛开一切去行动,做了一些事情,发现个人的精力和力量实在太有限了,需要靠谱的一帮人才能成事。当时为了解决数据库服务器接口问题,如果用Java web感觉东西太多。用过国内的LeanCloud,后来才发现是基于facebook开源的node框架叫ParseServer。以前这个Parse是独立平台运营的,后来Facebook开源出来了,叫parse-server,我们可以拿来用。

技术实现

 首先需要有node.js的知识、linux服务器和常用命令如vim、nginx、ssh、git等,其次要了解数据数据库的一些常识,虽然mongodb是非关系数据库。还有阿里云、域名解析备案等。

  • 阿里服务器ECS
    阿里云买一个云主机,其他云主机一样,闹着玩的就买个共享型的。系统可以选centOs或者Ubuntu差不多,都是linux系统。初始化系统之后,用终端ssh方式登录到服务器上,root@xx.xx.xx.xx,如果想copy一些东西上去用scp命令。然后安装一些必要工具如Homebrew这种等,Ubuntu上也可以用apt-get来安装一些第三方工具。
  • nodejs
//卸载 install 换成uninstall
brew install  -g node 

安装好之后需要改node的镜像源,国内常用阿里的镜像,要不然npm install可慢了,或者装cnpm一样。

npm config set registry https://registry.npm.taobao.org

可能还需要安装一个node的版本管理和切换的工具nvm,具体可以去查查资料。

  • mongodb
    同样我们可以使用brew isntall
brew isntall mongodb 

如果你当前的环境变量还没有加入 mongod ,手动添加的环境变量中,所有的linux软件命令环境变量配置是这样的,下面是配置在该用户下。

vim ~/.bash_profile
//添加mongodb安装目录到环境变量中
export PATH=/usr/local/xxx/mongodb/2.x.x/bin:${PATH}
//如果让环境变量马上生效
source ~/.bash_profile

新建数据库文件夹 mkdir -p /data/db
配置文件默认在 /usr/local/etc 修改mongod.conf 的 dbpath = /data/db,也可以修改日志输出文件位置等,也可以在启动的时候加参数。

//mongodb服务启动,制定数据库文件和日志文件位置及端口
mongod -dbpath /usr/local/lib/mongodb/data -logpath /usr/local/lib/mongodb/logs -logappend -fork -port 27017

远程连接,后面讲nginx转发和域名的时候,可以直接把ip换成域名

mongo mongodb://username:password@xx.xx.xx.xx:27017/dbname

具体创建数据库,数据库权限,索引,增删改查参考mongodb官方文档,这里点到为止。

  • parse-server
    安装parse-server,由于我们自行安装了mongodb,不需要参考他的去安装mongodb-runner,所以只需要执行
npm install -g parse-server

命令行启动,除此之外我们还可也使用config.json启动

//命令行启动
 parse-server --appId APPLICATION_ID --masterKey MASTER_KEY --databaseURI mongodb://username:password@xx.xx.xx.xx:27017/dbname

//config.json启动,创建config.json
{
  "appId": "appid1",
  "masterKey": "mk1",
  "appName": "test1",
  "databaseURI": "mongodb://username:password@xx.xx.xx.xx:27017/dbname"
}
//然后执行
parse-server config.json

启动之后我们就就可存储我们的对象集合到mangodb了,例如常用http方式

curl -X POST -H "X-Parse-Application-Id:appid1" \
-H "Content-Type: application/json" \
-d '{"score":1337,"playerName":"Sean Plott","cheatMode":false}' \
http://xx.xx.xx.xx:1337/parse/classes/GameScore

github上有iOS、android各个平台的SDK,集成相关平台的parse sdk,一切就非常简单了。例如iOS

//保存对象
PFObject *gameScore = [PFObject objectWithClassName:@"GameScore"];
gameScore[@"score"] = @1337;
gameScore[@"playerName"] = @"Sean Plott";
gameScore[@"cheatMode"] = @NO;
[gameScore saveInBackgroundWithBlock:^(BOOL succeeded, NSError *error) {
  if (succeeded) {
    // The object has been saved.
  } else {
    // There was a problem, check error.description
  }
}];
//获取对象
PFQuery *query = [PFQuery queryWithClassName:@"GameScore"];
[query getObjectInBackgroundWithId:@"xWMyZ4YEGZ" block:^(PFObject *gameScore, NSError *error) {
    // Do something with the returned PFObject in the gameScore variable.
    NSLog(@"%@", gameScore);
}];

具体可以阅读parse-server的documentation文档。

  • parse-dashboard

这是一个管理parse-server的后台,其实就是读取了mangodb的数据,进行展示,你可以进行在图形界面操数据和对象。类似于mysql的Navicat可视化工具,更类似于php写的的phpMyAdmin mysql数据库管理工具。安装使用和配置参考官方 parse-dashboard 文档。
安装

npm install -g parse-dashboard

启动

 parse-dashboard /xxx/xxx/parse-dashboard-config.json --allowInsecureHTTP  

这个allowInsecureHTTP一定要加上,否则http非安全方式访问不了,parse-dashboard-config.json是自己建的一个配置文件,可以配置多个app

{
  "apps": [
    {
      "serverURL": "http://localhost:1337/parse",
      "appId": "myAppId",
      "masterKey": "myMasterKey",
      "appName": "MyApp"
    }
  ]
}
  • 域名解析和nginx转发
    域名解析没什么好说的,买了域名去备案,阿里可以人工备案,需要买一个他的幕布背景给自己拍进去,以前是15块钱包邮。解析好域名之后,要配置ECS云服务器的安全组,否则你死活范围不了对应的端口。下图是我配置的一些开放端口:


    WX20181212-155736.png

    由于一个服务器启动了很多服务,在不同的端口上,我们需要根据DNS解析过来的域名进行转发,这里我们需要安装nginx,nginx是一个容器,可以做负载均衡和http服务等。

brew install nginx

cd /etc/nginx 修改 nginx.conf

//在http的大括号里加两个server
server {
                listen 80;
                server_name parse.coderhe.cn;
                location / {
                        proxy_redirect off;
                        proxy_set_header Host $host;
                        proxy_set_header X-Real-IP $remote_addr;
                        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
                        proxy_pass http://127.0.0.1:1337;
                 }
                error_page 500 502 503 504 /50x.html;
                location = /50x.html {
                        root html;
                }
        }
        server {
                listen 80;
                server_name parse-server.coderhe.cn;
                location / {
                        proxy_redirect off;
                        proxy_set_header Host $host;
                        proxy_set_header X-Real-IP $remote_addr;
                        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
                        proxy_pass http://127.0.0.1:4040;
                 }
                error_page 500 502 503 504 /50x.html;
                location = /50x.html {
                        root html;
                }
        }

修改完之后重启nginx

nginx -s reload

这样就可以直接用parse.coderhe.cn来访问接口对对象进行增删改查了,parse-server.coderhe.cn用来范围控制台,也就是parse-dashboard后台,如图


WX20181212-160904.png

 到这里一套完整的对象存储服务搭建完毕,不需要写任何服务器接口代码,直接在客户端去进行数据的增删改查,有对应的sdk,如果会nodejs的服务器开发,那就更好了,可以直接用nodejs通过parse-server操作mongodb来写一些接口,提供给客户端使用,还可以用nodejs配置一些推送和IM及任务处理的服务等。

相关文章

网友评论

      本文标题:基于node和mongodb的对象存储ParseServer

      本文链接:https://www.haomeiwen.com/subject/wriuhqtx.html