Una solució de còpies

butterbackup

Versió en català en la primera resposta

Source: https://gitlab.com/la-loka/butterbackup

A backup solution. A server at your office behind your firewall that pulls data from public servers and saves incremental snapshots.

On your backup server

Create a partition from free space

cfdisk /dev/sdX
apt-get install parted
partprobe
apt-get install btrfs-tools
mkfs.btrfs /dev/sdXY

Mount the partition on boot

Find the UUID of the new partition

blkid

Edit /etc/fstab

UUID=7ef18851-xxxx-yyyy-zzzz-53f7b88b6119 /backups          btrfs   defaults      0  0

Mount the partition

mkdir /backups
mount /backups

Setup butterbackup

apt-get install git
cd /opt
git clone https://gitlab.com/la-loka/butterbackup.git

Instalar python3 en un entorno virtual

apt-get install virtualenv
cd /opt/butterbackup
virtualenv venv --python=python3

Setup users

butterbackup runs on the backserver as root. root connects to the public server as user keeper.

We create a user on the public server and copy root@backup_server public key to keeper@public_server authorized_keys

On the public_server create dummy user on public server

adduser --disabled-password keeper
mkdir /home/keeper/.ssh
touch /home/keeper/.ssh/authorized_keys
chown -R keeper.keeper /home/keeper/.ssh
chmod -R go-xr /home/keeper/.ssh

On the backup_server create root@backup_server ssh keys

ssh-keygen -t ecdsa -b 521

And add the new public key to keeper@public_server /home/keeper/.ssh/authorized_keys

Test to see if you can open a session on the public_server

ssh keeper@public_server

Permissions

Perhaps keeper@public_server does not have permission to read everything you want to backup.

Let’s say you want to backup /var/www on the public server. You can add the keeper to the www-data group

Create a config file

cd /opt/butterbackup/config
cp example.com my_server_domain_name.com

Edit the new config file.

A config file will look like this

[host]
#backup everything under /var/www/html and /var/backups
include = /var/, /var/www/, /var/www/html/***,  /var/backups/*** 
# exclude everything else
exclude = *
# ssh user
user=keeper
# ssh port
port = 22
# number of snapshots to keep. Older snapshots will be deleted
keep=30

Make the first copy

You can run butterbackup manually

/opt/butterbackup/venv/bin/python3 /opt/butterbackup/butterbackup.py my_server_domain_name.com

Add an entry to root’s crontab

crontab -e

You cronjobs might look like this. Where each server has a corresponding /opt/butterbackup/config file

0  2 * * * /opt/butterbackup/venv/bin/python3 /opt/butterbackup/butterbackup.py server_1.com
0  3 * * * /opt/butterbackup/venv/bin/python3 /opt/butterbackup/butterbackup.py server_2.com
15 3 * * * /opt/butterbackup/venv/bin/python3 /opt/butterbackup/butterbackup.py server_3.com
45 3 * * 1,4 /opt/butterbackup/venv/bin/python3 /opt/butterbackup/butterbackup.py server_4.com

Inspect backups

cd /backups/my_server_domain_name.com

Un apunt sobre LXD containers

If you need to backup directories from a LXC container, the path you need to define in your config might be very long.

 /var/, /var/snap/, /var/snap/lxd/, /var/snap/lxd/common/, /var/snap/lxd/common/lxd/, /var/snap/lxd/common/lxd/storage-pools/, /var/snap/lxd/common/lxd/storage-pools/default/, /var/snap/lxd/common/lxd/storage-pools/default/containers/, /var/snap/lxd/common/lxd/storage-pools/default/containers/my_domain/, /var/snap/lxd/common/lxd/storage-pools/default/containers/my_domain/rootfs/, /var/snap/lxd/common/lxd/storage-pools/default/containers/my_domain/rootfs/var/, /var/snap/lxd/common/lxd/storage-pools/default/containers/my_domain/rootfs/var/backups/, /var/snap/lxd/common/lxd/storage-pools/default/containers/my_domain/rootfs/var/backups/mariadb/***

Permissions for non-root users may not work either.

You can make this easier by binding the container’s root filesystem to a mount point

mkdir /srv/my_domain

Now edit /etc/fstab to mount the bind on boot.

/var/snap/lxd/common/lxd/storage-pools/default/containers/my_domain/rootfs/ /srv/my_domain none bind

Mount it and you will find the container’s rootfs at /srv/my_domain

mount /srv/my_domain

Edit your backup config

/srv/, /srv/my_domain/, /srv/my_domain/var/, /srv/my_domain/var/backups/, /srv/my_domain/var/backups/mariadb/***

Much easier!

4 Likes

Versió en Català

butterbackup

Font: https://gitlab.com/la-loka/butterbackup

Una solució per a còpies de seguretat. Un servidor en la teva oficina darrera el teu tallafocs que recuperar dades de servidors públics i guarda snapshots.

En el servidor de còpies de seguretat

Crear una partició amb l’espai disponible

cfdisk /dev/sdX
apt-get install parted
partprobe
apt-get install btrfs-tools
mkfs.btrfs /dev/sdXY

Muntar la partició en arrancar el sistema

Buscar al UUID de la nova partició

blkid

Editar /etc/fstab

UUID=7ef18851-xxxx-yyyy-zzzz-53f7b88b6119 /backups          btrfs   defaults      0  0

Muntar la partició

mkdir /backups
mount /backups

Configurar butterbackup

apt-get install git
cd /opt
git clone https://gitlab.com/la-loka/butterbackup.git

Instal·lar python3 en un entorn virtual

apt-get install virtualenv
cd /opt/butterbackup
virtualenv venv --python=python3

Configurar usuaris

butterbackup s’executa com a root en el servidor de còpies de seguretat. L’usuari root es connecta al servidor públic com l’usuari keeper.

Es crear un usuari en el servidor públic i es còpia la clau pública de root@servidor_còpia a les claus autoritzades (authorized_keys) a keeper@servidor_públic

Creem un usuari en el servidor públic (keeper@servidor_públic)

adduser --disabled-password keeper
mkdir /home/keeper/.ssh
touch /home/keeper/.ssh/authorized_keys
chown -R keeper.keeper /home/keeper/.ssh
chmod -R go-xr /home/keeper/.ssh

En el servidor de còpia de seguretat creem les claus SSH per a root (root@servidor_còpia)

ssh-keygen -t ecdsa -b 521

I afegim la nova clau pública per keeper@public_server a /home/keeper/.ssh/authorized_keys

Provem si podem obrir una sessió al servidor públic

ssh keeper@public_server

Permisos

És possible que keeper@public_server no tingui permisos per a llegir tot el que volem guardar en les còpies de seguretat.

Per exemple, si es vol crear una còpia de seguretat per /var/www en el servidor públic. Podem afegir keeper al grup www-data.

Crear el fitxer de configuració

cd /opt/butterbackup/config
cp example.com my_server_domain_name.com

Editar el nou fitxer de configuració.

Fer la primera còpia de seguretat

Podem executar butterbackup manualment

/opt/butterbackup/venv/bin/python3 /opt/butterbackup/butterbackup.py my_server_domain_name.com

Afegir una entrada al crontab de root

crontab -e

Els cronjobs podrien quedar així. On cada servidor té el seu fitxer /opt/butterbackup/config corresponent.

0  2 * * * /opt/butterbackup/venv/bin/python3 /opt/butterbackup/butterbackup.py server_1.com
0  3 * * * /opt/butterbackup/venv/bin/python3 /opt/butterbackup/butterbackup.py server_2.com
15 3 * * * /opt/butterbackup/venv/bin/python3 /opt/butterbackup/butterbackup.py server_3.com
45 3 * * 1,4 /opt/butterbackup/venv/bin/python3 /opt/butterbackup/butterbackup.py server_4.com

Verificar les còpies de seguretat

cd /backups/my_server_domain_name.com

Un apunt sobre contenidors LXD

Si s’han de fer còpies de seguretat de directoris d’un contenidor LXC container, el camí a definir en la configuració pot ser molt llarg.

 /var/, /var/snap/, /var/snap/lxd/, /var/snap/lxd/common/, /var/snap/lxd/common/lxd/, /var/snap/lxd/common/lxd/storage-pools/, /var/snap/lxd/common/lxd/storage-pools/default/, /var/snap/lxd/common/lxd/storage-pools/default/containers/, /var/snap/lxd/common/lxd/storage-pools/default/containers/my_domain/, /var/snap/lxd/common/lxd/storage-pools/default/containers/my_domain/rootfs/, /var/snap/lxd/common/lxd/storage-pools/default/containers/my_domain/rootfs/var/, /var/snap/lxd/common/lxd/storage-pools/default/containers/my_domain/rootfs/var/backups/, /var/snap/lxd/common/lxd/storage-pools/default/containers/my_domain/rootfs/var/backups/mariadb/***

També pot ser que els permisos per a usuaris que no siguin root no funcionin.

Podem fer-ho més fàcil lligant l’arrel del sistema de fitxers del contenidor a un punt de muntatge

mkdir /srv/my_domain

Editem /etc/fstab per muntar el lligam a l’arrencada.

/var/snap/lxd/common/lxd/storage-pools/default/containers/my_domain/rootfs/ /srv/my_domain none bind

Ho muntem i podrem trobar l’arrel del sistema de fitxers del contenidor a /srv/my_domain

mount /srv/my_domain

Editem la configuració de la còpia de seguretat

/srv/, /srv/my_domain/, /srv/my_domain/var/, /srv/my_domain/var/backups/, /srv/my_domain/var/backups/mariadb/***

Molt més fàcil!

3 Likes