Commit 2d354fc1 authored by Pedro Eduardo Trujillo's avatar Pedro Eduardo Trujillo
Browse files

Pone al día el proyecto

Actualiza versiones base y de dependencias, como se indica en #1.

Documenta uso básico en readme, limpia restos.

Restructura ficheros del proyecto.

Elimina restos no necesarios de construcción de la imagen.

Usa plantillas CI actualizadas.

Usa nueva sintaxis y buenas prácticas de docker compose.

Añade variables para valores no configurables anteriormente y renombra
algunas existentes.
parent f294106d
Loading
Loading
Loading
Loading

.dockerignore

deleted100644 → 0
+0 −2
Original line number Diff line number Diff line
*
!scripts
+10 −14
Original line number Diff line number Diff line
include:
  - project: 'redmic-project/gitlab-ci-templates'
    ref: master
    file: '/packaging.yml'
    file: '/packaging-docker/docker-build.yml'
  - project: 'redmic-project/gitlab-ci-templates'
    ref: master
    file: '/deployment.yml'
    file: '/deployment-service/docker-deploy.yml'
  - project: 'redmic-project/gitlab-ci-templates'
    ref: master
    file: '/deployment-custom-image.yml'
    file: '/deployment-service/custom-image.yml'
  - project: 'redmic-project/gitlab-ci-templates'
    ref: master
    file: '/deployment-external-service/backup-postgresql.yml'
  - project: 'redmic-project/gitlab-ci-templates'
    ref: master
    file: '/maintenance.yml'
    file: '/deployment-service/maintenance.yml'

stages:
  - pre-package
@@ -25,24 +25,20 @@ stages:

variables:
  PROJECT_PARENT_NAME: postgres
  DEVELOPMENT_MAINTENANCE_DISABLED: 'true'

.deploy:
  variables:
    STACK: ${PROJECT_PARENT_NAME}

.deploy-development:
  environment:
    name: dev/${CI_PROJECT_NAME}

.deploy-production:
  environment:
    name: pro/${CI_PROJECT_NAME}

.deploy-external-service:
  variables:
    STACK: ${PROJECT_PARENT_NAME}
    DD_AWS_REGION: ${AWS_REGION}

.deploy-external-backup-postgresql:
  variables:
    DD_POSTGRES_NET_NAME: ${DD_DATABASE_NET}
    DD_POSTGRES_HOSTNAME: ${DD_DATABASE_HOST}
    DD_POSTGRES_USER: postgres

.scheduled-run:
  variables:
+58 −6
Original line number Diff line number Diff line
# DATABASE
# PostgreSQL

Este repositorio es para guardar los elementos necesarios para preparar la base de datos. Este README está por hacer.
REDMIC PostgreSQL database

Ejecutar fichero sql desde consola
Este proyecto establece la configuración necesaria para desplegar un servicio de base de datos PostgreSQL (funcionando sobre un clúster Docker Swarm), haciendo uso de GitLab-CI.

## Despliegue local

Aunque este proyecto está destinado a desplegar un servicio Docker Swarm, también se puede emplear la definición de imagen Docker para construirla y lanzar un contenedor Docker en entorno local.

### Construir imagen

La imagen Docker se puede construir de 2 maneras:

* Usando **docker compose** con la configuración *compose.yaml* y valores en *.env* (que se pueden sobreescribir mediante variables de entorno). Desde la raíz del proyecto, ejecutar:

```sh
IMAGE_NAME=redmic_postgresql \
  docker compose -f build/compose.yaml build
```

* Usando **docker build** y configuración mediante parámetros. Desde la raíz del proyecto, ejecutar:

```sh
docker build \
  --build-arg POSTGRES_IMAGE_TAG='...' \
  --build-arg LOCALES_VERSION='...' \
  --build-arg PLPYTHON3_VERSION='...' \
  --build-arg PYTHON3_PYSTACHE_VERSION='...' \
  --build-arg PGCRON_VERSION='...' \
  --build-arg POSTGIS_MAJOR='...' \
  --build-arg POSTGIS_VERSION='...' \
  --build-arg GETTEXT_BASE_VERSION='...' \
  -t redmic_postgresql:latest \
  build
```

### Lanzar contenedor

El despliegue necesita una red interna de Docker:

```sh
docker network create postgres-net
```

Para tener persistencia de datos, se puede vincular un directorio local (o volumen) al punto de montaje `/data` del contenedor. Esto también facilita la carga de datos inicial, ya que podemos añadir un fichero `.sql` con las sentencias deseadas.

Para lanzar el contenedor, usando la imagen Docker creada anteriormente y cargando un directorio local `./data`, ejecutar desde la raíz del proyecto:

```sh
psql -U username -d myDataBase -a -f myInsertFile
docker run \
  --rm \
  --name local-postgresql \
  --network postgres-net \
  -e POSTGRES_USER=postgres \
  -e POSTGRES_PASSWORD=changeme \
  -e POSTGRES_DB=redmic \
  -v $(pwd)/data:/var/lib/postgresql/data \
  redmic_postgresql:latest
```

## Extraer el schema desde una base de datos
Luego, para poblar de datos el servicio a partir de un fichero *.sql* (por ejemplo, `input.sql`), se puede copiar al directorio local `./data` (para que esté disponible en el contenedor) y después ejecutar:

```sh
pg_dump -h redmic.es -U postgres -W --schema=app --schema-only -d redmic > app.sql
docker exec -it local-postgresql /bin/sh
  psql -d redmic -U postgres -f /var/lib/postgresql/data/input.sql
```

build/.dockerignore

0 → 100644
+1 −0
Original line number Diff line number Diff line
*

build/.env

0 → 100644
+9 −0
Original line number Diff line number Diff line
POSTGRES_IMAGE_TAG=17.0-bookworm

LOCALES_VERSION=2.36-9+deb12u8
PLPYTHON3_VERSION=17.0-1.pgdg120+1
PYTHON3_PYSTACHE_VERSION=0.6.0-1
PGCRON_VERSION=1.6.4-2.pgdg120+1
POSTGIS_MAJOR=3
POSTGIS_VERSION=3.5.0+dfsg-1.pgdg120+1
GETTEXT_BASE_VERSION=0.21-12
Loading