使用Docker在MacOS上部署Parse Server和Parse Server Dashboard这篇文章提到,我们的部署只能通过Http访问,而目前几乎所有的服务器访问都要求使用Https访问,所以本篇我们着重介绍如何通过Https访问Parse Server和Parse Dashboard
先说结论和实现方案,最后再讨论一些其他的探索过程。
结论:通过Nginx的反向代理来实现
我们先来看Parse Server的Https访问
参考使用Docker在MacOS上部署Nginx并配置Https,我们映射了Nginx的配置文件到本地,即工程目录下的./nginx/conf.d/default.conf,编辑该文件的https部分:
server {
listen 443 ssl;
server_name localhost; # 换成自己的host
ssl_certificate /etc/nginx/conf.crt/localhost.crt; #指定证书位置(通过目录挂载到容器内部)
ssl_certificate_key /etc/nginx/conf.crt/localhost.key; #指定私钥位置(通过目录挂载到容器内部)
location / {
root /usr/share/nginx/html;
index index.html index.htm;
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root /usr/share/nginx/html;
}
location /parse/ {
proxy_pass http://172.17.0.4:1337/parse/;
proxy_set_header Host $http_host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-NginX-Proxy true;
proxy_redirect off;
}
}
location /parse/
部分是新增的,即所有https://localhost/parse/关联的访问都转向http://172.17.0.1:1337/parse/,请注意,这里我们不能再使用localhost了,我们必须使用parse-server docker容器的内部IP。
如何获得parse docker的内部IP?
docker ps docker inspect parse-server
通过docker ps命令查看容器名字,然后通过docker inspect 查看该容器的详细内容,然后您就可以看到IPAddress的内容了。
重启Nginx服务器
此时我们使用https://localhost/parse进行测试
curl -X POST \
-H "X-Parse-Application-Id: APPLICATION_ID" \
-H "Content-Type: application/json" \
-d '{"score":1337,"playerName":"Sean Plott","cheatMode":false}' \
https://localhost/parse/classes/GameScore
返回结果类似,这样就是执行成功了。
{
"objectId":"Ixb4yaX8ZH",
"createdAt":"2022-09-22T04:21:08.928Z"
}
parse-dashboard的Https访问
同样parse-server,我们也通过修改nginx配置文件来配置反向代理,使parse-dashboard支持https的访问。
# 增加https部分设置
server {
listen 443 ssl;
server_name localhost; # 换成自己的host
ssl_certificate /etc/nginx/conf.crt/localhost.crt; #指定证书位置(通过目录挂载到容器内部)
ssl_certificate_key /etc/nginx/conf.crt/localhost.key; #指定私钥位置(通过目录挂载到容器内部)
location / {
root /usr/share/nginx/html;
index index.html index.htm;
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root /usr/share/nginx/html;
}
location /parse/ {
proxy_pass http://172.17.0.4:1337/parse/;
proxy_set_header Host $http_host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-NginX-Proxy true;
proxy_redirect off;
}
location /parse-dashboard/ {
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-NginX-Proxy true;
proxy_pass http://172.17.0.5:4040/parse-dashboard/;
proxy_ssl_session_reuse off;
proxy_set_header Host $http_host;
proxy_redirect off;
}
}
注意,这里的/parse-dashboard/是和我们之前在生成parse-dashboard docker时的--mountPath参数是一致的。反向代理指向的地址为parse-dashboard docker的http地址。
此外,我们需要额外修改的是parse-dashboard docker的配置文件,即./parse-dashboard/config/parse-dashboard-config.json
{
"apps": [
{
"serverURL": "https://localhost/parse",
"appId": "APPLICATION_ID",
"masterKey": "MASTER_KEY",
"appName": "Hello World",
"mountPath": "parse-dashboard"
}
],
"users": [
{
"user":"parse",
"pass":"password"
}
]
}
"serverURL"由原先的http://localhost:1337/parse
修改为https://localhost/parse
此时我们访问https://localhost/parse-dashboard/就可以正确的访问了
额外的讨论
除了反向代理,我们也可以通过创建基于https进行访问的parse-server和parse-dashboard。
parse-dashboard的docker提供了https的支持,我们可以通过指定--sslKey和--sslCert提供https访问的钥匙和证书,来实现,例如:
cd $HOME/parse.server.docker
docker run \
--name parse-dashboard \
-p 4040:4040 \
-v $(pwd)/parse-dashboard/config/parse-dashboard-config.json:/src/Parse-Dashboard/parse-dashboard-config.json \
-v $(pwd)/parse-dashboard/crt:/src/Parse-Dashboard/crt \
-d parseplatform/parse-dashboard:4.1.4 \
--sslKey /src/Parse-Dashboard/crt/localhost.key \
--sslCert /src/Parse-Dashboard/crt/localhost.crt \
--mountPath /parse-dashboard
这是基于parse-dashboard docker内部的代码实现的,在提供--sslKey和--sslCert参数的情况下,创建了一个https的服务,来启动parse-dashboard。
然而,parse-server的docker目前没有支持创建https的服务,因此不能像parse-dashboard那样。如果我们需要,那么就只能通过修改parse-server docker的代码来实现,这相对来说会稍微复杂一些,单独再开篇来细说吧。