Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Intégration de la base Postgres #27

Open
wants to merge 4 commits into
base: main
Choose a base branch
from
Open

Intégration de la base Postgres #27

wants to merge 4 commits into from

Conversation

mattcln
Copy link
Collaborator

@mattcln mattcln commented Nov 12, 2024

Création d'un nouveau dossier postgres/ contenant les fichiers nécessaires au set up de postgres :

  • Variables d'environnements
  • Docker compose, faisant appel à docker swarm pour les secrets
  • Docker volume
  • Init_scripts : deux scripts pour initialiser les users (super & read) + création des tables.

Le schéma des tables est très surement amené à évoluer au moment de l'intégration des données. Je suis parti sur des timestamps par défaut (et DATE quand on a une valeur par jour) mais on est plutôt sur du datetime sur nos données aujourd'hui je pense.

La prochaine étape est de décider de quelles données on pousse quotidiennement sur la base + gérer la gestion de celle-ci :

  • Récupérer les données historiques en base
  • Faire appel aux nouvelles données via API
  • Pousser les nouvelles données en base.

@mattcln mattcln linked an issue Nov 12, 2024 that may be closed by this pull request
@guillaumepot
Copy link

Voici un extrait docker-compose.yml permettant d'intégrer un secret Docker ( /!\ Docker Engine, pas Docker Swam /!\ ) :

Pas de soucis pour la reproduction du code ci-dessous, étant propriétaire de celui-ci:

(Le code a été modifié pour ne pas afficher certains noms issus d'une situation réelle et des commentaires ont été ajoutés)

Par rapport à ci-dessous:

  • On déclare le secrets via la clause "secrets:"
    - Le secret est un fichier contenant une valeur, par exemple "POSTGRES_PASSWORD" est un fichier qui contient une valeur texte correspondant au mot de passe du root user de l'engine Postgres

    • J'ai donc quelquepart dans mon arborescence ce fichier. L'intérêt et de lui donner un droit chmod très limité pour que seul l'utilisateur executant le compose ait les droits
  • On charge le secret dans le container avec la clause "secrets:" elle même dans la clause "services:"

    • Un secret est monté sur un container sous ce chemin : /run/secrets/nom_secret (où nom_secret correspondrait dans l'exemple du code ci-dessous à "postgres_password")
  • On donne la valeur du secret à notre variable d'environnement. Dans l'exemple ci-dessous, il est nécessaire définir le root password du Postgres Engine sous la variable "POSTGRES_PASSWORD".
    - Comme on donne la valeur d'un fichier et non son nom, on ajoute le suffix "_FILE" au nom de la variable. Ainsi, POSTGRES_PASSWORD devient POSTGRES_PASSWORD_FILE. Docker interprètera cela comme la variable POSTGRES_PASSWORD auquel il faudra lui attribuer la valeur du secret.

    container-postgres:
    container_name: container_postgres
    image: postgis/postgis:17-3.5-alpine
    env_file:
    - ${POSTGRES_ENV_FILEPATH}
    environment:
    POSTGRES_PASSWORD_FILE: /run/secrets/postgres_password
    secrets:
    - postgres_password
    volumes:
    - ${POSTGRES_SOURCE_DIRECTORY}/conf:/docker-entrypoint-initdb.d
    - postgres_data_volume:/var/lib/postgresql/data

    ports:

    - "5432:5432"

    healthcheck:
    test: ["CMD-SHELL", "pg_isready -U postgres"]
    interval: 30s
    timeout: 10s
    retries: 3
    start_period: 120s
    restart: unless-stopped
    profiles: ["database", "postgres"]
    security_opt:
    - no-new-privileges
    privileged: false
    read_only: false
    networks:
    - beegis_critical_data_transit_network
    labels:
    com.example.description: "Container using PG Engine to run Postgres Database"
    com.example.department: "BeeGis"

secrets:
postgres_password:
file: ${POSTGRES_SECRETS_DIRECTORY}/POSTGRES_PASSWORD
labels:
- "com.example.description: Postgres password credential"

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

Push data to PostGreSQL
3 participants