Настройка Web Dev в WSL2 Kali Linux 2022 Edition — Часть 1: Подключение баз данных MariaDB и PostgreSQL через Windows и WSL2

Когда я только начинал знакомиться с WSL 1.0, сетевое взаимодействие было более простым. Но поскольку WSL2 использует динамический виртуальный IP-адрес для каждой виртуальной машины, теперь все стало немного сложнее. Здесь мы научимся устанавливать сервер и клиент Postgres и MariaDB как в Windows, так и в WSL2 Linux и получать к ним доступ через виртуальное Ethernet-соединение. Под термином используя взаимозаменяемо мы подразумеваем доступ к базе данных в Windows из WSL2 Linux и наоборот.

ПОСТАНОВКА ЗАДАЧИ: WSL2 IPv4 имеет доступ к PostgreSQL с localhost в Linux, но не в Windows. Для связи между ними требуется назначенный IP-адрес виртуального Ethernet-адаптера, а также требуется брандмауэр.

ТРЕБОВАНИЯ: Клиенты баз данных должны иметь возможность доступа к серверам баз данных как в одной, так и в другой ОС. Клиент WSL должен иметь доступ к серверу в Windows, а клиенты Windows должны иметь доступ к базе данных в WSL2.

Для начала работы необходимо установить на машину дистрибутив на базе Windows и WSL2.

Взаимозаменяемая работа с базами данных

Источник: https://dev.to/hymanzhan/setting-up-wsl-2-for-web-development-3202

Обратите внимание, что вам необходимо определить IP-адрес виртуальной машины (WSL) и хост-машины, с которой вы работаете, который может отличаться от IP-адреса вашей локальной физической машины. Вы можете найти IP-адрес с помощью диспетчера задач, а также с помощью этой команды в WSL:

ip route # or

ip addr | grep eth0
Войти в полноэкранный режим Выйти из полноэкранного режима

Возможно, вам также потребуется включить брандмауэр на порту 3306 для MariaDB и 5432 для Postgres для обеспечения взаимосвязи.

Если вам по каким-то причинам требуется перенаправление портов в WSL, в этой статье все подробно описано. Для сравнения Postgres и MySQL вы можете посмотреть этот блог EDB, чтобы выбрать систему баз данных в соответствии с вашими потребностями.

Серверы баз данных

Серверы баз данных в Windows

Для Windows вы можете получить PostgreSQL от EDB и pgAdmin 4 с их страницы загрузки. Просто установите их и при необходимости добавьте их каталоги bin в папку path.

Для MariaDB я рекомендую использовать XAMPP, так как он надежен и прост для начинающих. Но если вы хотите установить автономную версию, вы можете скачать и установить ее с официального сайта MariaDB. Вы можете использовать как MySQL Workbench, так и phpmyadmin для доступа к ним в качестве клиента.

Вы должны иметь возможность нормального доступа в Windows с помощью команд psql и mysql.

Включение/отключение серверов баз данных в Windows осуществляется через «Службы Windows». Доступ к ней можно получить, введя service.msc в «Выполнить» Windows (Win+R).

Серверы баз данных в Linux

Сервер PostgreSQL в WSL

Большинство дистрибутивов Linux уже имеют исходники для установки пакетов Postgres.

sudo apt update
sudo apt install postgresql postgresql-client postgresql-client-common postgresql-common postgresql-contrib -y
psql --version # to confirm installation
sudo service postgresql start # replace ending by stop to stop server, restart to restart server

sudo -u postgres psql # to access Postges via command line (both in Linux)
Вход в полноэкранный режим Выход из полноэкранного режима

СОВЕТ: вы можете проверить статус ваших служб в Linux, используя sudo service --status-all в оболочке.

Это ожидаемый результат после правильной установки.

Чтобы решить проблему отказа в подключении, вот обходной путь:

sudo -u postgres psql -c 'SHOW config_file' # to locate config file
Войдите в полноэкранный режим Выйдите из полноэкранного режима

Как только вы найдете файл, измените listen_addresses на * в postgresql.conf, перезапустите Postgres командой sudo service postgresql restart.

Также обновите это в pg_hba.conf, чтобы разрешить удаленный аутентификатор с хоста Windows.

...
host  all       all       0.0.0.0/0            scram-sha-256
host  all       all       ::/0              scram-sha-256
Войдите в полноэкранный режим Выход из полноэкранного режима

Это менее рекомендуемый метод (для безопасности), который вы можете попробовать в случае, если вышеуказанные методы не позволяют вам подключиться в Windows:

#newline
host    all             all             all                     trust
Войти в полноэкранный режим Выйти из полноэкранного режима

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

Сервер MariaDB в WSL

Вот команды, достаточные для настройки сервера MariaDB в WSL:

sudo apt install mariadb-server
sudo service mariadb start
sudo mysql # to access the database CLI
Войти в полноэкранный режим Выйти из полноэкранного режима

Чтобы изменить порт, отредактируйте конфигурационный файл /etc/mysql/my.cnf, который соответствует вашим потребностям.

В этом потоке StackOverflow предлагается отредактировать файл /etc/mysql/mariadb.conf.d/50-server.cnf, заменив bind-address = 127.0.0.1 (localhost) на bind-address = 0.0.0.0 или * (all). После перезапуска сервера с помощью $ sudo service mariadb restart, вы сможете войти в сервер баз данных Linux в клиенте Windows также с правильной конфигурацией учетных данных (имя пользователя, пароль).

Клиенты базы данных

Клиенты базы данных в Windows получают доступ к базе данных как в Windows & WSL

Нам нужно включить брандмауэр для входящих и исходящих соединений в Windows (для работы между ними). Чтобы получить доступ, нам нужно найти IP виртуальной машины, на которой активен сервер базы данных, и мы можем получить доступ, указав хост, порт, пользователя и пароль от любого клиента базы данных. Этого процесса достаточно для хорошо настроенного сервера.

Вот пример команды psql для входа в систему для пользователя dev, чтобы избежать конфликта:

psql -U dev -d postgres -h 192.168.176.181 -p 5432 # server host IP
Войти в полноэкранный режим Выйти из полноэкранного режима

В pgAdmin укажите IP-адрес хоста из ip route и добавьте другие учетные данные для доступа к серверу Postgres на базе WSL.

Чтобы получить доступ к MariaDB в Windows с помощью XAMPP phpmyadmin, создайте пользователя на сервере WSL MariaDB (скажем, wsl_user без пароля) и предоставьте ALL PRIVELEDGES. Теперь, вы можете перейти на портал входа phpmyadmin и найти Debian в версии сервера.

Здесь mysql получает доступ к серверу в Windows в первом случае, а во втором случае, сервер изначально установлен в WSL. Поэтому доступ осуществляется с обеих сторон.

В phpMyAdmin вам также нужно изменить config.inc.php на $cfg['Servers'][$i]['auth_type'] = 'config'; на cookie, чтобы получить страницу входа.

Вот пример, показывающий доступ в командной строке (сервер базы данных находится в Windows):

Клиенты базы данных в WSL получают доступ к базе данных как в Windows, так и в WSL

Чтобы psql в WSL получил доступ к базе данных Windows, необходимо найти IP хоста (например, с помощью ip route), а затем выполнить следующую команду:

psql -h [HOST ADDRESS] -U [USER NAME]
Войти в полноэкранный режим Выйти из полноэкранного режима

Для клиентского доступа к MariaDB все просто, как mysql, например mysql -u wsl_root -p -h 172.24.xxx.xxx:

Чтобы упростить ситуацию, просто создайте нового пользователя и получайте доступ через него:

CREATE USER 'wsl_root'@'localhost' IDENTIFIED BY 'password';
GRANT ALL PRIVILEGES ON *.* TO 'wsl_root'@'localhost' WITH GRANT OPTION;
CREATE USER 'wsl_root'@'%' IDENTIFIED BY 'password';
GRANT ALL PRIVILEGES ON *.* TO 'wsl_root'@'%' WITH GRANT OPTION;
FLUSH PRIVILEGES;
Войти в полноэкранный режим Выйти из полноэкранного режима

Более подробную информацию вы можете получить в этих блогах: https://dev.to/hymanzhan/setting-up-wsl-2-for-web-development-3202 и https://dev.to/qviper/connecting-mysql-server-in-windows-machine-from-wsl-4pf1.

Советы

Полное удаление Postgres

Вот подробное решение этого процесса:

  • Удалите Postgres из apt (или из другой установки, если таковая имеется):
  sudo apt-get --purge remove postgresql postgresql-*
Войдите в полноэкранный режим Выйдите из полноэкранного режима
  • Проверьте, удалены ли пакеты:
  dpkg -l | grep postgres
Войдите в полноэкранный режим Выйти из полноэкранного режима

Вот подробное описание процесса:

  • Удалите Postgres из apt (или из другой установки, если таковая имеется):
  sudo apt-get --purge remove postgresql postgresql-*
Войти в полноэкранный режим Выйти из полноэкранного режима
  • Проверьте, удалены ли пакеты:
  dpkg -l | grep postgres
Войдите в полноэкранный режим Выйти из полноэкранного режима

Здесь вы должны обнаружить, что пакеты пусты. Если нет, удалите их вручную.

  • Удалите папки конфигурации, указанные ниже:
  sudo rm -rf /var/lib/postgresql/
  sudo rm -rf /var/log/postgresql/
  sudo rm -rf /etc/postgresql/
Войти в полноэкранный режим Выйти из полноэкранного режима
  • Наконец, удалите пользователя postgres:
  sudo deluser postgres
Войти в полноэкранный режим Выйти из полноэкранного режима

Обходной путь для ошибки в phpmyadmin

Предоставьте все права доступа к root и pma и удалите пароль:

CREATE USER 'pma'@'localhost' IDENTIFIED BY '';

SET PASSWORD FOR root@localhost='';
Войдите в полноэкранный режим Выйти из полноэкранного режима

Ссылки

  • https://docs.microsoft.com/en-us/windows/wsl/networking
  • https://www.enterprisedb.com/postgres-tutorials/how-use-postgresql-django
  • https://www.enterprisedb.com/blog/how-to-secure-postgresql-security-hardening-best-practices-checklist-tips-encryption-authentication-vulnerabilities
  • https://www.enterprisedb.com/postgresql-tutorial-resources-training
  • https://dev.to/hymanzhan/setting-up-wsl-2-for-web-development-3202#install-database-in-wsl
  • https://stackoverflow.com/questions/56824788/how-to-connect-to-windows-postgres-database-from-wsl

Оцените статью
Procodings.ru
Добавить комментарий