Les deux révisions précédentes Révision précédente Prochaine révision | Révision précédente |
serveurs:installation:bkp-srv:pre-prod-geonature [2025/02/18 16:11] – [Installer le dépôt sinp-<region>-data] jpmilcent | serveurs:installation:bkp-srv:pre-prod-geonature [2025/03/20 12:04] (Version actuelle) – [Remplacer la base par la dernière version sauvegardée] jpmilcent |
---|
* Accéder à //Psql// avec : <code bash>psql -U ${POSTGRES_USER} ${POSTGRES_DB}</code> | * Accéder à //Psql// avec : <code bash>psql -U ${POSTGRES_USER} ${POSTGRES_DB}</code> |
* Dans le container, l'utilisateur ${POSTGRES_USER} et la base ${POSTGRES_DB} remplace l'utilisateur par défaut //postgres//. Il est donc nécessaire de se connecter avec ces arguments ! | * Dans le container, l'utilisateur ${POSTGRES_USER} et la base ${POSTGRES_DB} remplace l'utilisateur par défaut //postgres//. Il est donc nécessaire de se connecter avec ces arguments ! |
| |
| |
=== Installer le client Postgresql sur l'hôte === | === Installer le client Postgresql sur l'hôte === |
* Vérifier la présence du dépôt de paquets deb pour Postgresql dans : ''/etc/apt/sources.list.d/ '' | * Vérifier la présence du dépôt de paquets deb pour Postgresql dans : ''/etc/apt/sources.list.d/ '' |
* Vérifier la version de Postgresql utilisé par le contenair Docker Postgresql de la pré-prod. | * **Vérifier la version de Postgresql utilisé par le container Docker Postgresql de la pré-prod.** |
* Utiliser la même version pour l'installation du paquet postgresql-client. Ex. : ''apt install postgresql-client-15'' | * Utiliser la même version pour l'installation du paquet postgresql-client. Ex. ici la v15 : ''apt install postgresql-client-15'' |
| * Afin de pouvoir utiliser la commande ''psql'' sur l'hôte mais également le script ''install_db.sh'' de l'Atlas, il est nécessaire de : |
| * Créer un utilisateur ''postgres'' sur l'hôte : <code bash>adduser --system --no-create-home postgres</code> |
| * S'assurer que le fichier ''docker-compose.yml'' de la préprod lançant la base Postgres créé bien un mapping des sockets sur ''/run/postgresql'' dans les volumes (''- /run/postgesql/:/var/run/postgresql''). |
| * Il semble aussi nécessaire de modifier le mapping utilisateur des Foreign Data Tables en indiquant que le mot de passe n'est pas requis :<code bash> |
| sudo -u postgres -s psql -d $db_name -c "CREATE USER MAPPING FOR $owner_atlas SERVER geonaturedbserver OPTIONS (user '$atlas_source_user', password_required 'false') ;" &>> log/install_db.log |
| </code> |
| * Le problème c'est que ce mécanisme ne marche pas en PROD où le mot de passe est bien requis ! Il faudrait chercher l'origine de la différence de fonctionnement... |
| * En attendant, le plus simple semble de corriger le script ''install_db.sh'' sur la Préprod si besoin. |
| |
| === Stocker les logs Postgresql sur l'hôte === |
| * Créer un dossier ''/var/log/postgresql'': <code bash> |
| mkdir /var/log/postgresql/ |
| chown root:999 /var/log/postgresql/ |
| chmod 774 /var/log/postgresql/ |
| </code> |
| * Sur l'hôte l'utilisateur du container créant le socket correspond à l'utilisateur dont l'id vaut 999 (''systemd-coredump'' | ''systemd-timesync''). <todo>Il faudrait voir à utiliser l'utilisateur système "postgres"...</todo> |
| * Assurerez vous que le fichier ''docker-compose.yml'' de la préprod lançant la base Postgres créé bien un mapping du dossier suivant''- /var/log/postgesql/:/var/log/postgresql'' |
| * Vérifier également que Postgresql dans le container est bien lancé avec les paramètres de config suivant :<code properties> |
| # Log |
| #log_destination = stderr |
| log_directory = '/var/log/postgresql' |
| log_filename = 'postgresql-%a.log' |
| log_file_mode = 0600 |
| log_truncate_on_rotation = on |
| log_rotation_age = 1440 |
| log_rotation_size = 0 |
| </code> |
| * TODO :<todo>Voir comment forcer l'id de l'utilisateur "postgres" créant les fichier de log</todo> : dans le container. Par défaut il s'agit de "postgres" avec un id 999, il semblerait... |
| |
===== Remplacer la base par la dernière version sauvegardée ===== | ===== Remplacer la base par la dernière version sauvegardée ===== |
* <color #ed1c24>**ATTENTION**</color> : La restauration précédente va bloquer sur le rafraîchissement de la VM "observations" pour une raison encore inconnue. Stopper la restauration avec ''CTRL+C''. Les tables et les VMs sont malgré tout généré dans la base. Il suffit donc de rafraichir l'ensemble des VMs pour finaliser la restauration. | * <color #ed1c24>**ATTENTION**</color> : La restauration précédente va bloquer sur le rafraîchissement de la VM "observations" pour une raison encore inconnue. Stopper la restauration avec ''CTRL+C''. Les tables et les VMs sont malgré tout généré dans la base. Il suffit donc de rafraichir l'ensemble des VMs pour finaliser la restauration. |
* Rafraîchir les VMs grâce au script ''gnatlas_refresh_all.sql'' : <code bash>docker compose run --rm preprod-postgres-restore psql -U geonatadmin -e -d gnatlas -f /restore/gnatlas_refresh_all.sql</code> | * Rafraîchir les VMs grâce au script ''gnatlas_refresh_all.sql'' : <code bash>docker compose run --rm preprod-postgres-restore psql -U geonatadmin -e -d gnatlas -f /restore/gnatlas_refresh_all.sql</code> |
| * Notes : si **le fichier de la base de données prend trop de place** dans ''/home/geonat/docker/preprod/postgresql/restore/'', il est possible de le monter directement au bon endroit avec le paramètre ''%%--volume%%''. Ex. : <code bash>docker compose run --volume /data/tmp/restore/2025-03-20_geonature2db.custom:/restore/2025-03-20_geonature2db.custom --rm preprod-postgres-restore /restore/restore.sh -d "2025-03-20_geonature2db.custom"</code> |
| |
===== Docker Compose, Services SystemD et Nginx Proxy ===== | ===== Docker Compose, Services SystemD et Nginx Proxy ===== |
* Copier TOUS les fichiers de config depuis le serveur ''db-srv'' | * Copier TOUS les fichiers de config depuis le serveur ''db-srv'' |
| |
Connecter la base Postgresql du Containr Docker sur l'hôte | |
* Afin de pouvoir utiliser la commande Psql sur l'hôte, il est nécessaire de : | |
* Créer un utilisateur ''postgres'' : <code bash>adduser --system --no-create-home postgres</code> | |
* Installer le paquet contenant la commande ''psql'' : | |
* S'assurer que le fichier docker-compose.yml lançant la base Postgres créé bien un mapping des sockets sur ''/run/postgresql'' dans les volumes (''/run/postgesql/:/var/run/postgresql''). | |