Manuales de desarrollo de YeboYebo
Dado que vamos a hacer una copia de todos los usuarios del sistema a migrar, la contraseña del usuario que realizará las acciones del docker (típicamente postgres), es importante que conozcamos su contraseña. Si no la conocemos deberemos cambiarla en el postgres actual antes de continuar.
Hacer un dump de usuarios y roles y de las bds que vayamos a pasar
pg_dumpall --globals-only -U antonio -h localhost -p 54322 > roles.dump
pg_dump yeboyebo -U antonio -h localhost -p 54322 > yeboyebo.dump
Si no podemos hacer la instalación con root, nos aseguramos que el usuario que usaremos pertenece al grupo docker.
sudo gpasswd -a $USER docker
newgrp docker
El servidor de Postgres es un proyecto de docker. Clonamos el proyecto con:
cd /opt
git clone https://github.com/yeboyebo/docker_postgres.git
Autenticar con el token generado en https://github.com/settings/tokens dando permiso a la parte de repos.
Obtendremos algo similar a:
Clonando en 'docker_postgres'...
Username for 'https://github.com': antonio-yeboyebo
Password for 'https://```antonio-yeboyebo@github.com':
remote: Enumerating objects: 44, done.
remote: Counting objects: 100% (44/44), done.
remote: Compressing objects: 100% (32/32), done.
remote: Total 44 (delta 15), reused 35 (delta 9), pack-reused 0
Desempaquetando objetos: 100% (44/44), 11.30 KiB | 680.00 KiB/s, listo.
NOTA: Pensar política de tokens
Para funcionar, el servidor debe detectar un fichero .env en el directorio principal. La estructura de este fichero debe ser:
En /opt/docker_postgres
Fichero .env
POSTGRES_USERNAME=**user**
POSTGRES_PASSWORD=**password**
## Carpeta externa donde generar las copias
EXTERNAL_VOLUME=/opt/postgres_data
External volume: Es aconsejable crear una carpeta externa distinta de la de la imagen de docker para guardar los datos externos.
Notas sobre el usuario: El usuario que creemos será el que se encargará de realizar todas las acciones automáticas (típicamente postgres). Como al finalizar la instalación restauraremos, en caso de que en el fichero de roles (p.e. roles.dump) ya exista el usuario, al restaurar su contraseña se cambiará a la de la instalación previa de postgres.
EXTERNAL_VOLUME: Cuando el docker se inicia la primera véz crea las carpetas de backup, cron, pgdata en la carpeta que especifiquemos como EXTERNAL_VOLUME. Desde aquí podemos hacer cambios en la configuración del docker , sin necesidad de entrar en el. No es necesario que sea la misma carpeta que hemos descargado de GIT.
Si tenemos el servicio de postgres corriendo, lo paramos:
service postgres stop
Para mayor seguridad podemos cambiar el puerto de salida, por si postgres se reinicia, en el fichero postgresql.conf.
Una vez tengamos el fichero .env correcto podemos lanzar:
cd /opt/docker_postgres
docker-compose build
Para arrancar el docker
cd /opt/docker_postgres
docker-compose up
Al final nos debe aparecer database system is ready to accept connectios
Para dejar el docker levantado
cd /opt/docker_posgres
docker-compose start
En caso que necesitemos para o reiniciar el docker utilizar start o stop:
docker-compose up/stop
Cuando realizamos el primer “up”:
FROM postgres:15.4
Una vez realizamos el cambio lanzamos
docker-compose build
NOTA: Es recomendable realizar un backup previo por si la actualización de la versión produce algún problema con los datos existentes.
createdb yeboyebo -E UNICODE -h localhost -p 5432 -U [POSTGRES_USERNAME]
psql yeboyebo -h localhost -p 5432 -U [POSTGRES_USERNAME] < roles.dump
psql yeboyebo -h localhost -p 5432 -U [POSTGRES_USERNAME] < yeboyebo.dump
# resto de bds...
systemctl disable postgresql
En la carpeta EXTERNAL_VOLUME/backup/databases.txt
Para habilitar el cron, hay que entrar una primera vez en el docker y ejecutar ‘crontab -e’:
docker ps // Para ver nuestro CONTAINER ID. Ejemplo 086bbf520c72
docker exec -i -t 086bbf520c72 /bin/bash
Y ya en la consola de docker
# root: crontab -e
crontab: installing new crontab
En adelante, basta editar el fichero root en EXTERNAL_VOLUME/cron/root para añadir o modificar acciones de cron.
Podemos acceder a la consola a través de docker:
docker exec -i -t 14d21f0325e1 psql atalaya -U yeboyebo -h localhost
a) junto con el nombre de las bases de datos y roles.
b) hacer un solo dump_all y volvamos todo a un único dump.
docker exec -i -t e268c1ea92b4 /bin/bash -c "pg_dump yeboyebo -U antonio -h localhost -p 5432 > /backup/dumps/yeboyebo._prueba.dump"
Para reiniciar postgres, lo mejor es tirar y levantar el docker entero.