В октябре 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 + использовать онлайн конфигураторы простой и более сложный
На этом все, до скорых встреч.
Если у Вас возникли вопросы или Вы хотите, чтобы я помог Вам, то Вы всегда можете связаться со мной разными доступными способами.
Профессионально занимаюсь системным администрированием Linux -серверов и баз данных (MySQL, POstgreSQL) на протяжении последних 24 лет.