Je viens de profiter de la mise à disposition récente de CentOS 8 chez Scaleway pour migrer mon serveur CentOS 7 vers une CentOS 8. Cette migration, en fait, n’en est pas vraiment une, vu que j’ai reconstruit une toute nouvelle instance. L’occasion pour moi de passer d’un VC1M (plus au catalogue mais 4vCPU / 4Go de RAM) à un DEV-1S (2 vCPU / 2Go de RAM et moins cher). Historiquement j’avais 4 vCPU / 4Go de RAM car j’hébergeais une instance GitLab (très consommatrice en ressources), ce qui n’est plus le cas. Donc, pour un simple blog WordPress, un DEV-1S devrait largement faire l’affaire !
Nouveau serveur, nouveau hostname, toujours en relation avec l’univers Star Trek : exit Yorktown et bienvenue à Axanar !
Un déménagement rapide !
La migration fût simple et rapide vu que toute la stack est sous docker et la personnalisation ainsi que les données sont dans un répertoire /docker
. Ce répertoire est lui même divisé en 3 sous-répertoires :
/docker/composer
accueillant la configuration de docker-compose./docker/config
pour la configuration de mes containers./docker/volumes
pour les volumes Docker.
J’ai également profité de l’occasion pour effectuer quelques changements minimes que je vais décrire ci-dessous.
Passage de Backup Manager à Borg
Malheureusement Backup Manager n’est plus trop maintenu (tout comme mes rpm d’ailleurs…). On peut même dire qu’il est sous perfusion de PR pour rester en vie. J’ai donc migré la solution de sauvegarde vers le couple Borg Backup et Borgmatic.
Borg gère les backups alors que Borgmatic est un wrapper qui va permettre de faciliter l’utilisation de Borg :
- Notion de hook pour, par exemple, permettre de monter / démonter un volume SSHFS (lorsqu’on externalise les sauvegardes sur un serveur qui n’a pas Borg).
- Possibilité de faire des dumps MySQL et de les sauvegarder avec Borg.
- Les hooks peuvent aussi permettre d’envoyer des notifications Slack.
Pour ceux que ça intéresse, ma configuration :
location:
# List of source directories to backup (required). Globs and
# tildes are expanded.
source_directories:
- /etc
- /docker
- /home
- /opt
# Paths to local or remote repositories (required). Tildes are
# expanded. Multiple repositories are backed up to in
# sequence. See ssh_command for SSH options like identity file
# or port.
repositories:
- /srv/server
# Repository storage options. See
# https://borgbackup.readthedocs.io/en/stable/usage/create.html and
# https://borgbackup.readthedocs.io/en/stable/usage/general.html for
# details.
storage:
# Passphrase to unlock the encryption key with. Only use on
# repositories that were initialized with passphrase/repokey
# encryption. Quote the value if it contains punctuation, so
# it parses correctly. And backslash any quote or backslash
# literals as well. Defaults to not set.
encryption_passphrase: "SUPER_SECRET"
# Retention policy for how many backups to keep in each category. See
# https://borgbackup.readthedocs.io/en/stable/usage/prune.html for
# details. At least one of the "keep" options is required for pruning
# to work. See borgmatic documentation if you'd like to skip pruning
# entirely.
retention:
# Number of daily archives to keep.
keep_daily: 7
# Number of weekly archives to keep.
keep_weekly: 4
# Number of monthly archives to keep.
keep_monthly: 6
# Consistency checks to run after backups. See
# https://borgbackup.readthedocs.io/en/stable/usage/check.html and
# https://borgbackup.readthedocs.io/en/stable/usage/extract.html for
# details.
consistency:
# List of one or more consistency checks to run: "repository",
# "archives", "data", and/or "extract". Defaults to
# "repository" and "archives". Set to "disabled" to disable
# all consistency checks. "repository" checks the consistency
# of the repository, "archives" checks all of the archives,
# "data" verifies the integrity of the data within the
# archives, and "extract" does an extraction dry-run of the
# most recent archive. Note that "data" implies "archives".
checks:
- repository
- archives
# Shell commands, scripts, or integrations to execute at various
# points during a borgmatic run. IMPORTANT: All provided commands and
# scripts are executed with user permissions of borgmatic. Do not
# forget to set secure permissions on this configuration file (chmod
# 0600) as well as on any script called from a hook (chmod 0700) to
# prevent potential shell injection or privilege escalation.
hooks:
# List of one or more shell commands or scripts to execute
# before creating a backup, run once per configuration file.
before_backup:
- sshfs user@server:/home/user/borg-backup /srv/server
# List of one or more shell commands or scripts to execute
# after consistency checks, run once per configuration file.
after_check:
- fusermount -u /srv/server
- /usr/local/bin/slack "BorgBackup OK"
# List of one or more shell commands or scripts to execute
# when an exception occurs during a "prune", "create", or
# "check" action or an associated before/after hook.
on_error:
- echo "Problème de backup lors de la sauvegarde BorgBackup" | mail -s "[axanar.kulakowski.fr] Backup" root
- /usr/local/bin/slack "Problème de backup lors de la sauvegarde BorgBackup"
# List of one or more MySQL/MariaDB databases to dump before
# creating a backup, run once per configuration file. The
# database dumps are added to your source directories at
# runtime, backed up, and removed afterwards. Requires
# mysqldump/mysql commands (from either MySQL or MariaDB). See
# https://dev.mysql.com/doc/refman/8.0/en/mysqldump.html or
# https://mariadb.com/kb/en/library/mysqldump/ for details.
mysql_databases:
- name: all
# Database hostname to connect to. Defaults to
# connecting via local Unix socket.
hostname: localhost
# Port to connect to. Defaults to 3306.
port: 3306
# Username with which to connect to the database.
# Defaults to the username of the current user.
username: user
# Password with which to connect to the database.
# Omitting a password will only work if MySQL is
# configured to trust the configured username
# without a password.
password: SUPER_SECRET
Borg m’a tellement séduit que je pense à complètement switcher dessus mes autres serveurs. Après comme toute solution de backup il faut tester la restauration, à la fois pour valider que tout est OK mais aussi pour monter en compétence dessus car lorsqu’on en a besoin on est toujours sur des périodes compliqués et dans l’urgence.
Remplacement de tiny_acme par acme.sh
La gestion de mes certificats Let’s Encrypt avec tiny_acme était lourde. En effet, le fait de passer par des challenges HTTP m’obligeait à avoir des configurations apache dédiées à cela (avec des exceptions /.well-known/acme-challenge
).
J’ai donc migré vers acme.sh et dnsapi disponibles en conteneur docker. Du coup pour mettre à jour tous mes certificats c’est simplissime :
#!/bin/sh VOLUME="/docker/volumes/acme.sh" docker run --rm -it \ -v "${VOLUME}":/acme.sh \ -e GANDI_LIVEDNS_KEY=XXXXXXXX \ neilpang/acme.sh --issue --dns dns_gandi_livedns -d blog.kulakowski.fr -d cv.kulakowski.fr
Je pense même que je vais en profiter pour migrer tous les renouvellement de mes certificats SSL sous acme.sh
Mise en place de l’IPv6
Mon ancien VC1M ne disposait pas d’IPv6 fixe. Mais le nouveau DEV-1S oui ! Du coup, j’ai profité de cette migration pour rajouter un enregistrement AAAA à mes DNS et ainsi gérer l’IPv6. Ce blog est à présent compatible IPV6 !
Monitoring
Pour finir, j’utilise la stack TIG (Telegraf / InfluxDB / Grafana) pour monitorer tout ça :
De Guillaume Kulakowski le 2 août 2020
C'est un Dashboard pour Telegraf auquel j'ai rajouté un Dashboard docker.