Cómo instalar PostgreSQL y phpPgAdmin en Fedora 34
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 características avanzadas que permiten almacenar y escalar con seguridad cargas de trabajo de datos complicadas. phpPgAdmin es una aplicación basada en PHP para gestionar y editar bases de datos PostgreSQL.
Este tutorial mostrará cómo instalar PostgreSQL y phpPgAdmin en un servidor basado en Fedora 34.
Requisitos previos
-
Un servidor basado en Fedora 34.
-
Mantén tus sistemas actualizados.
$ sudo dnf update
-
Un usuario no root con privilegios sudo.
Paso 1 - Instalar PostgreSQL
Fedora 34 viene con diferentes versiones de PostgreSQL disponibles en su repositorio. Puedes elegir entre estas versiones habilitando el módulo correspondiente, que es un conjunto de paquetes y dependencias.
En primer lugar, comprueba las corrientes disponibles para el módulo postgresql
mediante 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, tenemos que habilitar el flujo del módulo correspondiente.
$ sudo dnf module enable postgresql:13
Cuando se te pida, introduce Y
para habilitar el flujo.
A continuación, instala el servidor PostgreSQL.
$ sudo dnf install postgresql-server
Es posible que quieras instalar el paquete contrib
, que añade varias funciones adicionales al sistema de bases de datos PostgreSQL.
$ sudo dnf install postgresql-contrib
Ahora que el servidor está instalado, tenemos que crear un nuevo usuario.
Paso 2 - Crear un nuevo cluster de bases de datos PostgreSQL
En primer lugar, tienes que crear un nuevo clúster de base de datos PostgreSQL. Un clúster de bases de datos es un conjunto de bases de datos gestionadas por una única instancia de servidor. Al crear un clúster se crearán directorios en los que se colocará la base de datos. Todo este proceso también es similar a la inicialización de PostgreSQL.
Este proceso crea las bases de datostemplate1
y postgres
. La base de datos template1
es una plantilla que utiliza PostgreSQL para crear nuevas bases de datos. La base de datos postgres
es la base de datos por defecto que utilizan los usuarios, las utilidades y las aplicaciones de terceros.
Para crear el clúster de bases de datos para inicializar PostgreSQL, utiliza el siguiente comando.
$ sudo postgresql-setup --initdb
Ahora, inicia el servicio PostgreSQL.
$ sudo systemctl start postgresql
Habilita el servicio PostgreSQL.
$ sudo systemctl enable postgresql
Ahora que PostgreSQL está en marcha, podemos crear nuevos usuarios y bases de datos y empezar a utilizarlos.
Paso 3 - Roles y métodos de autenticación de PostgreSQL
Postgres utiliza el concepto de "roles" para gestionar la autenticación y los permisos. PostgreSQL admite varios 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
. - Contraseña - Un rol que utiliza la contraseña para conectarse. Las contraseñas pueden almacenarse como
md5
,scram-sha-256
y en texto claro. - Ident - Requiere el nombre de usuario del SO del cliente y sólo se admite en conexiones TCP/IP.
- Peer - Igual que Ident pero sólo se admite en conexiones localhost.
Postgres utiliza la autenticación por pares por defecto, lo que significa que asocia los roles de Postgres con la coincidencia de una cuenta de usuario de Linux. Si un rol existe 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 al rol por defecto de Postgres.
Pasa a la cuenta postgres
.
$ sudo -i -u postgres
Puedes acceder al prompt de Postgres utilizando el siguiente comando.
$ psql
Esto te hará entrar en el prompt de PostgreSQL, donde puedes acceder y utilizar las bases de datos mediante varios comandos. Puedes salir del prompt escribiendo:
postgres-# \q
Esto te devolverá a la cuenta Linux de la cuenta Postgres. Para salir de nuevo a tu propia cuenta de usuario, escribe exit
en el prompt.
También puedes acceder al prompt de Postgres sin cambiar de cuenta escribiendo el siguiente comando.
$ sudo -u postgres psql
Para salir del prompt, escribe:
postgres-# \q
Paso 4 - Crear nuevos roles y bases de datos.
Puedes crear roles y bases de datos directamente desde el shell bash o el shell psql
. Para nuestro propósito, utilizaremos el shell psql
ya que hace el trabajo más rápidamente.
Primero, conéctate al shell psql
.
$ sudo -u postgres psql
Crea un nuevo rol de PostgreSQL con permisos como Superusuario, Crear base de datos, Crear rol e Iniciar sesión. Este usuario se utilizará más adelante en el tutorial para iniciar sesión enphpPgAdmin.
postgres-# CREATE ROLE username WITH SUPERUSER CREATEDB CREATEROLE LOGIN ENCRYPTED PASSWORD 'yourpassword';
Puedes comprobar 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 | {}
Crea una nueva base de datos.
postgres-# CREATE DATABASE userdb;
Concede 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;
Puedes comprobar 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 - Habilitar el acceso remoto al servidor PostgreSQL
Por defecto, el servidor PostgreSQL sólo escucha en la interfaz localhost. Para habilitar el acceso remoto a tu servidor PostgreSQL, abre el archivo postgresql.conf
.
$ sudo nano /var/lib/pgsql/data/postgresql.conf
Desplázate hasta la sección CONEXIONES Y AUTENTICACIÓN y cambia/edita la siguiente línea eliminando el símbolo de la almohadilla.
#listen_addresses = 'localhost' # what IP address(es) to listen on;
Cambia la línea por la siguiente.
listen_addresses = '*' # what IP address(es) to listen on;
Guarda el archivo pulsando Ctrl + X e introduciendo Y cuando te lo pida.
El siguiente paso es configurar el servidor para que acepte conexiones remotas editando el archivo pg_hba.conf
.
$ sudo nano /var/lib/pgsql/data/pg_hba.conf
Hay varias formas de dar acceso a las conexiones remotas. Puedes restringir las conexiones remotas a un solo usuario o a una sola base de datos, o a todos ellos y restringir las conexiones a cada dirección IP o a 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 que aparece para ellas es ident
. Tendrás que cambiar el valor de ident
por el de md5
si quieres conectarte a través de la interfaz web.
Añade la configuración necesaria y luego guarda el archivo pulsando Ctrl + X e introduciendo Y cuando se te pida.
Reinicia el servidor PostgreSQL para que el cambio surta efecto.
$ sudo systemctl restart postgresql
Verifica 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 por defecto en todas las interfaces.
Paso 6 - Instalar phpPgAdmin, Nginx y PHP
phpPgAdmin suele venir con el repositorio de PostgreSQL o de Fedora, pero no en Fedora 34. Por lo tanto, tendrás que instalarlo manualmente. Junto con phpPgAdmin, también necesitas instalar el servidor web Nginx y el software PHP.
. En el 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
Extrae el archivo descargado.
$ tar -zxvf phpPgAdmin-7.13.0.tar.gz
Crea el directorio donde vivirá tu sitio.
$ sudo mkdir /var/www/phppgadmin/html -p
Mueve los archivos extraídos al directorio /var/www/phppgadmin/html
.
$ sudo mv phpPgAdmin-7.13.0/ /var/www/phppgadmin/html
Instala el servidor Nginx y PHP junto con los módulos PHP adecuados.
$ sudo dnf install nginx php-fpm php-cli php-pgsql php-mbstring
Configura el cortafuegos de Fedora.
$ sudo firewall-cmd --permanent --add-service=http
$ sudo firewall-cmd --permanent --add-service=https
Recarga el cortafuegos para activar las reglas.
$ sudo firewall-cmd --reload
Configura el PHP
Abre el archivo /etc/php-fpm.d/www.conf
para editarlo con nano editor
.
$ sudo nano /etc/php-fpm.d/www.conf
Necesitamos establecer el usuario/grupo Unix de los procesos PHP a nginx. Busca las líneas user=apache
y group=apache
en el archivo y cámbialas 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
...
Guarda el archivo pulsando Ctrl + X e introduciendo Y cuando te lo pida.
Reinicia el proceso PHP-fpm.
$ sudo systemctl restart php-fpm
Configurar Nginx
Ejecuta el siguiente comando para añadir un archivo de configuración para tu sitio.
$ sudo nano /etc/nginx/conf.d/phppgadmin.conf
Pega 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;
}
}
Pulsa Ctrl + X para cerrar el editor y pulsa Y cuando te lo pida para guardar el archivo.
Este archivo asume que vamos a alojar phppgadmin.example.com
en el directorio /var/www/html/phppgadmin
.
Prueba la configuración de Nginx.
$ sudo nginx -t
Deberías ver la siguiente salida que indica que tu 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
Inicia y activa el servicio Nginx.
$ sudo systemctl start nginx
$ sudo systemctl enable nginx
Inicia http://phppgadmin.example.com
en tu navegador, y deberías ver la página predeterminada de phpPgAdmin en tu navegador.
Haz clic en el enlace PostgreSQL
de la barra lateral izquierda e introduce el usuario y la contraseña que creaste anteriormente para iniciar sesión y acceder al portal.
Paso 7 - Instalar SSL (opcional)
Podemos activar el SSL utilizando el servicio Let's Encrypt SSL. Para ello, instala la herramienta Certbot.
$ sudo dnf install certbot-nginx
Genera el certificado SSL.
$ sudo certbot --nginx -d phppgadmin.example.com
Se te pedirá tu dirección de correo electrónico y que aceptes las condiciones del servicio. Cuando te pidan el acceso HTTPS, elige el método Seguro para redirigir todas las peticiones de HTTP a HTTPS.
Deberías poder acceder a phpPgAdmin escribiendo https://phppgadmin.example.com
en tu navegador.
Configurar SSL para la renovación automática
Abre el editor Crontab.
$ EDITOR=nano sudo crontab -e
Pega 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 de la madrugada, todos los días". Puedes elegir cualquier hora.
Guarda el archivo pulsando Ctrl + X e introduciendo Y cuando se te pida.
Tu certificado SSL se renovará automáticamente.
Conclusión
Con esto concluye nuestro tutorial sobre cómo instalar PostgreSQL y phpPgAdmin en un servidor basado en Fedora 34. Si tienes alguna pregunta, publícala en los comentarios de abajo.