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
-
Un servidor basado en Fedora 34.
-
Mantenga sus 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. Puede elegir entre estas versiones habilitando el módulo apropiado, que es una colección de paquetes y dependencias.
Primero, verifique las transmisiones disponibles para postgresql
módulo usando el dnf
comando.
$ 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 contrib
paquete, 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:crear 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 sola 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 template1
y postgres
bases de datos La template1
La base de datos es una plantilla utilizada por PostgreSQL para crear nuevas bases de datos. El postgres
base de datos 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:roles 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 pueda conectarse sin contraseña, siempre que se cumplan las condiciones definidas en
/var/lib/pgsql/pg_hba.conf
se cumplen. - Contraseña - Un rol que utiliza la contraseña para conectarse. Las contraseñas se pueden almacenar como
md5
,scram-sha-256
y texto claro. - Identidad - Requiere el nombre de usuario del sistema operativo del cliente y solo se admite en conexiones TCP/IP.
- Compañeros - 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 /var/lib/pgsql/pg_hba.conf
archivo.
El proceso de instalación de Postgres crea una cuenta de usuario llamada postgres
que está asociado con el rol predeterminado de Postgres.
Cambiar a postgres
cuenta.
$ 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 aviso escribiendo:
postgres-# \q
Lo llevará de regreso a la cuenta de Linux de la cuenta de Postgres. Para volver a su propia cuenta de usuario, escriba exit
en el aviso.
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 bash Shell o psql
cáscara. Para nuestros propósitos, usaremos el psql
shell ya que hace el trabajo más rápido.
Primero, conéctese a psql
concha.
$ 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 usará 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 | {}
Crea 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 postgresql.conf
archivo.
$ 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 lo siguiente.
listen_addresses = '*' # what IP address(es) to listen on;
Guarde el archivo presionando Ctrl + X e ingresando Y cuando se le solicite.
El siguiente paso es configurar el servidor para aceptar conexiones remotas editando el pg_hba.conf
archivo.
$ 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 Ctrl + X e ingresando Y cuando se le solicite.
Reinicie el servidor PostgreSQL para que el cambio surta efecto.
$ sudo systemctl restart postgresql
Verifica los cambios con el ss
utilidad.
$ 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:instalar 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 la 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 a /var/www/phppgadmin/html
directorio.
$ 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 cortafuegos para activar las reglas.
$ sudo firewall-cmd --reload
Configurar PHP
Abra el archivo /etc/php-fpm.d/www.conf
para editar usando nano editor
.
$ sudo nano /etc/php-fpm.d/www.conf
Necesitamos configurar el usuario/grupo de procesos PHP de Unix en nginx . Encuentra el user=apache
y group=apache
líneas 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 Ctrl + X e ingresando Y cuando se le solicite.
Reinicie el proceso 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;
}
}
Presiona Ctrl + X para cerrar el editor y presiona 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.
Haga clic en 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.
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ía poder acceder a phpPgAdmin escribiendo https://phppgadmin.example.com
en su navegador.
Configurar SSL para 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
El 25 2 * * *
parte 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 Ctrl + X e ingresando 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.