🗜 Monter un S3 avec S3fuse
Le tutoriel se base sur mon expérience chez Scaleway France.
Compilation
apt update && apt upgrade -y
apt -y install automake autotools-dev fuse g++ git libcurl4-gnutls-dev libfuse-dev libssl-dev libxml2-dev make pkg-config
cd /tmp
git clone https://github.com/s3fs-fuse/s3fs-fuse.git
cd s3fs-fuse
Mettre à jour la valeur MAX_MULTIPART_CNT
dans le fichier fdcache.cpp
sed -i 's/MAX_MULTIPART_CNT = 10 /MAX_MULTIPART_CNT = 1 /' src/fdcache.cpp
Compilation avec g++
./autogen.sh
./configure
make
make install
Copie de l’application
cp src/s3fs /usr/local/bin/s3fs
Configuration du montage
On ouvre une session sur l’utilisateur qui nous intéresse
echo MONMOTDEPASSE > $HOME/.passwd-s3fs
chmod 600 $HOME/.passwd-s3fs
On crée le répertoire qui servira au montage
cd /mnt
mkdir spnet-bucker
chmod 770 spnet-bucket
On monte le répertoire avec s3fuse
s3fs spnet-bucket /mnt/spnet-bucket -o allow_other -o passwd_file=/root/.passwd-s3fs -o use_path_request_style -o endpoint=fr-par -o parallel_count=15 -o multipart_size=128 -o nocopyapi -o url=https://s3.fr-par.scw.cloud
Montage automatique au démarrage
On ouvre /etc/fstab
sudo nano /etc/fstab
On ajoute la ligne suivante
s3fs#spnet-bucket /mnt/spnet-bucket fuse _netdev,allow_other,use_path_request_style,url=https://s3.fr-par.scw.cloud/ 0 0
📦 BackupManager
🔑 Remarques sur GPG
GnuPG (ou GPG, de l’anglais GNU Privacy Guard) est l’implémentation GNU du standard OpenPGP défini dans la RFC 48806, distribuée selon les termes de la licence publique générale GNU. Ce logiciel permet la transmission de messages électroniques signés et chiffrés, garantissant ainsi leurs authenticité, intégrité et confidentialité.
sudo apt update
sudo apt install gnupg
Créer une paire de clés
gpg --gen-key
Lister les clés
gpg --list-keys
gpg --list-secret-keys
Exporter les clés
gpg --output public_key.pgp --armor --export webmaster@sciences-physiques.net
gpg --output private.pgp --armor --export-secret-key webmaster@sciences-physiques.net
Chiffrer/Déchiffrer fichiers
gpg --encrypt --recipient 'admin@example.com' --output confidential.txt.enc public.txt
gpg --decrypt --output public.txt confidential.txt.enc
BackupManager
Installation
sudo apt-get update
sudo apt-get install backup-manager -y
Configuration
sudo nano /etc/backup-manager.conf
🐘 Utiliser pgbackrest pour sauvegarder la base de données
Préliminaires
sudo apt-get install postgresql-client libxml2
Compilation de pgbackrest
cd /tmp
mkdir -p /build
wget -q -O - https://github.com/pgbackrest/pgbackrest/archive/release/2.36.tar.gz | tar zx -C /build
sudo apt-get install make gcc libpq-dev libssl-dev libxml2-dev pkg-config liblz4-dev libzstd-dev libbz2-dev libz-dev libyaml-dev
cd /build/pgbackrest-release-2.36/src && ./configure && make
cp pgbackrest /usr/bin
sudo chmod 755 /usr/bin/pgbackrest
Permissions
sudo mkdir -p -m 770 /var/log/pgbackrest
sudo chown postgres:postgres /var/log/pgbackrest
sudo mkdir -p /etc/pgbackrest
sudo mkdir -p /etc/pgbackrest/conf.d
sudo touch /etc/pgbackrest/pgbackrest.conf
sudo chmod 640 /etc/pgbackrest/pgbackrest.conf
sudo chown postgres:postgres /etc/pgbackrest/pgbackrest.conf
Test installation
sudo -u postgres pgbackrest
cat /etc/postgresql/12/main/postgresql.conf
Configuration
sudo nano /etc/pgbackrest/pgbackrest.conf
[main]
pg1-path=/var/lib/postgresql/12/main
[global]
repo1-cipher-pass=VOTRE_PASS_ICI
repo1-cipher-type=aes-256-cbc
repo1-path=/var/lib/pgbackrest
repo1-retention-full=15
start-fast=y
[global:archive-push]
compress-level=3
Path des logs
sudo -u postgres bash -c ' \
export PGBACKREST_LOG_PATH=/var/log/pgbackrest && \
pgbackrest --log-level-console=error help backup log-path'
Créer les repositories
rm -rf /var/lib/pgbackrest
rm -rf /mnt/spnet-bucket/pgbackrest
sudo mkdir -p /var/lib/pgbackrest
sudo chmod 750 /var/lib/pgbackrest
sudo chown postgres:postgres /var/lib/pgbackrest
sudo mkdir -p /mnt/spnet-bucket/pgbackrest
sudo chmod 775 /mnt/spnet-bucket/pgbackrest
Configuration des archives
sudo nano /etc/postgresql/14/main/postgresql.conf
archive_command = 'pgbackrest --stanza=main archive-push %p'
archive_mode = on
listen_addresses = 'localhost'
log_line_prefix = ''
max_wal_senders = 3
wal_level = replica
Redémarrage
sudo pg_ctlcluster 14 main restart
Créer un stranza
sudo -u postgres pgbackrest --stanza=main --log-level-console=info stanza-create
Vérification
sudo -u postgres pgbackrest --stanza=main --log-level-console=info check
Créer une sauvegarde
sudo -u postgres pgbackrest --stanza=main --type=full --log-level-console=error backup
Taille d’une sauvegarde
du -h /var/lib/pgbackrest -d 1
Information sur une sauvegarde
sudo -u postgres pgbackrest info
Restaurer une sauvegarde
sudo pg_ctlcluster 14 main stop
sudo -u postgres find /var/lib/postgresql/14/main -mindepth 1 -delete
sudo -u postgres pgbackrest --stanza=main --set=20211218-143625F restore
sudo pg_ctlcluster 14 main start
📜 Script perso pour la sauvegarde et la restauration
Envoyer vers S3Fuse
cd /tmp/
sudo -u postgres pgbackrest --stanza=main --type=full --log-level-console=error backup
now=$(date +"%Y_%m_%d-%H_%M")
year=$(date +"%Y")
month=$(date +"%m")
cd /var/lib/pgbackrest
tar -cf /tmp/pgback-${now}.tar *
cd /tmp/
xz -9 -c /tmp/pgback-${now}.tar > /tmp/pgback-${now}.tar.xz
sudo -H -u postgres bash -c "pg_dumpall -c > /tmp/${now}.psql"
xz -9 -c /tmp/${now}.psql > /tmp/${now}.psql.xz
gpg --output /tmp/${now}.psql.gpg --encrypt --recipient xxxxx@sciences-physiques.net /tmp/${now}.psql
gpg --output /tmp/pgback-${now}.tar.xz.gpg --encrypt --recipient xxxxx@sciences-physiques.net /tmp/pgback-${now}.tar.xz
rm -rf /var/archives/*
backup-manager
cd /var/archives
tar -cf /tmp/backup-manager-${now}.tar *
cd /tmp/
xz -9 -c /tmp/backup-manager-${now}.tar > /tmp/backup-manager-${now}.tar.xz
gpg --output /tmp/backup-manager-${now}.tar.xz.gpg --encrypt --recipient xxxxx@sciences-physiques.net /tmp/backup-manager-${now}.tar.xz
rm /tmp/pgback-${now}.tar
rm /tmp/${now}.psql
rm /tmp/${now}.psql.xz
rm /tmp/pgback-${now}.tar.xz
rm /tmp/backup-manager-${now}.tar
rm /tmp/backup-manager-${now}.tar.xz
sudo mkdir -p /mnt/spnet-bucket/${year}/${month}/
mv /tmp/*${now}.tar.xz.gpg /mnt/spnet-bucket/${year}/${month}/
Restauration
rm -rf /var/lib/pgbackrest
sudo mkdir -p /var/lib/pgbackrest
sudo chmod 750 /var/lib/pgbackrest
sudo chown postgres:postgres /var/lib/pgbackrest
tar -Pxf *.tar.xz -C /var/lib/pgbackrest
Quelques commandes utiles
Restaurer une base de données
pg_dumpall -c > remi_ok.sql
psql -U postgres -f remi_ok.sql
Déchiffrer un fichier
gpg --output /tmp/decrypt.tar.xz --decrypt /tmp/bm.tar.xz.gpg
Extraire un fichier .xz
tar -xf decrypt.tar.xz -C /tmp/extract
Copier des fichiers de manière récursive
cp -R <source_folder>/* <destination_folder>