Поиск по сайту:

Как установить PostgreSQL и phpPgAdmin на Fedora 34


На этой странице

  1. Предпосылки
  2. Шаг 1. Установите PostgreSQL
  3. Шаг 2. Создайте новый кластер базы данных PostgreSQL
  4. Шаг 3. Роли PostgreSQL и методы аутентификации
  5. Шаг 4. Создание новых ролей и баз данных.
  6. Шаг 5. Включите удаленный доступ к серверу PostgreSQL.
  7. Шаг 6. Установите phpPgAdmin, Nginx и PHP
    1. Настройка PHP
    2. Настройка Nginx

    1. Настройка SSL для автоматического продления

    PostgreSQL или Postgres — это мощная система управления реляционными базами данных с открытым исходным кодом, которая использует и расширяет язык SQL. Он имеет множество расширенных функций, которые безопасно хранят и масштабируют сложные рабочие нагрузки данных. phpPgAdmin — это приложение на основе PHP для управления и редактирования баз данных PostgreSQL.

    В этом руководстве показано, как установить PostgreSQL и phpPgAdmin на сервер с Fedora 34.

    Предпосылки

    1. A Fedora 34 based server.

    2. Keep your systems updated.

      $ sudo dnf update
      
    3. A non-root user with sudo privileges.

    Шаг 1 — Установите PostgreSQL

    Fedora 34 поставляется с различными версиями PostgreSQL, доступными в их репозитории. Вы можете выбирать между этими версиями, включив соответствующий модуль, представляющий собой набор пакетов и зависимостей.

    Сначала проверьте доступные потоки для модуля postgresql с помощью команды dnf.

    $ dnf module list postgresql
    Name                        Stream                  Profiles                           Summary
    postgresql                  9.6                     client, server [d]                 PostgreSQL module
    postgresql                  10                      client, server [d]                 PostgreSQL module
    postgresql                  11                      client, server [d]                 PostgreSQL module
    postgresql                  12                      client, server                     PostgreSQL module
    postgresql                  13                      client, server                     PostgreSQL module
    

    Чтобы установить PostgreSQL, нам нужно включить соответствующий поток модулей.

    $ sudo dnf module enable postgresql:13
    

    При появлении запроса введите Y, чтобы включить поток.

    Затем установите сервер PostgreSQL.

    $ sudo dnf install postgresql-server
    

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

    $ sudo dnf install postgresql-contrib
    

    Теперь, когда сервер установлен, нам нужно создать нового пользователя.

    Шаг 2. Создайте новый кластер базы данных PostgreSQL.

    Во-первых, вам нужно создать новый кластер базы данных PostgreSQL. Кластер баз данных — это набор баз данных, управляемых одним экземпляром сервера. При создании кластера будут созданы каталоги, в которых будет размещена база данных. Весь этот процесс также похож на инициализацию PostgreSQL.

    Этот процесс создает базы данных  template1 и postgres. База данных template1 — это шаблон, используемый PostgreSQL для создания новых баз данных. База данных postgres является базой данных по умолчанию для использования пользователями, утилитами и сторонними приложениями.

    Чтобы создать кластер базы данных для инициализации PostgreSQL, используйте следующую команду.

    $ sudo postgresql-setup --initdb
    

    Теперь запустите службу PostgreSQL.

    $ sudo systemctl start postgresql
    

    Включите службу PostgreSQL.

    $ sudo systemctl enable postgresql
    

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

    Шаг 3 — Роли PostgreSQL и методы аутентификации

    Postgres использует концепцию «ролей» для проверки подлинности и разрешений. PostgreSQL поддерживает несколько методов аутентификации. Наиболее часто используемые методы:

    • Доверие – роль, которая может подключаться без пароля, если выполняются условия, определенные в /var/lib/pgsql/pg_hba.conf.
    • Пароль. Роль, которая использует пароль для подключения. Пароли могут храниться в виде md5, scram-sha-256 и в открытом виде.
    • Идентификатор. Для этого требуется имя пользователя клиентской ОС, и он поддерживается только для соединений TCP/IP.
    • Peer — то же, что и Ident, но поддерживается только для локальных подключений.

    Postgres по умолчанию использует одноранговую аутентификацию, что означает, что он связывает роли Postgres с соответствующей учетной записью пользователя Linux. Если внутри Postgres существует роль, имя пользователя Linux с таким же именем может войти в систему под этой ролью. Детали аутентификации клиента хранятся в файле /var/lib/pgsql/pg_hba.conf.

    В процессе установки Postgres создается учетная запись пользователя с именем postgres, связанная с ролью Postgres по умолчанию.

    Переключитесь на учетную запись postgres.

    $ sudo -i -u postgres
    

    Вы можете получить доступ к приглашению Postgres, используя следующую команду.

    $ psql
    

    Это войдет в приглашение PostgreSQL, где вы сможете получить доступ к базам данных и использовать их с помощью различных команд. Вы можете выйти из подсказки, набрав:

    postgres-# \q
    

    Это вернет вас к учетной записи Linux для учетных записей Postgres. Чтобы вернуться к своей учетной записи пользователя, введите exit в командной строке.

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

    $ sudo -u postgres psql
    

    Чтобы выйти из подсказки, введите:

    postgres-# \q
    

    Шаг 4 — Создание новых ролей и баз данных.

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

    Сначала подключитесь к оболочке psql.

    $ sudo -u postgres psql
    

    Создайте новую роль PostgreSQL с такими разрешениями, как «Суперпользователь», «Создать базу данных», «Создать роль» и «Войти». Этот пользователь будет использоваться далее в руководстве для входа в phpPgAdmin.

    postgres-# CREATE ROLE username WITH SUPERUSER CREATEDB CREATEROLE LOGIN ENCRYPTED PASSWORD 'yourpassword';
    

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

    postgres-# \du
                                       List of roles
     Role name |                         Attributes                         | Member of
    -----------+------------------------------------------------------------+-----------
     username  | Superuser, Create role, Create DB                          | {}
     postgres  | Superuser, Create role, Create DB, Replication, Bypass RLS | {}
    

    Создайте новую базу данных.

    postgres-# CREATE DATABASE userdb;
    

    Предоставьте привилегии пользователю в базе данных, которую мы только что создали, выполнив следующий запрос.

    postgres-# GRANT ALL PRIVILEGES ON DATABASE userdb TO username;
    

    Вы можете проверить все доступные базы данных с помощью следующей команды.

    postgres-# \l
                                      List of databases
       Name    |  Owner   | Encoding |   Collate   |    Ctype    |   Access privileges
    -----------+----------+----------+-------------+-------------+-----------------------
     userdb    | postgres | UTF8     | en_US.UTF-8 | en_US.UTF-8 | =Tc/postgres         +
               |          |          |             |             | postgres=CTc/postgres+
               |          |          |             |             | navjot=CTc/postgres
     postgres  | postgres | UTF8     | en_US.UTF-8 | en_US.UTF-8 |
     template0 | postgres | UTF8     | en_US.UTF-8 | en_US.UTF-8 | =c/postgres          +
               |          |          |             |             | postgres=CTc/postgres
     template1 | postgres | UTF8     | en_US.UTF-8 | en_US.UTF-8 | =c/postgres          +
               |          |          |             |             | postgres=CTc/postgres
    (4 rows)
    

    Шаг 5. Включите удаленный доступ к серверу PostgreSQL.

    По умолчанию сервер PostgreSQL слушает только локальный интерфейс. Чтобы включить удаленный доступ к вашему серверу PostgreSQL, откройте файл postgresql.conf.

    $ sudo nano /var/lib/pgsql/data/postgresql.conf
    

    Прокрутите вниз до раздела ПОДКЛЮЧЕНИЯ И АУТЕНТИФИКАЦИИ и измените/отредактируйте следующую строку, удалив символ решетки.

    #listen_addresses = 'localhost'         # what IP address(es) to listen on;
    

    Измените строку на следующую.

    listen_addresses = '*' 			        # what IP address(es) to listen on;
    

    Сохраните файл, нажав Ctrl + X и введя Y при появлении запроса.

    Следующим шагом является настройка сервера для приема удаленных подключений путем редактирования файла pg_hba.conf.

    $ sudo nano /var/lib/pgsql/data/pg_hba.conf
    

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

    # TYPE  DATABASE        USER            ADDRESS                 METHOD
    
    # The user jane can access all databases from all locations using an md5 password
    host    all             john            0.0.0.0/0                md5
    
    # The user jane can access only the janedb database from all locations using an md5 password
    host    johndb          john            0.0.0.0/0                md5
    
    # The user jane can access all databases from a trusted location (192.168.1.110) without a password
    host    all             john            192.168.1.110            trust
    

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

    Добавьте необходимую конфигурацию, а затем сохраните файл, нажав Ctrl + X и введя Y при появлении запроса.

    Перезапустите сервер PostgreSQL, чтобы изменения вступили в силу.

    $ sudo systemctl restart postgresql
    

    Проверьте изменения с помощью утилиты ss.

    $ ss -nlt | grep 5432
    LISTEN   0    128    0.0.0.0:5432    0.0.0.0:*       
    LISTEN   0    128    [::]:5432      [::]:*  
    

    Это показывает, что сервер PostgreSQL прослушивает порт по умолчанию на всех интерфейсах.

    Шаг 6 — Установите phpPgAdmin, Nginx и PHP

    phpPgAdmin обычно поставляется с репозиторием PostgreSQL или Fedora, но не с Fedora 34. Поэтому вам нужно будет установить его вручную. Наряду с phpPgAdmin вам также необходимо установить веб-сервер Nginx и программное обеспечение PHP.

    $ wget https://github.com/phppgadmin/phppgadmin/releases/download/REL_7-13-0/phpPgAdmin-7.13.0.tar.gz
    

    Распакуйте скачанный архив.

    $ tar -zxvf phpPgAdmin-7.13.0.tar.gz
    

    Создайте каталог, в котором будет жить ваш сайт.

    $ sudo mkdir /var/www/phppgadmin/html -p
    

    Переместите извлеченные файлы в каталог /var/www/phppgadmin/html.

    $ sudo mv phpPgAdmin-7.13.0/ /var/www/phppgadmin/html
    

    Установите сервер Nginx и PHP вместе с соответствующими модулями PHP.

    $  sudo dnf install nginx php-fpm php-cli php-pgsql php-mbstring
    

    Настройте брандмауэр Fedora.

    $ sudo firewall-cmd --permanent --add-service=http
    $ sudo firewall-cmd --permanent --add-service=https
    

    Перезагрузите брандмауэр, чтобы активировать правила.

    $ sudo firewall-cmd --reload
    

    Настроить PHP

    Откройте файл /etc/php-fpm.d/www.conf для редактирования с помощью nano editor.

    $ sudo nano /etc/php-fpm.d/www.conf
    

    Нам нужно установить для пользователя/группы Unix процессов PHP значение nginx. Найдите в файле строки user=apache и group=apache и измените их на nginx.

    ...
    ; Unix user/group of processes
    ; Note: The user is mandatory. If the group is not set, the default user's group
    ;       will be used.
    ; RPM: apache user chosen to provide access to the same directories as httpd
    user = nginx
    ; RPM: Keep a group allowed to write in log dir.
    group = nginx
    ...
    

    Сохраните файл, нажав Ctrl + X и введя Y при появлении запроса.

    Перезапустите процесс PHP-fpm.

    $ sudo systemctl restart php-fpm
    

    Настроить Nginx

    Выполните следующую команду, чтобы добавить файл конфигурации для вашего сайта.

    $ sudo nano /etc/nginx/conf.d/phppgadmin.conf
    

    Вставьте следующий код в редактор.

    server {
      listen          *:80;
      server_name     phppgadmin.example.com;
      root            /var/www/phppgadmin/html;
      index           index.php;
    
      location / {
        try_files   $uri $uri/ =404;
      }
        
      access_log /var/log/nginx/phppgadmin.access.log;
      error_log /var/log/nginx/phppgadmin.error.log;
    
      location ~ \.php$ {
        try_files $uri =404;
        fastcgi_pass  unix:/run/php-fpm/www.sock;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        fastcgi_index index.php;
        include  fastcgi_params;
      }
    }
    

    Нажмите Ctrl + X, чтобы закрыть редактор, и нажмите Y, когда будет предложено сохранить файл.

    Этот файл предполагает, что мы будем размещать phppgadmin.example.com в каталоге /var/www/html/phppgadmin.

    Протестируйте конфигурацию Nginx.

    $ sudo nginx -t
    

    Вы должны увидеть следующий вывод, указывающий, что ваша конфигурация верна.

    nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
    nginx: configuration file /etc/nginx/nginx.conf test is successful
    

    Запустите и включите службу Nginx.

    $ sudo systemctl start nginx
    $ sudo systemctl enable nginx
    

    Запустите http://phppgadmin.example.com в своем браузере, и вы должны увидеть страницу phpPgAdmin по умолчанию в своем браузере.

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

    Шаг 7. Установите SSL (необязательно)

    Мы можем включить SSL с помощью сервиса Lets Encrypt SSL. Для этого установите инструмент Certbot.

    $ sudo dnf install certbot-nginx
    

    Создайте SSL-сертификат.

    $ sudo certbot --nginx -d phppgadmin.example.com
    

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

    Вы должны получить доступ к phpPgAdmin, набрав https://phppgadmin.example.com в своем браузере.

    Настройте SSL для автоматического продления

    Откройте редактор Crontab.

    $ EDITOR=nano sudo crontab -e
    

    Вставьте следующую строку внизу.

    . . .
    25 2 * * * /usr/bin/certbot renew --quiet
    

    Часть 25 2 * * * в этой строке означает «выполнять следующую команду в 2:25 каждый день». Вы можете выбрать любое время.

    Сохраните файл, нажав Ctrl + X и введя Y при появлении запроса.

    Ваш SSL-сертификат будет автоматически обновлен.

    Заключение

    На этом мы завершаем наше руководство по установке PostgreSQL и phpPgAdmin на сервер с Fedora 34. Если у вас есть какие-либо вопросы, задайте их в комментариях ниже.