将 DigitalOcean Managed MongoDB 连接到 Laravel(调用 ismaster 时出现连接错误)

Connecting DigitalOcean Managed MongoDB to Laravel (connection error calling ismaster)

我正在尝试使用 DigitalOcean 提供的托管 MongoDB 设置 Laravel,但由于某些原因数据库未连接。

我碰壁了,我认为这与 authSource 有关,但无法通过 cli 复制它,否则...

.env 文件

MONGO_DSN="mongodb+srv://username:password@digitaloceanhostname/databasename?authSource=admin"
MONGO_DATABASE="databasename"
MONGO_USER="username"
MONGO_PASSWORD="password"
MONGO_TLS=true 
MONGO_TLS_CERT="./mongo-db-cert.crt"

config/database.php

'connectionmethod' => [
    'driver' => 'mongodb',
    'dsn' => env('MONGO_DSN'),
    'database' => env('MONGO_DATABASE', ''),
    'username' => env('MONGO_USER', ''),
    'password' => env('MONGO_PASSWORD', ''),
    'options'  => [
        'tls' => (bool) env('MONGO_TLS', false),
        'tlsCAFile' => env('MONGO_TLS_CERT', null),
        'authSource' => 'admin',
        'db' => 'admin',
        'database' => 'admin',
    ],
],

以上导致以下错误:

ERROR: No suitable servers found (`serverSelectionTryOnce` set): [connection error calling ismaster on 'digitaloceanhostname'
(MongoDB\Driver\Exception\ConnectionTimeoutException(code: 13053): No suitable servers found (`serverSelectionTryOnce` set): [connection error calling ismaster on 'digitaloceanhostname:27017']

但是,当使用 CLI 调用 ismaster 时,它起作用了:

# mongo "mongodb+srv://MONGO_USER:MONGO_PASSWORD@digitaloceanhostname/MONGO_DATABASE?authSource=admin" --eval 'printjson(db.runCommand({"isMaster": 1}))' --ssl --sslCAFile ./mongo-db-cert.crt

运行 没有 ?authSource=admin 会导致身份验证错误,这让我认为来自 laravel 的连接错误是同一回事。

环境:

# mongo --version
MongoDB shell version v3.6.8

# apt list --installed | grep php | grep mongo
php7.4-mongodb/focal,now 1.9.0+1.7.5-6+ubuntu20.04.1+deb.sury.org+1 amd64 [installed]

# php artisan --version
Laravel Framework 5.8.38

我可能遗漏了一些明显的东西,但在看了一整天之后,任何意见都将不胜感激!

解决方案是提供证书的完整路径。