viernes, 12 de agosto de 2016

Instalación Básica del Servidor PostgreSQL usando el Código Fuente



En esta entrada vamos a instalar el servidor de base de datos PostgreSQL en Debian GNU/Linux Jessie y asumiremos una instalación básica en el sistema operativo junto con el meta-paquete build-essential que contiene una lista informativa de los programas considerados fundamentales para la compilación, configuración y empaquetado de programas para Debian.

 
Lo primero que haremos será descargar el código fuente de la base de datos en su versión 9.5.4.
# wget  https://ftp.postgresql.org/pub/source/v9.5.4/postgresql-9.5.4.tar.gz


Precondiciones

Antes de iniciar con el proceso de instalación necesitamos resolver e instalar las dependencias de paquetes necesarias:
  • zlib1g-dev: es una biblioteca que proporciona los archivos de desarrollo para implementar el método de compresión usado en gzip y PKZIP.
  • libreadline6-dev: esta biblioteca ayuda a mantener la consistencia de la interfaz de líneas de comandos entre distintos programas de usuarios.
  • libssl-dev: este paquete es parte de la implementación del proyecto OpenSSL que contiene bibliotecas de desarrollo, archivos de cabecera y páginas del manual para libssl y libcrypto que permiten la comunicación segura a través de Internet.
# apt-get  install  -y  zlib1g-dev  libreadline6-dev  libssl-dev


Crear la jerarquía de directorios

Vamos a crear las carpetas de trabajo para nuestro servidor de base de datos. Utilizaremos una carpeta para almacenar el código fuente, los datos y los archivos logs.
# mkdir  -p  /var/postgresql/source  /var/postgresql/data  /var/postgresql/logs
Luego procedemos a descomprimir el código fuente de PostgreSQL dentro de la carpeta source/ que recién creamos.
# tar  -zxvf  postgresql-9.5.4.tar.gz  -C  /var/postgresql/source/


Crear el usuario del sistema operativo

Existen varias configuraciones que podemos utilizar al momento de crear el usuario del sistema operativo, en este caso crearemos uno de nombre postgres con palabra clave, utilizaremos bash como shell y el directorio base será /home/postgres.
# useradd  -m  -p  p05tgr35  -s  /bin/bash postgres


Compilación e instalación

Vamos a ubicarnos en el directorio donde tenemos los archivos fuentes de PostgreSQL.
# cd  /var/postgresql/source/postgresql-9.5.4
Ahora configuraremos el proceso de compilación. Existe una larga lista de parámetros a utilizar, sin embargo usaremos unos pocos para realizar una instalación sencilla.
# ./configure  --prefix=/var/postgresql  --with-openssl
Una vez que el proceso de configuración haya culminado sin errores, podemos empezar a compilar los archivos fuentes.
# make
El tiempo del proceso de compilación varía dependiendo de los parámetros de configuración que hayamos definido con la instrucción ./configure y debería culminar con la frase “All of PostgreSQL successfully made. Ready to install.” que nos indica que no ocurrieron errores y que estamos preparados para realizar la instalación.
# make  install
Si obtenemos la frase “PostgreSQL installation complete.”al culminar el proceso de instalación, entonces habremos culminado con éxito todo el proceso y tendremos en la máquina el servidor, el cliente y las bibliotecas requeridas para trabajar con PostgreSQL.

Podemos validar la instalación confirmando, que en la ruta principal de la instalación (/var/postgresql), se hayan creado los directorios include, bin, shared y lib.

Como último paso de esta sección procedemos a colocar como dueño del directorio /var/postgresql y todo su contenido al usuario postgres que creamos con anterioridad.
# chown  postgres.  -R  /var/postgresql/


Inicialización

Para PostgreSQL, un clúster es una colección de bases de datos administradas por una sola instancia de servidor.

Con el comando initdb iniciamos la configuración regional y el conjunto de caracteres de codificación de todo el clúster de base de datos, además creamos el usuario administrador, generamos los directorios donde residirán los datos, creamos las tablas de catálogos compartidos y las bases de datos template1 y postgres.

Para arrancar con el clúster iniciamos sesión con el usuario postgres en el sistema operativo y, luego con el comando initdb configuraremos utf8 como formato de codificación de caracteres por defecto, crearemos el usuario postgres como administrador de la base de datos y definiremos /var/postgresql/data como ruta predefinida para almacenar todos los datos.
# su  –  postgres
$ /var/postgresql/bin/initdb -E utf8 -U postgres -D /var/postgresql/data
Con el clúster ya creado lo único que resta es levantar el servicio de base de datos para que atienda las peticiones.


Subir y bajar el servicio de PostgreSQL

Para iniciar el servicio de base de datos utilizaremos la instrucción pg_ctl especificando la acción que queremos realizar (lanzar el servicio), la ruta donde se almacenan los datos y la ruta donde se crean los archivos logs.
$ /var/postgresql/bin/pg_ctl  -D  /var/postgresql/data  -l  /var/postgresql/logs/serverlog_`/bin/date +%Y-%m-%d`.log  start
Si deseamos detener el servicio de base de datos utilizamos la siguiente instrucción:
$ /var/postgresql/bin/pg_ctl  -D  /var/postgresql/data  -m  fast  stop


Entrar a PostgreSQL usando el cliente (consola)

Nuestro primer ingreso al servidor de base de datos será para colocarle una palabra clave al usuario administrador.
$ /var/postgresql/bin/psql
psql  (9.5.4)
Type  "help"  for  help.

postgres=#  ALTER  ROLE  postgres  WITH  PASSWORD  'postgres';
ALTER  ROLE
Para ingresos posteriores a éste utilizaremos el comando psql acompañado de las siguientes opciones:
$ psql  -h  192.168.1.30  -U  postgres  -d  postgres  -W


Configuración

Ya tenemos el servicio de PostgreSQL funcionando pero solo aceptando conexiones locales. Vamos ahora a abrir el archivo de configuración de la base de datos para realizar las configuraciones necesarias en cuanto a seguridad y acceso remoto.
$ vim  /var/postgresql/data/postgresql.conf
Ubicamos el parámetro listen_addresses y le asignamos un asterisco (*) para indicarle al servidor que escuche todas las direcciones IP, con esto solventamos el inconveniente de accesar a la base de datos de forma remota.
#listen_addresses  =  'localhost'      # what IP address(es) to listen on;
listen_addresses  =  '*'                        # what IP address(es) to listen on;
Luego abrimos el archivo pg_hba.conf y agregamos una nueva clausula para decirle a PostgreSQL que escuche peticiones de otras máquinas por un socket TCP/IP, bien sea en texto plano o encriptado con SSL, que atienda a todas las bases de datos y a todos los usuarios, le indicamos la computadora o conjunto de ellas que pueden acceder a las bases de datos y que use el algoritmo md5 para cifrar la clave de los usuarios.
# IPv4  local  connections:
host      all      all      192.168.1.0/24      md5
Con esto le indicamos a PostgreSQL quién puede entrar, a cuál base de datos, desde una máquina en específico o desde un conjunto de ellas y bajo un método de autenticación, cubriendo de esta manera los aspectos básicos de seguridad.

Para facilitar el trabajo con el usuario del sistema operativo postgres, podemos agregar la ruta del directorio donde se encuentran los binarios de la base de datos a la variable de entorno PATH. Iniciamos sesión con el usuario postgres y en el directorio base abrimos con algún editor el archivo (oculto) .bashrc.
$ vim  ~/.bashrc
Al final del archivo agregamos la siguiente línea:
export  PATH=$PATH:/var/postgresql/bin


Script para la administración del servicio

En la Web existen muchos script que permiten gestionar el servicio de PostgreSQL, sin embargo a continuación se presenta el contenido de uno de ellos, que a pesar de ser sencillo, es muy robusto y flexible.

Vamos a crear el archivo /etc/init.d/postgresql con permisos de ejecución y le agregaremos las siguientes instrucciones:
#!  /bin/sh
#

##  EDIT  FROM  HERE

# Installation  prefix
prefix=/var/postgresql

# Data  directory
PGDATA="$prefix/data"

# Log  directory
PGLOGS="$prefix/logs"

# Who  to  run  the  postmaster  as,  usually  "postgres".   (NOT "root")
PGUSER=postgres

# Where  to  keep  a  log  file
PGLOG="$PGLOGS/serverlog-`/bin/date +%Y-%m-%d`.log"

## STOP  EDITING  HERE

# The  path  that  is  to  be  used  for  the  script
PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin

PGCTL="$prefix/bin/pg_ctl"

set  -e

# Only  start  if  we  can  find  the  postmaster.
test  -x  $PGCTL  ||  exit  0

# Parse  command  line  parameters.
case  $1  in
  start)
        echo  -n  "Starting PostgreSQL: "
        su  -  $PGUSER  -c  "$PGCTL  start  -D  '$PGDATA'  -s  -l  $PGLOG"
        echo "ok"
        ;;
  stop)
        echo -n "Stopping PostgreSQL: "
        su - $PGUSER -c "$PGCTL stop -D '$PGDATA' -s -m fast"
        echo "ok"
        ;;
  restart)
        echo -n "Restarting PostgreSQL: "
        su - $PGUSER -c "$PGCTL restart -D '$PGDATA' -s -m fast -w"
        echo "ok"
        ;;
  reload)
        echo -n "Reload PostgreSQL: "
        su - $PGUSER -c "$PGCTL reload -D '$PGDATA' -s"
        echo "ok"
        ;;
  status)
        su - $PGUSER -c "$PGCTL status -D '$PGDATA'"
        ;;
  *)
        # Print help
        echo "Usage: $0 {start|stop|restart|reload|status}" 1>&2
        exit 1
        ;;
esac

exit 0

No hay comentarios.:

Publicar un comentario