使用docker部署本地Parse Server环境的一些坑

https无法连接,或者提示证书错误等

注意,Mac自带nginx,如果没有关闭Mac自带的nginx,那么是无法连接docker中的nginx的。

mongodb连接失败

注意,Mac上是否安装了mongodb,如果存在,那么是无法连接docker中的mongodb的。

mongodb tls支持

主要参考这篇手册Configure mongod and mongos for TLS/SSL

关键就在于

当mongodb支持tls时,客户端/Parse Server我们还是采取SCRUM模式(即我们通常的用户名/密码模式),不过此时需要指明tls参数。 例如:

mongosh --username=parse --host=localhost --port=27017 --authenticationDatabase=parse_server_database --tls --tlsAllowInvalidCertificates 

需要注意的是,对于自签名证书,我们还是需要指定--tlsAllowInvalidCertificates,因为该证书不被系统信任 (这点有点奇怪,因为我已经添加了自签名的CA证书到Mac系统的钥匙串中,如果有知道的同学,请告知)

mongod.conf文件的修改

添加tls的内容,指定key的位置

# network interfaces
net:
  port: 27017
  bindIp: 0.0.0.0
  tls:
    mode: requireTLS
    certificateKeyFile: /etc/ssl/localhost.pem

注意这个key必须包含全验证链的证书+私钥。如果是使用了自签名证书并且直接用自签名证书颁发的服务器证书,则可以直接用如下的命令,将服务器证书和私钥合并到一个文件即可。如果参考使用Openssl为localhost生成ssl证书

cat localhost.crt localhost.key > localhost.pem
在compose.yaml文件中,mongo部分,映射localhost.pem
  mongo:
  ...
    volumes:
      - ./mongo/data/db:/data/db
      - ./mongo/config/mongod.conf:/etc/mongo/mongod.conf:ro
      - ./mongo/crt/localhost.pem:/etc/ssl/localhost.pem:ro
      - ./mongo/docker-entrypoint-initdb.d:/docker-entrypoint-initdb.d:ro
      - ./logs/mongo:/var/log/mongodb
  ...
修改Parse server的配置文件

databaseURI指定tls=true

{
  "appId": "APPLICATION_ID",
  "masterKey": "MASTER_KEY",
  "appName": "Hello World",
  "serverURL": "https://inspirelife.test/parse",
  "publicServerURL": "https://inspirelife.test/parse",
  "cloud":"/parse-server/cloud/main.js",
  "databaseURI": "mongodb://parse:parse@mongo/parse_server_database?tls=true&tlsAllowInvalidCertificates=true"
}

重新启动所有docker的镜像,此时parse server和mongo连接时,以tls方式进行连接。

当然,我们使用第三方工具/或者从客户端连接mongo时,同时也需要指定tls=true,最简单的就是使用链接字符串

URI = "mongodb://parse:parse@mongo/parse_server_database?tls=true&tlsAllowInvalidCertificates=true"

字符串的官方说明
Standard Connection String Format

mongodb 技术支持

尽量参考官方文档,下面的表根据角色需要,进行了分类,我们可以选择需要的文档进行查阅。

Introduction Developers Administrators Reference
Introduction to MongoDB CRUD Operations Production Notes Shell Methods
Installation Guides Aggregation SQL to MongoDB Indexes
Databases and Collections Replica Sets Sharded Clusters MongoDB Security
Documents Query Operators Reference Glossary
关于mongodb的数据库备份,复制,迁移

db.copyDatabase等API已经弃用,官方推荐使用mongodumpmongorestore

关于Parse Server的配置文件
{
  "appId": "APPLICATION_ID",
  "masterKey": "MASTER_KEY",
  "appName": "Hello World",
  "serverURL": "https://inspirelife.test/parse",
  "cloud":"/parse-server/cloud/main.js",
  "databaseURI": "mongodb://parse:parse@mongo/parse_server_database"
}

之前我们是这么配置的,在开发过程中,却发现文件存储的地址是http形式,而不是https,调查发现,文件存储时,采用的是publicServerURL,因此我们需要指定publicServerURL为https,因此在配置文件中添加:

  "publicServerURL": "https://inspirelife.test/parse",
Parse Server启动提示:WARNING, Unable to connect to 'https://www.inspirelife.test/parse'. Cloud code and push notifications may be unavailable!

只要https://inspirelife.test/parse/health返回{"status":"ok"}就不需要理这个警告了。

Parse Server Cloud Code调用一些Parse API时返回“Unable to connect to the Parse API”

这边有讨论,大概的论点就是Node拒绝自签名证书的认证,因此访问失败。
https://github.com/parse-community/parse-server/issues/411

APP运行时如果出现SSL Connection Error

如果服务器配置正确的话,那么就是由于私有证书的根证书是不存在于iPhone Simulator的,因此还是无法通过SSL连接。
所以我们需要把自签名的根证书添加到iPhone Simulator中,现在可以在iMac上右键点击自签名根证书文件,通过发送到Simulator即可发送到。

在Simulator中通过Setting-》About -》Certificate Trust Settings -》激活刚才发送的证书即可

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 搭建线上环境需要做什么?1、购买域名。2、购买服务器(就是一台带外网ip的虚拟电脑)。3、配置服务器应用环境(用户...
    LoveBugs_King阅读 6,621评论 0 2
  • 第1章 NoSQL 介绍 1.1 NoSQL 简介 1.2 什么是 NoSQL 1.3 为什么使用 NoSQL ?...
    zwb_jianshu阅读 5,770评论 0 2
  • 官网下载mongondbhttps://www.mongodb.com根据系统选择相应版本。(这里是3.6,最新的...
    xyzcmu阅读 3,880评论 0 0
  • 一、 背景 当我们从MongoDB中删除文档或集合时,MongoDB并不会将已经占用了的磁盘空间释放,它会一直维护...
    Bogon阅读 7,022评论 0 1
  • 背景 这段时间负责公司运维工作,多个私有云服务器快到期了,因此线上服务和数据需要迁移备份,但是如果在同一台机器上部...
    谁把月亮涂黑啦阅读 5,193评论 0 18

友情链接更多精彩内容