| 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 17:05] – [Création du container Docker hébergeant Postgresql & Nginx] jpmilcent | serveurs:installation:bkp-srv:pre-prod-geonature [2025/09/16 13:36] (Version actuelle) – [Remplacer la base par la dernière version sauvegardée] jpmilcent |
|---|
| === 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 container 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 : | * 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> | * 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''). | * 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 === | === Stocker les logs Postgresql sur l'hôte === |
| * Créer un dossier ''/var/log/postgresql'': <code bash> | * Créer un dossier ''/var/log/postgresql'': <code bash> |
| mkdir /var/log/postgresql/ | mkdir /var/log/postgresql/ |
| chown root:systemd-coredump /var/log/postgresql/ | chown root:999 /var/log/postgresql/ |
| chmod 774 /var/log/postgresql/ | chmod 774 /var/log/postgresql/ |
| </code> | </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'' | * 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> | * Vérifier également que Postgresql dans le container est bien lancé avec les paramètres de config suivant :<code properties> |
| log_rotation_size = 0 | log_rotation_size = 0 |
| </code> | </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 ===== |
| * Donner les droits à //geonat// sur les dumps : <code bash> chown geonat: /home/geonat/docker/preprod/postgres/restore/*.custom </code> | * Donner les droits à //geonat// sur les dumps : <code bash> chown geonat: /home/geonat/docker/preprod/postgres/restore/*.custom </code> |
| * Démonter le dépôt : <code bash> cd ; borg umount /tmp/repo </code> | * Démonter le dépôt : <code bash> cd ; borg umount /tmp/repo </code> |
| | * Si le dépôt est sur un lien symbolique, indiquer le chemin réel, ex. : <code>borg umount /data/tmp/repo </code> |
| * Se connecter en //geonat// sur //bkp-srv// : | * Se connecter en //geonat// sur //bkp-srv// : |
| * Se placer dans le dossier de la stack //preprod// : <code bash>cd ~/docker/preprod/</code> | * Se placer dans le dossier de la stack //preprod// : <code bash>cd ~/docker/preprod/</code> |
| * <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 ===== |