https無法連接,或者提示證書錯誤等
注意,Mac自帶nginx,如果沒有關(guān)閉Mac自帶的nginx,那么是無法連接docker中的nginx的。
mongodb連接失敗
注意,Mac上是否安裝了mongodb,如果存在,那么是無法連接docker中的mongodb的。
mongodb tls支持
主要參考這篇手冊Configure mongod and mongos for TLS/SSL
關(guān)鍵就在于
當(dāng)mongodb支持tls時,客戶端/Parse Server我們還是采取SCRUM模式(即我們通常的用戶名/密碼模式),不過此時需要指明tls參數(shù)。 例如:
mongosh --username=parse --host=localhost --port=27017 --authenticationDatabase=parse_server_database --tls --tlsAllowInvalidCertificates
需要注意的是,對于自簽名證書,我們還是需要指定--tlsAllowInvalidCertificates,因為該證書不被系統(tǒng)信任 (這點有點奇怪,因為我已經(jīng)添加了自簽名的CA證書到Mac系統(tǒng)的鑰匙串中,如果有知道的同學(xué),請告知)
mongod.conf文件的修改
添加tls的內(nèi)容,指定key的位置
# network interfaces
net:
port: 27017
bindIp: 0.0.0.0
tls:
mode: requireTLS
certificateKeyFile: /etc/ssl/localhost.pem
注意這個key必須包含全驗證鏈的證書+私鑰。如果是使用了自簽名證書并且直接用自簽名證書頒發(fā)的服務(wù)器證書,則可以直接用如下的命令,將服務(wù)器證書和私鑰合并到一個文件即可。如果參考使用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方式進行連接。
當(dāng)然,我們使用第三方工具/或者從客戶端連接mongo時,同時也需要指定tls=true,最簡單的就是使用鏈接字符串
URI = "mongodb://parse:parse@mongo/parse_server_database?tls=true&tlsAllowInvalidCertificates=true"
字符串的官方說明
Standard Connection String Format
mongodb 技術(shù)支持
盡量參考官方文檔,下面的表根據(jù)角色需要,進行了分類,我們可以選擇需要的文檔進行查閱。
| 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 |
關(guān)于mongodb的數(shù)據(jù)庫備份,復(fù)制,遷移
db.copyDatabase等API已經(jīng)棄用,官方推薦使用mongodump 和 mongorestore
關(guān)于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"
}
之前我們是這么配置的,在開發(fā)過程中,卻發(fā)現(xiàn)文件存儲的地址是http形式,而不是https,調(diào)查發(fā)現(xiàn),文件存儲時,采用的是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調(diào)用一些Parse API時返回“Unable to connect to the Parse API”
這邊有討論,大概的論點就是Node拒絕自簽名證書的認(rèn)證,因此訪問失敗。
https://github.com/parse-community/parse-server/issues/411
APP運行時如果出現(xiàn)SSL Connection Error
如果服務(wù)器配置正確的話,那么就是由于私有證書的根證書是不存在于iPhone Simulator的,因此還是無法通過SSL連接。
所以我們需要把自簽名的根證書添加到iPhone Simulator中,現(xiàn)在可以在iMac上右鍵點擊自簽名根證書文件,通過發(fā)送到Simulator即可發(fā)送到。
在Simulator中通過Setting-》About -》Certificate Trust Settings -》激活剛才發(fā)送的證書即可