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

В октябре 2017 года я писал статью про установку PostgreSQL 10 на Debian 9, с тех пор много воды утекло, вышла 11-я версия PostgreSQL и я решил написать краткую статью про его установку на Oracle Linux 7.6

По сравнению с Debian в установке на Oracle Linux есть несколько нюансов и в статье я это опишу.

Исходные данные: Oracle Linux 7.6
Задача: Установить PostgreSQL 11.x

Идем на официальную страницу выбора 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 11.x:

yum -y install postgresql11-server

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

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

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

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

Initializing database ... OK

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

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

systemctl enable postgresql-11.service

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

systemctl start postgresql-11.service

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

systemctl status postgresql-11.service

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

● postgresql-11.service - PostgreSQL 11 database server
   Loaded: loaded (/usr/lib/systemd/system/postgresql-11.service; enabled; vendor preset: disabled)
   Active: active (running) since Wed 2019-03-13 23:01:43 +05; 10s ago
     Docs: https://www.postgresql.org/docs/11/static/
  Process: 3895 ExecStartPre=/usr/pgsql-11/bin/postgresql-11-check-db-dir ${PGDATA} (code=exited, status=0/SUCCESS)
 Main PID: 3902 (postmaster)
   CGroup: /system.slice/postgresql-11.service
           ├─3902 /usr/pgsql-11/bin/postmaster -D /var/lib/pgsql/11/data/
           ├─3903 postgres: logger
           ├─3905 postgres: checkpointer
           ├─3906 postgres: background writer
           ├─3907 postgres: walwriter
           ├─3908 postgres: autovacuum launcher
           ├─3909 postgres: stats collector
           └─3910 postgres: logical replication launcher

Mar 13 23:01:38 oracle76 systemd[1]: Starting PostgreSQL 11 database server...
Mar 13 23:01:43 oracle76 postmaster[3902]: 2019-03-13 23:01:43.797 +05 [3902] LOG:  listening on IPv6 address "::1%1", port 5432
Mar 13 23:01:43 oracle76 postmaster[3902]: 2019-03-13 23:01:43.798 +05 [3902] LOG:  listening on IPv4 address "127.0.0.1", port 5432
Mar 13 23:01:43 oracle76 postmaster[3902]: 2019-03-13 23:01:43.802 +05 [3902] LOG:  listening on Unix socket "/var/run/postgresql/.s.PGSQL.5432"
Mar 13 23:01:43 oracle76 postmaster[3902]: 2019-03-13 23:01:43.814 +05 [3902] LOG:  listening on Unix socket "/tmp/.s.PGSQL.5432"
Mar 13 23:01:43 oracle76 postmaster[3902]: 2019-03-13 23:01:43.836 +05 [3902] LOG:  redirecting log output to logging collector process
Mar 13 23:01:43 oracle76 postmaster[3902]: 2019-03-13 23:01:43.836 +05 [3902] HINT:  Future log output will appear in directory "log".
Mar 13 23:01:43 oracle76 systemd[1]: Started PostgreSQL 11 database server.

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

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

tcp        0      0 127.0.0.1:5432          0.0.0.0:*               LISTEN      3902/postmaster
tcp6       0      0 ::1:5432                :::*                    LISTEN      3902/postmaster

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

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

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

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

listen_addresses = 'localhost'

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

listen_addresses = 'localhost,192.168.35.10'

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

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

# IPv4 local connections:
host    all             all             127.0.0.1/32            ident

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

host    all             all             192.168.35.0/24         md5

,где 192.168.35.0/24 — это наша локальная подсеть.

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

systemctl restart postgresql-11.service

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

netstat -ltupn | grep -E 'post(gres|master)'
tcp        0      0 192.168.35.10:5432      0.0.0.0:*               LISTEN      7829/postmaster
tcp        0      0 127.0.0.1:5432          0.0.0.0:*               LISTEN      7829/postmaster
tcp6       0      0 ::1:5432                :::*                    LISTEN      7829/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
ACCEPT     tcp  --  0.0.0.0/0            0.0.0.0/0            tcp dpt:5432 ctstate NEW

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

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

В данной статье мы не производили первоначальную минимальную настройку параметров PostgreSQL, для этого Вы можете воспользоваться моей старой статьей про установку PostgreSQL 10 на Debian 9 + использовать онлайн конфигураторы простой и более сложный

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

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


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

avatar
1000

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

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