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已经弃用,官方推荐使用mongodump 和 mongorestore
关于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 -》激活刚才发送的证书即可