Установка и первоначальная настройка PostgreSQL 13 на Oracle Linux 7.9

2 года назад я уже писал статью про установку PostgreSQL 11 на Oracle Linux 7.6, с тех пор много воды утекло, вышла 13-я версия PostgreSQL и я решил написать краткую статью про его установку на Oracle Linux 7.9

Установка 13-й версии в целом такая же как и 11-я, но для начинающих специалистов есть пара нюансов.

Исходные данные: Oracle Linux 7.9
Задача: Установить PostgreSQL 13.2

Идем на официальную страницу выбора rpm-пакетов репозитариев и выбираем репозитарий Oracle Enterprise Linux 7 — x86_64

Устанавливаем репозитарий:

yum -y install https://download.postgresql.org/pub/repos/yum/reporpms/EL-7-x86_64/pgdg-redhat-repo-latest.noarch.rpm

Обновляем кэш пакетов:

yum makecache fast

Устанавливаем PostgreSQL 13.2:

yum -y install postgresql13-server postgresql13-contrib

После установки PostgreSQL 13.2 не создает кластер баз данных, это нужно сделать вручную.
Важно знать, что в Oracle Linux каталог с данными и файлами настройки будет /var/lib/pgsql/13/data

Создадим кластер баз данных, при этом зададим дополнительные настройки через PGSETUP_INITDB_OPTIONS:

export PGSETUP_INITDB_OPTIONS="--encoding='UTF-8' --lc-collate='en_US.UTF-8' --lc-ctype='en_US.UTF-8' --data-checksums"
/usr/pgsql-13/bin/postgresql-13-setup initdb

Будет выведено сообщение:

Initializing database ... OK

Я задал через PGSETUP_INITDB_OPTIONS свои настройки, у Вас их может не быть (можете использовать настройки по умолчанию), не нужно слепо повторять мой пример, читайте документацию и задавайте нужные Вам опции создания кластера баз данных PostgreSQL.

Теперь включим запуск PostgreSQL 11.x при запуске системы:

systemctl enable postgresql-13

И запустим его:

systemctl start postgresql-13

Проверим статус:

systemctl status postgresql-13

Будет выведено:

● postgresql-13.service - PostgreSQL 13 database server
   Loaded: loaded (/usr/lib/systemd/system/postgresql-13.service; enabled; vendor preset: disabled)
   Active: active (running) since Thu 2021-04-22 22:53:02 +05; 56s ago
     Docs: https://www.postgresql.org/docs/13/static/
  Process: 10660 ExecStartPre=/usr/pgsql-13/bin/postgresql-13-check-db-dir ${PGDATA} (code=exited, status=0/SU                         CCESS)
 Main PID: 10665 (postmaster)
   CGroup: /system.slice/postgresql-13.service
           ├─10665 /usr/pgsql-13/bin/postmaster -D /var/lib/pgsql/13/data/
           ├─10669 postgres: logger
           ├─10671 postgres: checkpointer
           ├─10672 postgres: background writer
           ├─10673 postgres: walwriter
           ├─10674 postgres: autovacuum launcher
           ├─10675 postgres: stats collector
           └─10676 postgres: logical replication launcher

Проверим открытые порты:

netstat -ltupn | grep -E 'post(gres|master)'

Результат:

tcp        0      0 0.0.0.0:5432            0.0.0.0:*               LISTEN      10761/postmaster
tcp6       0      0 :::5432                 :::*                    LISTEN      10761/postmaster

Первым делом меняем пароль пользователя postgres:

su - postgres
psql
postgres=# \password postgres
postgres=# \q

По умолчанию PostgreSQL принимает соединения только с локальных служб, т.к. слушает интерфейс localhost и это абсолютно правильно с точки зрения безопасности, но если Вы планируете подключения к серверу извне или из локальной сети, то Вам потребуется поменять параметр listen_addresses

Для PostgreSQL 13 открываем основной файл настроек /var/lib/pgsql/13/data/postgresql.conf и раскомментируем строку

listen_addresses = 'localhost'

исправим её на

listen_addresses = '*'

таким образом мы укажем PostgreSQL слушать сетевые соединения на всех сетевых интерфейсах.

Теперь разрешим подключение из локальной сети с любых хостов и к любым БД, для этого файле /var/lib/pgsql/13/data/pg_hba.conf после строки:

# IPv4 local connections:
host    all             all             127.0.0.1/32            scram-sha-256

Добавим строку:

host    all             all             192.168.10.0/24         md5

,где 192.168.10.0/24 — это наша локальная подсеть (у Вас она будет своя).

Далее выходим из под пользователя postgres и рестартуем PostgreSQL:

systemctl restart postgresql-13

Проверяем открытые порты:

netstat -ltupn | grep -E 'post(gres|master)'

Результат:

tcp        0      0 0.0.0.0:5432            0.0.0.0:*               LISTEN      10761/postmaster
tcp6       0      0 :::5432                 :::*                    LISTEN      10761/postmaster

По умолчанию в Oracle Linux включен firewalld и он запрещает все входящие соединения кроме служб ssh и dhcpv6-client, если мы решили открыть доступ на порт 5432 из локальной сети, то нужно настроить firewalld.

Проверим список разрешенных служб:

firewall-cmd --zone=public --list-services

Результат:

ssh dhcpv6-client

Теперь добавим службу postgresql:

firewall-cmd --zone=public --permanent --add-service=postgresql
firewall-cmd --reload

Проверим правила через iptables:

iptables -L IN_public_allow -n

Результат:

Chain IN_public_allow (1 references)
target     prot opt source               destination
ACCEPT     tcp  --  0.0.0.0/0            0.0.0.0/0            tcp dpt:22 ctstate NEW,UNTRACKED
ACCEPT     tcp  --  0.0.0.0/0            0.0.0.0/0            tcp dpt:5432 ctstate NEW,UNTRACKED

Более подробно о настройке firewalld можно узнать из этой статьи.

Отлично, порт открыт! Теперь мы можем подключиться к PostgreSQL c локального сервера и из нашей локальной сети.

На этом все, до скорых встреч.

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


Оставить комментарий

avatar
1000

Этот сайт использует Akismet для борьбы со спамом. Узнайте, как обрабатываются ваши данные комментариев.

  Подписаться  
Уведомление о