搭建基于https和Parse的后端服务
来源:互联网 发布:网络电玩城捕鱼游戏 编辑:程序博客网 时间:2024/05/20 17:40
搭建基于https和Parse的后端服务
1. 概述
本例搭建基于https和Parse的后端服务,可以提供给客户端APP,微信小程序等使用。
Parse是一个开源的BaaS(Backend as a Service)组件,它提供了包括存储在内的各种后端能力,可以快速的搭建一个比较通用的后端服务,使单纯的前端开发者也能独立的完成一个应用的开发。
本例所使用的软硬件包含如下:
1. 阿里云ECS云服务器
2. 域名(需备案)
3. SSL证书
4. nginx
5. Parse
下面,我就详细的介绍一下完整的搭建过程。
2. 阿里云ECS和域名
本例搭建的服务构建在阿里云的ECS服务器之上,所以需要首先购买一台ECS云服务器,同时会得到一个公网的IP。
由于微信小程序的后端必须是一个基于https的已备案的域名,所以还需要申请一个域名,域名备案的流程也可以在阿里云上完成,备案需要省通信管理局审核,一般的周期是10-20天。
假设申请的域名是:example.com
本例使用二级域名 api.example.com,同时将该域名解析到ECS的公网IP上:
3. 申请SSL证书
SSL证书是用来提供https服务的,阿里云提供免费的证书申请服务:
申请证书只需要验证域名的所有权即可,每个二级域名都需要单独申请证书,域名验证通过以后系统会自动颁发证书,顺利的话全程在10分钟左右即可完成,申请到的证书如下:
下载证书文件,解压以后,会得到2个文件:
其中.key格式的文件就是私钥文件,而.pem格式的文件就是证书文件。这2个文件在后面的过程中会使用到。
4. 安装nginx和配置https服务
在CentOS 7上安装nginx的教程可以参考我的另一篇博文CentOS 7 安装nginx,这里不再详述。
进入nginx的安装目录 /etc/nginx 看一下:
[root@VM_56_156_centos nginx]# pwd/etc/nginx[root@VM_56_156_centos nginx]# ls -ltotal 40drwxr-xr-x 2 root root 4096 Nov 5 00:02 conf.d-rw-r--r-- 1 root root 1007 Oct 17 21:25 fastcgi_params-rw-r--r-- 1 root root 2837 Oct 17 21:25 koi-utf-rw-r--r-- 1 root root 2223 Oct 17 21:25 koi-win-rw-r--r-- 1 root root 3957 Oct 17 21:25 mime.typeslrwxrwxrwx 1 root root 29 Nov 4 22:45 modules -> ../../usr/lib64/nginx/modules-rw-r--r-- 1 root root 643 Oct 17 21:21 nginx.conf-rw-r--r-- 1 root root 636 Oct 17 21:25 scgi_params-rw-r--r-- 1 root root 664 Oct 17 21:25 uwsgi_params-rw-r--r-- 1 root root 3610 Oct 17 21:25 win-utf
我们在该目录下创建一个文件夹,取名叫cert,然后把前面下载的2个文件上传至该目录下:
[root@VM_56_156_centos cert]# pwd/etc/nginx/cert[root@VM_56_156_centos cert]# ls -ltotal 8-rw-r--r-- 1 root root 1675 Nov 4 23:12 312431314412324.key-rw-r--r-- 1 root root 3888 Nov 4 23:12 312431314412324.pem
nginx.conf 就是nginx总的配置文件,内容如下:
user nginx;worker_processes 1;error_log /var/log/nginx/error.log warn;pid /var/run/nginx.pid;events { worker_connections 1024;}http { include /etc/nginx/mime.types; default_type application/octet-stream; log_format main '$remote_addr - $remote_user [$time_local] "$request" ' '$status $body_bytes_sent "$http_referer" ' '"$http_user_agent" "$http_x_forwarded_for"'; access_log /var/log/nginx/access.log main; sendfile on; #tcp_nopush on; keepalive_timeout 65; #gzip on; include /etc/nginx/conf.d/*.conf;}
从最后一行可以看出,该配置文件又包含了conf.d目录下的所有配置文件,所以我们的配置主要在该目录下。
在conf.d目录下创建一个https.conf的文件,写入以下内容:
server { listen 443; server_name api.example.com; ssl on; ssl_certificate cert/312431314412324.pem; ssl_certificate_key cert/312431314412324.key; ssl_session_timeout 5m; ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4; ssl_protocols TLSv1 TLSv1.1 TLSv1.2; ssl_prefer_server_ciphers on; location / { root /usr/share/nginx/html; index index.html index.htm; }}
这个配置文件使得nginx监听所有443端口的请求,即配置了https的服务,通过如下命令启动nginx服务器:
[root@VM_56_156_centos nginx]# service nginx startStarting nginx: [ OK ]
通过浏览器访问 https://api.example.com (需替换成您自己的域名)就已经可以访问到nginx的默认首页了:
可以看到地址栏中已经是https的协议。
为了保证用户在没有输入https的情况下也能正确访问,还需要配置nginx对http协议80端口的请求转发到https协议443端口上,在conf.d目录下再创建一个 http.conf的配置文件,写入以下内容:
server { listen 80; server_name api.example.com; return 301 https://$server_name$request_uri;}
这个配置文件使得nginx监听所有80端口的请求,同时将请求通过301的方式转发到https的443端口之上,通过这种方式,使得直接输入域名的方式,也可以正确访问服务,通过如下命令重新启动nginx服务器:
[root@VM_56_156_centos nginx]# service nginx restartStopping nginx: [ OK ]Starting nginx: [ OK ]
再次通过浏览器访问 http://api.example.com (需替换成您自己的域名)
通过控制台可以看见,有一个301的跳转,最终浏览器中访问的还是https的服务。
至此,https的服务已经搭建完成了,后面将搭建Parse的服务,并通过nginx转发至该服务上。
5. 搭建Parse服务
5.1 安装MongoDB
Parse的后端存储服务依赖于MongoDB,所以需要先安装MongDB。
创建文件 /etc/yum.repos.d/mongodb.repo,加入以下内容:
[mongodb-org]name=MongoDB Repositorybaseurl=https://mirrors.tuna.tsinghua.edu.cn/mongodb/yum/el$releasever/gpgcheck=0enabled=1
刷新缓存并安装 mongodb-org 即可:
[root@VM_56_156_centos mongodb]# yum makecache[root@VM_56_156_centos mongodb]# yum install mongodb-org
创建配置文件 /opt/mongodb/mongod.conf配置文件,加入以下内容:
processManagement: fork: truenet: bindIp: 127.0.0.1 port: 27017storage: dbPath: /opt/mongodb/datasystemLog: destination: file path: "/opt/mongodb/logs/mongod.log" logAppend: truestorage: journal: enabled: true
启动mongodb:
[root@VM_56_156_centos mongodb]# /opt/mongodb/bin/mongod -f /opt/mongodb/mongod.confabout to fork child process, waiting until server is ready for connections.forked process: 15329child process started successfully, parent exiting
5.2 安装Parse Server和Parse Dashboard
Parse Server的官方Github仓库中有一个parse-server-example,是一个基于Express的工程,通过启动该工程即可创建一个Parse Server。同时,Parse 官方还提供了一个parse-dashboard工程,也可以依赖到同一个工程中去。
经整合的index.js的文件内容如下:
// Example express application adding the parse-server module to expose Parse// compatible API routes.var express = require('express');var ParseServer = require('parse-server').ParseServer;var ParseDashboard = require('parse-dashboard');var path = require('path');var databaseUri = process.env.DATABASE_URI || process.env.MONGODB_URI;//Parse服务的域名var parseDomain = process.env.PARSE_DOMAIN;if (!databaseUri) { console.log('DATABASE_URI not specified, falling back to localhost.');}var api = new ParseServer({ databaseURI: databaseUri || 'mongodb://localhost:27017/meetwish', cloud: process.env.CLOUD_CODE_MAIN || __dirname + '/cloud/main.js', appId: process.env.APP_ID || 'myAppId', masterKey: process.env.MASTER_KEY || '', //Add your master key here. Keep it secret! serverURL: `http://localhost:1337/parse`, // Don't forget to change to https if needed liveQuery: { classNames: ['Posts', 'Comments'] // List of classes to support for query subscriptions }});var dashboard = new ParseDashboard({ 'apps': [ { 'serverURL': `https://${parseDomain}/parse`, 'appId': process.env.APP_ID || 'myAppId', 'masterKey': process.env.MASTER_KEY || '', 'appName': 'meetwish' } ], 'users': [ { 'user': process.env.USER_NAME || 'username', 'pass': process.env.PASSWORD || 'password' } ]}, false);// Client-keys like the javascript key or the .NET key are not necessary with parse-server// If you wish you require them, you can set them as options in the initialization above:// javascriptKey, restAPIKey, dotNetKey, clientKeyvar app = express();// Serve static assets from the /public folderapp.use('/public', express.static(path.join(__dirname, '/public')));// make the Parse Dashboard available at /dashboardapp.use('/dashboard', dashboard);// Serve the Parse API on the /parse URL prefixvar mountPath = process.env.PARSE_MOUNT || '/parse';app.use(mountPath, api);// Parse Server plays nicely with the rest of your web routesapp.get('/', function(req, res) { res.status(200).send('I dream of being a website. Please star the parse-server repo on GitHub!');});// There will be a test page available on the /test path of your server url// Remove this before launching your appapp.get('/test', function(req, res) { res.sendFile(path.join(__dirname, '/public/test.html'));});var port = process.env.PORT || 1337;var httpServer = require('http').createServer(app);httpServer.listen(port, function() { console.log('parse-server running on port ' + port + '.');});// This will enable the Live Query real-time serverParseServer.createLiveQueryServer(httpServer);
启动时需指定APP_ID
,MASTER_KEY
,USER_NAME
,PASSWORD
,PARSE_DOMAIN
等环境变量。
- APP_ID:应用的ID,所有的接口中都会用到该参数
- MASTER_KEY:应用的密钥,需妥善保管,避免泄露,通过该key可以忽略所有的访问权限控制。
- USER_NAME:访问Dashboard的用户名
- PASSWORD:访问Dashboard的密码
- PARSE_DOMAIN:部署Parse Server的域名或公网IP
假设Parse Server服务器的域名是:api.example.com
启动命令如下:
APP_ID=xxx MASTER_KEY=xxx USER_NAME=xxx PASSWORD=xxx PARSE_DOMAIN=api.example.com node index.js
为了能后台启动,也可通过pm2对node程序进行管理。
5.3 配置nginx反向代理Parse Server及Parse Dashboard
编辑/etc/nginx/conf.d/https.conf
文件,完整内容如下:
server { listen 443; server_name api.example.com; ssl on; ssl_certificate cert/312431314412324.pem; ssl_certificate_key cert/312431314412324.key; ssl_session_timeout 5m; ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4; ssl_protocols TLSv1 TLSv1.1 TLSv1.2; ssl_prefer_server_ciphers on; location / { proxy_pass http://127.0.0.1:1337; 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; }}
相比原来的配置,仅仅是location区块内的内容发生了变化,更多nginx配置的内容,请参考官网文档
修改完配置以后,重启nginx:
[root@VM_56_156_centos ~]# service nginx restart
大功告成,此时访问https://api.example.com (需替换成您自己的域名),即可查看到服务啦!
- 搭建基于https和Parse的后端服务
- 基于https的web服务
- loadrunner访问https后端服务
- 基于openssl的https服务的配置
- 安装基于openssl的https服务配置
- MacOS下,搭建tomcat的https服务
- 搭建基于HTTPS的iOS发布环境
- tomcat 搭建https服务
- nodejs 搭建https服务
- 基于Azure搭建PredictionIO和Spark的推荐引擎服务
- 使用Parse.com作为后端服务,开发iOS APP
- Android基于Retrofit2.0和RXJava2.0 的HTTPS网络请求搭建
- 基于springboot和dubbo搭建SOA服务
- 为苹果ATS和微信小程序搭建 Nginx + HTTPS 服务
- 基于IIS配置Https服务
- 面向 Android 应用程序的基于 Parse 云的服务 的一些用法
- node.js搭建https服务
- 使用Node 搭建HTTPS服务
- 【plan】noip冲刺计划
- footer置顶之js方法
- while语句
- Git学习笔记
- 总结一
- 搭建基于https和Parse的后端服务
- PAT乙级1011. A+B和C (15)
- 《Pro Git》pdf 下载
- 《Effective Java》pdf下载
- 《人月神话》 pdf 下载
- UVALive 6181|HDU 4492|Mystery|猜题意|模拟
- PAT乙题1012. 数字分类 (20)
- 农夫过河【数据结构实验报告】
- 使用JavaLayer实现Java 音频播放