Cómo instalar PostgreSQL y phpPgAdmin en Fedora 34

Página de inicio de phpPgAdmin

PostgreSQL o Postgres es un potente sistema de gestión de bases de datos relacionales de código abierto que utiliza y amplía el lenguaje SQL. Tiene muchas funciones avanzadas que almacenan y escalan de forma segura cargas de trabajo de datos complicadas. phpPgAdmin es una aplicación basada en PHP para administrar y editar bases de datos PostgreSQL.

Este tutorial demostrará cómo instalar PostgreSQL y phpPgAdmin en un servidor basado en Fedora 34.

requisitos previos

  1. Un servidor basado en Fedora 34.
  2. Mantenga sus sistemas actualizados.
    $ sudo dnf update
    
  3. Un usuario no root con privilegios sudo.

Paso 1 – Instalar PostgreSQL

Fedora 34 viene con diferentes versiones de PostgreSQL disponibles en su repositorio. Puede elegir entre estas versiones habilitando el módulo apropiado, que es una colección de paquetes y dependencias.

Primero, verifique los flujos disponibles para el módulo postgresql usando el comando 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

Para instalar PostgreSQL, debemos habilitar el flujo de módulo correspondiente.

$ sudo dnf module enable postgresql:13

Cuando se le solicite, ingrese Y para habilitar la transmisión.

A continuación, instale el servidor PostgreSQL.

$ sudo dnf install postgresql-server

Es posible que desee instalar el paquete contrib, que agrega varias funciones adicionales al sistema de base de datos PostgreSQL.

$ sudo dnf install postgresql-contrib

Ahora que el servidor está instalado, necesitamos crear un nuevo usuario.

Paso 2: cree un nuevo clúster de base de datos de PostgreSQL

Primero, debe crear un nuevo clúster de base de datos PostgreSQL. Un clúster de base de datos es una colección de bases de datos administradas por una única instancia de servidor. La creación de un clúster creará directorios en los que se colocará la base de datos. Todo este proceso también es similar a inicializar PostgreSQL.

Este proceso crea bases de datos template1 y postgres. La base de datos template1 es una plantilla utilizada por PostgreSQL para crear nuevas bases de datos. La base de datos de postgres es la base de datos predeterminada para uso de usuarios, utilidades y aplicaciones de terceros.

Para crear el clúster de la base de datos para inicializar PostgreSQL, use el siguiente comando.

$ sudo postgresql-setup --initdb

Ahora, inicie el servicio PostgreSQL.

$ sudo systemctl start postgresql

Habilite el servicio PostgreSQL.

$ sudo systemctl enable postgresql

Ahora que PostgreSQL está funcionando, podemos crear nuevos usuarios y bases de datos y comenzar a usarlos.

Paso 3: funciones y métodos de autenticación de PostgreSQL

Postgres usa el concepto de «roles» para manejar la autenticación y los permisos. PostgreSQL admite múltiples métodos de autenticación. Los métodos más utilizados son:

  • Confianza – Un rol que puede conectarse sin contraseña, siempre que se cumplan las condiciones definidas en /var/lib/pgsql/pg_hba.conf.
  • Clave – Un rol que utiliza la contraseña para conectarse. Las contraseñas se pueden almacenar como md5, scram-sha-256 y texto claro.
  • Identificador – Requiere el nombre de usuario del sistema operativo del cliente y solo se admite en conexiones TCP/IP.
  • Par – Igual que Ident pero compatible solo con conexiones de host local.

Postgres usa la autenticación de pares de forma predeterminada, lo que significa que asocia los roles de Postgres con una cuenta de usuario de Linux coincidente. Si existe un rol dentro de Postgres, un nombre de usuario de Linux con el mismo nombre puede iniciar sesión como ese rol. Los detalles de la autenticación del cliente se almacenan en el archivo /var/lib/pgsql/pg_hba.conf.

El proceso de instalación de Postgres crea una cuenta de usuario llamada postgres que está asociada con el rol predeterminado de Postgres.

Cambie a la cuenta de postgres.

$ sudo -i -u postgres

Puede acceder al indicador de Postgres usando el siguiente comando.

$ psql

Esto lo iniciará en el indicador de PostgreSQL, donde puede acceder y usar bases de datos a través de varios comandos. Puede salir del indicador escribiendo:

postgres-# \q

Lo llevará de regreso a la cuenta de Linux de la cuenta de Postgres. Para volver a salir a su propia cuenta de usuario, escriba exit cuando se le solicite.

También puede acceder al indicador de Postgres sin cambiar de cuenta escribiendo el siguiente comando.

$ sudo -u postgres psql

Para salir del indicador, escriba:

postgres-# \q

Paso 4: creación de nuevos roles y bases de datos.

Puede crear roles y bases de datos directamente desde el shell bash o el shell psql. Para nuestros propósitos, usaremos el shell psql ya que hace el trabajo más rápido.

Primero, conéctese al shell psql.

$ sudo -u postgres psql

Cree una nueva función de PostgreSQL con permisos como Superusuario, Crear base de datos, Crear función e Iniciar sesión. Este usuario se utilizará más adelante en el tutorial para iniciar sesión en phpPgAdmin.

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

Puede verificar todos los usuarios disponibles con el siguiente comando.

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 | {}

Cree una nueva base de datos.

postgres-# CREATE DATABASE userdb;

Otorgue privilegios al usuario en la base de datos que acabamos de crear ejecutando la siguiente consulta.

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

Puede verificar todas las bases de datos disponibles con el siguiente comando.

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)

Paso 5: habilite el acceso remoto al servidor PostgreSQL

De forma predeterminada, el servidor PostgreSQL solo escucha en la interfaz localhost. Para habilitar el acceso remoto a su servidor PostgreSQL, abra el archivo postgresql.conf.

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

Desplácese hacia abajo hasta la sección CONEXIONES Y AUTENTICACIÓN y cambie/edite la siguiente línea eliminando el símbolo de almohadilla.

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

Cambie la línea a la siguiente.

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

Guarde el archivo presionando Control + X y entrando Y cuando se le solicite. Publicidad

El siguiente paso es configurar el servidor para aceptar conexiones remotas editando el archivo pg_hba.conf.

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

Hay varias formas de dar acceso a conexiones remotas. Puede restringir las conexiones remotas a un solo usuario o una sola base de datos o a todos ellos y restringir las conexiones a cada dirección IP o una ubicación de confianza.

# 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

También hay otras entradas en el archivo, y el método de autenticación enumerado para ellas es ident. Deberá cambiar el valor de ident a md5 si desea iniciar sesión a través de la interfaz web.

Agregue la configuración requerida y luego guarde el archivo presionando Control + X y entrando Y Cuando se le solicite.

Reinicie el servidor PostgreSQL para que el cambio surta efecto.

$ sudo systemctl restart postgresql

Verifique los cambios con la utilidad ss.

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

Esto muestra que el servidor PostgreSQL está escuchando en el puerto predeterminado en todas las interfaces.

Paso 6: instale phpPgAdmin, Nginx y PHP

phpPgAdmin generalmente se envía con el repositorio de PostgreSQL o Fedora, pero no en Fedora 34. Por lo tanto, deberá instalarlo manualmente. Junto con phpPgAdmin, también debe instalar el servidor web Nginx y el software PHP.

Descargue la última versión de phpPgAdmin desde el Página de lanzamientos de Github. Al momento de escribir este tutorial, la última versión disponible es la 7.13.0.

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

Extraiga el archivo descargado.

$ tar -zxvf phpPgAdmin-7.13.0.tar.gz

Cree el directorio donde vivirá su sitio.

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

Mueva los archivos extraídos al directorio /var/www/phppgadmin/html.

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

Instale el servidor Nginx y PHP junto con los módulos PHP apropiados.

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

Configure el cortafuegos de Fedora.

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

Vuelva a cargar el firewall para activar las reglas.

$ sudo firewall-cmd --reload

Configurar PHP

Abra el archivo /etc/php-fpm.d/www.conf para editar usando el editor nano.

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

Necesitamos configurar el usuario/grupo de Unix de procesos PHP para nginx. Busque las líneas user=apache y group=apache en el archivo y cámbielas a 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
...

Guarde el archivo presionando Control + X y entrando Y Cuando se le solicite.

Reinicie el proceso de PHP-fpm.

$ sudo systemctl restart php-fpm

Configurar Nginx

Ejecute el siguiente comando para agregar un archivo de configuración para su sitio.

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

Pegue el siguiente código en el editor.

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;
  }
}

Prensa Control + X para cerrar el editor y pulsar Y cuando se le solicite guardar el archivo.

Este archivo asume que hospedaremos phppgadmin.example.com en el directorio /var/www/html/phppgadmin.

Pruebe la configuración de Nginx.

$ sudo nginx -t

Debería ver el siguiente resultado que indica que su configuración es correcta.

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

Inicie y habilite el servicio Nginx.

$ sudo systemctl start nginx
$ sudo systemctl enable nginx

Inicie http://phppgadmin.example.com en su navegador y debería ver la página predeterminada de phpPgAdmin en su navegador.

Página de inicio de phpPgAdmin

Haga clic en el enlace de PostgreSQL en la barra lateral izquierda e ingrese el usuario y la contraseña que creó anteriormente para iniciar sesión y acceder al portal.

Panel de administración de phpPg

Paso 7 – Instalar SSL (Opcional)

Podemos habilitar SSL utilizando el servicio Let’s Encrypt SSL. Para eso, instale la herramienta Certbot.

$ sudo dnf install certbot-nginx

Genere el certificado SSL.

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

Se le pedirá su dirección de correo electrónico y aceptar los términos del servicio. Cuando se le solicite acceso HTTPS, elija el método seguro para redirigir todas las solicitudes de HTTP a HTTPS.

Deberías poder acceder phpPgAdmin escribiendo https://phppgadmin.example.com en su navegador.

Configurar SSL para la renovación automática

Abre el editor Crontab.

$ EDITOR=nano sudo crontab -e

Pegue la siguiente línea en la parte inferior.

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

La parte 25 2 * * * de esta línea significa «ejecutar el siguiente comando a las 2:25 am, todos los días». Puede elegir cualquier momento.

Guarde el archivo presionando Control + X y entrando Y Cuando se le solicite.

Su certificado SSL se renovará automáticamente.

Conclusión

Esto concluye nuestro tutorial sobre cómo instalar PostgreSQL y phpPgAdmin en un servidor basado en Fedora 34. Si tiene alguna pregunta, publíquela en los comentarios a continuación.

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *