installation/nextcloud_itopie.md: [pgsql] use Ansible script authored by Donna Sayed's avatar Donna Sayed
This complements 9a953fe23f4de281b2f60a1c7a6445ebaf47fa90
and 0c93d3592f51311568a067bddf207692e9d745ce, and fixes
<https://odoo.itopie.ch/web#id=281&active_id=281&model=project.task&view_type=form&cids=1&menu_id=323>
and <mid:779E094E-EFFD-4ABB-9563-425DCDE7DD69@itopie.ch>.

Thanks to Jonathan Blum <jblum@itopie.ch> for the help.
......@@ -374,32 +374,23 @@ Une version de retard par rapport au [Release Schedule](https://github.com/nextc
#### Sauvegarde de la base des données PostgreSQL
Le rôle [Ansible](installation/ansible)) `itopie.server` installe automatiquement un script pour sauvegarder les bases des données MySQL/MariaDB ou PostgreSQL, script qui a des limitations :
1. il ne traite pas correctement les erreurs.
1. il ne fonctionne pas par défaut sur Debian 12/bookworm (il manque un `env` lors des commandes `pg_dump`).
1. il nécessite une connexion TCP/IP (paramètres `-h` de `pg_dump`, cf. <https://dba.stackexchange.com/questions/48923/how-to-dump-postgresql-database-whose-owner-has-no-password#48938>) et donc il faut s'authentifier (comme préconisé par Nextcloud upstream, cf. <https://docs.nextcloud.com/server/latest/admin_manual/maintenance/backup.html#backup-database>). \
**ATTENTION**, une possibilité serait d'utiliser le fichier de configuration `.pgpass` (cf. <https://dba.stackexchange.com/questions/325211/how-can-make-pg-dump-work-without-asking-password#325310>) !
1. pour éviter d'exposer le mot de passe d'authentification quand le script est appelé par `cron`, il faudrait créer un autre script encore.
#### Sauvegarde de la base des données PostgreSQL
L'avantage du script ci-dessus est néanmoins dans la **gestion** des sauvegardes, c'est-à-dire qu'il contrôle l'ancienneté de chaque sauvegarde et il efface automatiquement les plus anciennes. \
**NB**, comme les sauvegardes de la base des données sont locales, le versioning est aussi présent dans les [sauvegardes du système](installation/sauvegarde-entreprises) !
Le rôle [Ansible](installation/ansible)) `itopie.server` installe automatiquement un script pour sauvegarder les bases des données MySQL/MariaDB ou PostgreSQL.
En attendant l'adaptation du script pour utiliser un socket UNIX à la place d'une connexion TCP/IP, voici directement la commande `pg_dump` lancée via `cron` :
**ATTENTION** :
- l'utilisateur `postgres` doit avoir accès en écriture au dossier de sauvegarde
- par défaut la [sauvegarde distante `daily`](installation/sauvegarde-entreprises#itopie-suisseinuboch) est lancée à 04:00
Il suffit donc de créer le dossier pour les sauvegardes SQL et configurer le `cron` : \
**ATTENTION**, par défaut la [sauvegarde distante `daily`](installation/sauvegarde-entreprises#itopie-suisseinuboch) est lancée à 04:00 !
```
# BACKUP_SQL_DIR="/srv/backup/sql"
# mkdir -m 0755 "${BACKUP_SQL_DIR%/*}"
# mkdir -m 0700 "${BACKUP_SQL_DIR}"
# BACKUP_SQL_USER="postgres"
# chown "${BACKUP_SQL_USER}" "${BACKUP_SQL_DIR}"
# BACKUP_SQL_CMD_FULL="pg_dump --no-owner nextcloud | gzip - >${BACKUP_SQL_DIR}/sqldump_postgresql_nextcloud_\\\`date +%Y%m%dT%H%M%S\\\`.sql.gz"
# BACKUP_SQL_CMD_FULL="/usr/local/bin/backup-sql.sh -b postgresql -o /srv/backup/sql -d nextcloud"
# cat <<EOF >/etc/cron.d/local_postgresql
0 1 * * * ${BACKUP_SQL_USER} ${BACKUP_SQL_CMD_FULL}
0 1 * * * ${BACKUP_SQL_USER} ${BACKUP_SQL_CMD_FULL} >/dev/null
EOF
# su -c "eval $(echo ${BACKUP_SQL_CMD_FULL} | tr -d '\\')" postgres
could not change directory to "/root": Permission denied
# su -l -c "${BACKUP_SQL_CMD_FULL} >/dev/null" postgres
#
```
......
......