Files
vps-docs/12-backup.md
2026-04-08 16:15:11 +02:00

101 lines
2.5 KiB
Markdown

# 12. Backup Rsync
## Prerequis
- Serveur de stockage distant avec acces SSH
- Cle SSH configuree pour l'acces sans mot de passe
## Configurer l'acces SSH
```bash
# Copier la cle SSH de l'utilisateur vers root (le script tourne en root via cron)
mkdir -p /root/.ssh
cp /home/<USER>/.ssh/id_* /root/.ssh/
cp /home/<USER>/.ssh/known_hosts /root/.ssh/
```
Tester :
```bash
ssh -p <PORT_SSH_DISTANT> <USER_DISTANT>@<HOST_DISTANT> "echo OK"
```
## Creer la config
Creer `/etc/vps-backup.env` :
```bash
REMOTE_USER=<USER_DISTANT>
REMOTE_HOST=<HOST_DISTANT>
REMOTE_PORT=<PORT_SSH_DISTANT>
REMOTE_BASE=<CHEMIN_DISTANT>/backups
DB_BACKUP_DIR=/tmp/vps-db-backup
```
```bash
chmod 600 /etc/vps-backup.env
```
## Creer les repertoires distants
```bash
ssh -p <PORT_SSH_DISTANT> <USER_DISTANT>@<HOST_DISTANT> "mkdir -p <CHEMIN_DISTANT>/backups/{db,etc,ispconfig,www}"
```
## Script de backup
Creer `/usr/local/bin/vps-backup.sh` :
```bash
#!/bin/bash
source /etc/vps-backup.env
DATE=$(date +%Y%m%d_%H%M%S)
LOG="/var/log/vps-backup.log"
echo "[$DATE] Backup started" >> $LOG
# Dump databases
mkdir -p $DB_BACKUP_DIR
rm -f $DB_BACKUP_DIR/*.sql.gz $DB_BACKUP_DIR/*.tar.gz
for DB in $(mysql -N -e "SHOW DATABASES" | grep -v -E "^(information_schema|performance_schema|sys)$"); do
mysqldump --single-transaction --routines --triggers "$DB" | gzip > "$DB_BACKUP_DIR/${DB}.sql.gz"
done
# Compresser en tar
tar -czf "$DB_BACKUP_DIR/all-databases-${DATE}.tar.gz" -C $DB_BACKUP_DIR --exclude="*.tar.gz" . || true
rm -f $DB_BACKUP_DIR/*.sql.gz
# Sync
rsync -avz -e "ssh -p $REMOTE_PORT" $DB_BACKUP_DIR/*.tar.gz $REMOTE_USER@$REMOTE_HOST:$REMOTE_BASE/db/ || echo "[$DATE] DB sync failed" >> $LOG
rsync -avz --delete -e "ssh -p $REMOTE_PORT" /etc/ $REMOTE_USER@$REMOTE_HOST:$REMOTE_BASE/etc/ || echo "[$DATE] etc sync failed" >> $LOG
rsync -avz --delete -e "ssh -p $REMOTE_PORT" /usr/local/ispconfig/ $REMOTE_USER@$REMOTE_HOST:$REMOTE_BASE/ispconfig/ || echo "[$DATE] ispconfig sync failed" >> $LOG
rsync -avz --delete -e "ssh -p $REMOTE_PORT" /var/www/ $REMOTE_USER@$REMOTE_HOST:$REMOTE_BASE/www/ || echo "[$DATE] www sync failed" >> $LOG
rm -rf $DB_BACKUP_DIR
DATE_END=$(date +%Y%m%d_%H%M%S)
echo "[$DATE_END] Backup completed" >> $LOG
```
```bash
chmod 755 /usr/local/bin/vps-backup.sh
```
## Cron quotidien
```bash
crontab -e
# Ajouter :
0 2 * * * /usr/local/bin/vps-backup.sh
```
## Tester
```bash
sudo /usr/local/bin/vps-backup.sh
```
> **Piege :** Le script tourne en root via cron. La cle SSH de root doit etre configuree pour l'acces distant.