美文网首页
使用docker部署本地Parse Server环境的一些坑

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

作者: 启发禅悟 | 来源:发表于2023-03-31 10:17 被阅读0次
    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

    相关文章

      网友评论

          本文标题:使用docker部署本地Parse Server环境的一些坑

          本文链接:https://www.haomeiwen.com/subject/copzrdtx.html