あなたのLaravelアプリケーションをデジタル海洋管理MySQL


あなたが私のような場合は、適切にデジタルオーシャンから管理されたMySQL 8データベースに接続しようとしてあまりにも多くの時間を過ごした.
すべては素晴らしいように見えます、あなたは正しくすべてを構成したと信じます、しかし、あなたはあなたのアプリケーションからSQLSTATE[HY000] [2002] Doctrine\DBAL\Driver\PDO\Exceptionエラーを受け取ります.
あまり有用なエラーメッセージ、私もそれをあまりにも多くの回見た.
あなたが私の靴にいるならば、心配しないでください、私はあなたをカバーしました.ここでは、ステップバイステップガイドでは、それを修正し、laravelからデジタル海の管理MySQLの8データベースに接続を設定する方法です.

ディジタル海洋形態
データベースの設定を始めましょう.
デジタルオーシャンでマネージデータベースを作成します.MySQLバージョン8を選択してください.

一旦それが完了するならば、私はデフォルトのものを使用する代わりに新しいユーザーをつくることを勧めます.
タブの下で行うことができます.

パスワード暗号化を維持するようにしてください.
ここにいる間、プロジェクトのデータベースを作成することもできます.
あなたがする必要がある次のことは、さまざまな信頼できるソースからトラフィックを許可することです.
これは、特定のコンピュータ/サーバだけがあなたのデータベースにアクセスできることを意味します.
タブの信頼できるソースセクションの下でこれを設定できます.
Laravel ServerのIPアドレスを追加してください(または、デジタルオーシャンでホストされている場合は、名前で参照することができます)とローカルIPも同様に、あなたのコンピュータから接続することができます.

接続のテスト
すべてがうまくいったら、[概要]タブの接続の詳細を見ることができます.

あなたの新しいユーザーとデータベースが選択されていることを確認するので、正しいログインの詳細を参照してください.
また、パブリックホストを参照してください.
さて、CA証明書ファイルをダウンロードして、どこか安全に保存してください.
このファイルは、Laravelから接続するときに後で必要になります.
しかし、今のところ、ローカルのMySQLクライアントから接続してみてください.
MySQL 8接続を選択し、次の設定を使用します.
  • ホスト: prod-do-user-XXXXXX.b.db.ondigitalocean.comデータベースのパブリックホスト名に置き換えられます
  • ポート:25060それはデフォルトではない、3306、それを更新することを確認!
  • ユーザー名
  • パスワードは、パスワードの最後に余分なスペースをコピーしないようにしてください
  • のデータベース
  • そして、最後に、あなたがダウンロードしたCA証明書を加えることができるように、オプションを選んでください.
    これは、tableplusで設定できる方法です.

    今すぐに接続することができます.まだ問題があるならば、あなたのIPがデジタル海洋ダッシュボードの信頼されたソースリストでwhitestedされるならば、二重チェックをしてください.

    ラーラビルからの接続

    サーバの設定
    何かを設定する前に、MySQL拡張モジュールが有効になっていることを確認してください.
    サーバー上でphp -iを実行することでこれをチェックできます.
    Ubuntuサーバでこれを行うことができます.
    sudo apt install php8.0-mysql
    

    データベース接続の設定
    まず、アプリのデータベース構成config/database.phpをチェックしましょう.
    MySQLドライバの設定の最後に次を追加します.
    'ssl_mode' => env('SSL_MODE'),
    'options' => extension_loaded('pdo_mysql') ? array_filter([
         PDO::MYSQL_ATTR_SSL_CA => env('MYSQL_ATTR_SSL_CA'),
    ) : []
    
    次のようになります.


    CA証明書のアップロード
    次に、CA証明書をサーバーにアップロードします.
    プロジェクトのストレージフォルダに追加することをお勧めします.[PATH TO MY PROJECT]/storage/certs/ca-certificate.crt .しかし、それはどこにでもありえます.
    重要なのは、あなたのLaravelアプリケーションがそれにアクセスできることです.そのためには、ファイルにいくつかのパーミッションを設定する必要があります.
    このような非常に制限的なアクセス許可をお勧めします.
    chmod 440 ca-certificate.crt
    
    また、PHPスクリプト(通常WWWデータ)を実行するユーザがこのファイルにアクセスしていることを確認します.
    chown www-data:www-data ca-certificate.crt
    

    環境変数の設定
    最後のステップはlaravelで環境変数を設定することです.
    単にあなたの編集.ENVファイルとデータベース領域で値を置き換えます.
    DB_CONNECTION=mysql
    DB_HOST=private-XXXXX.b.db.ondigitalocean.com
    DB_PORT=25060
    DB_DATABASE=XXXXX
    DB_USERNAME=XXXXX
    DB_PASSWORD=XXXXX
    SSL_MODE=required
    MYSQL_ATTR_SSL_CA=[PATH TO MY PROJECT]/storage/certs/ca-certificate.crt
    
  • 接続、データベース、ユーザ名、およびパスワードは自明であるべきです.
  • 同じ地域の別のデジタルオーシャンサーバーから接続している場合は、プライベートVPCネットワークホストを使用します.
  • ポートは常に25060であるべきです、そして、あなたはrequiredとしてSSLRUNEモードを含まなければなりません.
  • とCA証明書に完全な絶対パスを含めるようにしてください.
  • すべてが設定されている場合は、php artisan config:cacheを実行して、ラーラヴィルの設定キャッシュをきれいにしてください.

    テストとトラブルシューティング
    これらの手順を実行すると、データベースに接続できます.
    迅速にテストするには、ラーラーベルのティッカーを使用してください.
    php artisan tinker
    
    >>> DB::connection()->getDatabaseName();
    
    これはデータベースの名前で戻ります.
    何らかの理由でまだ接続できない場合は、これらの一般的なエラーを二重にチェックしてください.
  • LaravelアプリケーションのIPは、デジタル海の信頼できるソースリスト
  • でwhitelistedされません
    CA証明書のための
  • 不正確な経路
  • Laravelアプリケーション(許可、所有権問題)によってCA証明書が読めません
    パスワード
  • の後の余分の空白
  • 古いLaravelの設定はキャッシュされ、php artisan config:cacheで更新されます