Написано, чтобы не забыть, и относится в основном к учебным проектам
Скачиваем и устанавливаем VirtualBox: https://www.virtualbox.org/wiki/Downloads
Скачиваем, например, Ubuntu (не принципиально какую, но я ставил 20.04, это последняя с длительным сроком поддержки): https://ubuntu.ru/get.
Есть смысл качать серверную версию: в ней нет графического интерфейса, зато ей не нужно выделять много ресурсов виртуальной машины (а установка не сложна).
pgAdmin (для работы с БД) качать тут: https://www.pgadmin.org/download/
Вся настройка виртуальной машины выходит за рамки этой статьи, но нужно описать настройку сети
В настройках созданной машины открываем раздел "Сеть"
Во вкладке "Адаптер 1" тыкаем галочку "включить сетевой адаптер", если она ещё не поставлена. Там ставим NAT.
Во вкладке "Адаптер 2" тыкаем галочку "включить сетевой адаптер"
В типе подключения выбираем VirtualBox Host-Only Ethernet Adapter. Тыкаем в Дополнительно, там выбираем Тип адаптера Intel PRO/1000 MT Server (какие-то-цифры). (Насчёт этого не уверен, но в интернетах пишут, что с дефолтным не будет работать)
И жмём ОК.
Если нет в списке VirtualBox Host-Only Ethernet Adapter, то в окне программы тыкаем: Файл - Менеджер сетей хоста - Создать
Ещё советую программу обновить (да, даже сразу после установки - всякое бывает)
Далеко не копал, но судя по всему, виртуальная машина (или именно сама убунта на виртуалке) не умеет одновременно общаться с одного физического адреса (mac-адреса) и с системой-хостом и с внешней сетью, поэтому нужно два адаптера - один у нас даёт интернет для гостевой системы, а второй - связь с хостовой системой
После установки убунты открываем эмулятор терминала (CTRL+ALT+T или на рабочем столе правой кнопкой - открыть терминал)
Установка PostgreSQL:
sudo apt install postgresql postgresql-contrib
Если до этого ещё никогда не работали с unix системами, то надо отметить два момента:
Установка net-tools (не обязательно, но понадобится для проверки):
sudo apt install net-tools
(пошуршит, спросит - ввести "y", нажать Enter)
Снова в терминале:
sudo gedit /etc/postgresql/12/main/postgresql.conf
Про sudo
не забываем, т.к. это запрос прав суперпользователя на выполнение записи в файл. Без этого файл откроется, но сохранить его будет нельзя.
Помним также о том, что 12 в адресе файла - это версия PostgreSQL, она может быть другой, но на момент написания она такая
Если поставили серверную версию, то вместо gedit пишите edit или nano, но с ними надо будет заранее посмотреть, как сохранить и как выйти (в nano сохранить - Ctrl+O - Enter, выход - Ctrl+X)
Попросит пароль (тот, что указывали при установке)
Открывается блокнот (на самом деле gedit/nano/edit), ищем там раздел connection and authentical
Строку
listen address = '127.0.0.1'
заменить на
listen address = '*'
чтобы сервер слушал не только локалхост (это вариант только для учебных целей, в продакшене, я думаю, так не стоит делать :)).
ПРОВЕРИТЬ, ЧТОБЫ СТРОКА НЕ БЫЛА ЗАКОММЕНТИРОВАНА! (т.е. в начале этой строки не должно быть #)
Раздел resource usage:
shared_buffers = 128MB
это кэш, меняем на четверть ОЗУ
сохраняем, закрываем.
в окне эмулятора терминала пишем:
ifconfig
Если нет ifconfig (хотя, он должен быть установиться вместе с net-tools):
Два варианта:
sudo apt install net-tools
ip link show
покажет что-то такое:
1: lo:mtu 65536 qdisc noqueue state UNKNOWN mode DEFAULT group default qlen 1000 link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00 2: enp0s3: mtu 1500 qdisc fq_codel state UP mode DEFAULT group default qlen 1000 link/ether 08:00:27:e3:19:d0 brd ff:ff:ff:ff:ff:ff 3: enp0s8: mtu 1500 qdisc fq_codel state UP mode DEFAULT group default qlen 1000 link/ether 08:00:27:92:f9:f8 brd ff:ff:ff:ff:ff:ff 4: docker0: mtu 1500 qdisc noqueue state DOWN mode DEFAULT group default link/ether 02:42:16:13:67:fb brd ff:ff:ff:ff:ff:ff
нас интересует интерфейс enp0s8, он должен был получить адрес типа 192.168.56.101 (или типа того, если у вас только один виртуальный адаптер сети VirtualBox и это первый. Если второй - то 102, итд.)
узнаем адрес:
ip addr show enp0s8
3: enp0s8:mtu 1500 qdisc fq_codel state UP group default qlen 1000 link/ether 08:00:27:92:f9:f8 brd ff:ff:ff:ff:ff:ff inet 192.168.56.101/24 brd 192.168.56.255 scope global dynamic enp0s8 valid_lft 545sec preferred_lft 545sec inet6 fe80::a00:27ff:fe92:f9f8/64 scope link valid_lft forever preferred_lft forever
Всё верно: inet 192.168.56.101
нас интересует интерфейс enp0s8:
там скорее всего будет адрес, типа: 192.168.56.101 (после 56 что-то своё может быть). Запоминаем этот адрес - по нему будем подключаться через pgAdmin (если его использовать будете), а конкретно - он вводится в Host name
Значит, 192.168.56.1 - это адрес хоста (т.е. венды, в нашем случае).
Можно это проверить: в венде win+R, пишем cmd, Enter, ipconfig
Адаптер Ethernet VirtualBox Host-Only Network: DNS-суффикс подключения . . . . . : Локальный IPv6-адрес канала . . . : fe80::a95a:4c7a:da99:6117%6 IPv4-адрес. . . . . . . . . . . . : 192.168.56.1 Маска подсети . . . . . . . . . . : 255.255.255.0
Открываем другой конфиг, тоже через терминал:
sudo gedit /etc/postgresql/12/main/pg_hba.conf
Добавляем в самый низ строку:
host all all 192.168.56.1/0 trust
Сохраняем, закрываем.
Рестарт сервера (всё ещё в окне эмулятора терминала):
sudo systemctl restart postgresql
Проверяем:
netstat -nl | grep 5432
Должен вывести что-то такое:
netstat -nl | grep 5432
tcp 0 0 0.0.0.0:5432 0.0.0.0:* LISTEN
tcp6 0 0 :::5432 :::* LISTEN
unix 2 [ ACC ] STREAM LISTENING 40661 /var/run/postgresql/.s.PGSQL.5432
если вывел такое:
tcp 0 0 127.0.0.1:5432 0.0.0.0:* LISTEN
unix 2 [ ACC ] STREAM LISTENING 38847 /var/run/postgresql/.s.PGSQL.5432
То значит забыли в конфигах изменить listen address = '127.0.0.1' на '*' или не проверили, что строка закомментирована (напоминаю: в начале строки не должно быть символа #)
sudo -u postgres psql
(от имени пользователя postgres запуск psql с правами суперпользователя)
там вводим:
ALTER USER postgres PASSWORD 'password';
\q
Разумеется, пароль ввести можете какой угодно, на реальном проекте лучше что-то посложнее.
Эту пару пользователь-пароль нужно будет вводить при подключении к этой БД (в pgAdmin, например). В этом примере пользователь - postgres, пароль - password
создание пользователя:
sudo -i -u postgres
psql (\q для выхода)
createuser --interactive
создание пароля:
sudo -u postgres psql postgres
\password postgres
\q
Last upd: 12.02.2022 -- KOSumosu