Рубрики
Uncategorized

Как подключить Ваше приложение Laravel к управляемой базе данных MySQL 8 компании Digital Ocean

Если вы похожи на меня, вы потратили слишком много времени, пытаясь правильно подключиться к управляемому MySQL 8… Помеченный как laravel, mysql, база данных, php.

Если вы похожи на меня, вы потратили слишком много времени, пытаясь правильно подключиться к управляемой базе данных MySQL 8 от Digital Ocean.

Все выглядит великолепно, вы считаете, что все настроили правильно, но затем вы получаете SQLSTATE[HY000] [2002] Доктрина\DBAL\Драйвер\PDO\Исключение ошибка вашего приложения.

Не очень полезное сообщение об ошибке, я тоже видел его слишком много раз.

Если вы на моем месте, не волнуйтесь, я вас прикрою. Вот пошаговое руководство о том, как это исправить и настроить рабочее соединение из Laravel с управляемой базой данных DigitalOcean MySQL 8.

Конфигурации Цифрового океана

Давайте начнем с настройки базы данных.

Создайте управляемую базу данных в Цифровом океане. Обязательно выберите MySQL версии 8, предпочтительно в том же регионе, где находится ваш сервер Laravel.

Как только это будет сделано, я рекомендую создать нового пользователя вместо того, чтобы использовать пользователя по умолчанию.

Вы можете сделать это на вкладке Пользователи и базы данных :

Убедитесь, что шифрование пароля сохранено как есть (MySQL 8+).

Пока вы здесь, вы также можете создать базу данных для своего проекта, это зависит от вас.

Следующее, что вам нужно сделать, это разрешить трафик из различных надежных источников . Это означает, что только определенные компьютеры/серверы могут получить доступ к вашей базе данных.

Вы можете настроить это в разделе Настройки вкладки Надежные источники .

Обязательно добавьте IP-адрес сервера Laravel (или, если он размещен в DigitalOcean, вы можете ссылаться на него по имени), а также свой локальный IP-адрес, чтобы вы могли подключиться со своего компьютера.

Проверка соединения

Если все прошло нормально, вы можете просмотреть подробную информацию о подключении на вкладке Обзор :

Убедитесь, что выбран ваш новый пользователь и ваша база данных, чтобы вы видели правильные данные для входа.

Кроме того, убедитесь, что вы видите общедоступный хост, когда пытаетесь подключиться со своего компьютера.

Теперь загрузите файл Сертификат CA и сохраните его в безопасном месте. Этот файл понадобится позже при подключении из Laravel.

Но пока попробуйте подключиться с вашего локального клиента MySQL.

Обязательно выберите подключение к MySQL 8 и используйте следующую конфигурацию:

  • ведущий: prod-do-user-XXXXXX.b.db.ondigitalocean.com замените общедоступным именем хоста вашей базы данных
  • порт: 25060 это не значение по умолчанию, 3306, обязательно обновите его!
  • имя пользователя
  • пароль убедитесь, что не копируете лишний пробел в конце пароля
  • база данных

и, наконец, выберите опцию, чтобы вы могли добавить сертификат центра сертификации, который вы только что скачали.

Вот как может выглядеть конфигурация в таблице Плюс:

Вы должны быть в состоянии подключиться прямо сейчас. Если все еще есть какие-то проблемы, дважды проверьте, внесен ли ваш IP-адрес в белый список в списке надежных источников на панели управления Digital Ocean.

Подключение из Laravel

Настройка сервера

Прежде чем что-либо настраивать, убедитесь, что у вас включено расширение MySQL для вашего PHP.

Вы можете проверить это, запустив 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-сертификат.crt . Но это может быть где угодно.

Важно то, что ваше приложение Laravel может получить к нему доступ. Для этого вам необходимо установить некоторые разрешения для файла.

Я рекомендую очень ограничительные разрешения, такие как это:

chmod 440 ca-certificate.crt

Также убедитесь, что пользователь, выполняющий PHP-скрипт (обычно www-data ), имеет доступ к этому файлу:

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
  • Подключение, база данных, имя пользователя и пароль должны быть понятны сами по себе.
  • Если вы подключаетесь с другого сервера Digital Ocean в том же регионе, используйте частную сеть VPC хозяин (вы можете найти его на вкладке Обзор цифрового океана).
  • Порт всегда должен быть 25060, и вы должны включить SSL_MODE как требуется .
  • И обязательно укажите полный абсолютный путь к вашему сертификату центра сертификации.

Если все настроено, обязательно очистите кэш конфигурации Laravel, запустив php artisan config:cache .

Тестирование и устранение неполадок

Если вы выполнили эти действия, вы сможете подключиться к своей базе данных.

Чтобы быстро протестировать его, используйте Laravel’s Tinker:

php artisan tinker

>>> DB::connection()->getDatabaseName();

Это должно быть возвращено с именем вашей базы данных.

Если по какой-то причине вы все еще не можете подключиться, дважды проверьте эти распространенные ошибки:

  • IP-адрес приложения Laravel не внесен в белый список в списке надежных источников Digital Ocean
  • неверный путь для сертификата центра сертификации
  • сертификат CA не читается приложением Laravel (разрешение, проблемы с владением)
  • дополнительный пробел после пароля
  • старая конфигурация Laravel кэшируется, обновите ее с помощью php artisan config: кэш

Оригинал: “https://dev.to/johnnyfekete/how-to-connect-your-laravel-application-to-digital-ocean-s-managed-mysql-8-database-2khh”