Une nouvelle infrastructure sur le serveur

Ecrit le 14/08/2019

Donc j’ai refait mon setup de serveur et tout semble bien fonctionner sans s’écrouler pour le moment.

Oui, on a compris avec le titre. Tu veux bien nous détailler un peu plus steuplé ?

On y arrive

Le choix de l’environnement de virtualisation

L’environnement de virtualisation choisi est Proxmox. Non seulement parce que des personnes dans mon entourage l’utilisent, aussi parce que j’ai entendu des bons retours.

J’ai aussi eu l’occasion (très vite fait) d’y toucher et de voir ce qu’il en est.

Découverte de Proxmox et divers essais

J’ai commencé par mettre Proxmox dans une machine virtuelle sur ma machine pour voir comment ça s’installe depuis l’ISO. Rien de bien compliqué pour le moment. Par contre, l’installateur ne laisse pas choisir comment le disque sera partitionné au final.

Avec l’installation finie, je sors l’UI1 sur l’adresse IP assignée à la machine virtuelle par libvirt. J’entre le mot de passe root qui va bien et je suis parti pour faire des essais et me familiariser avec tout ça.

Le réseau

Comment passer les paquets de l’extérieur aux containers ?

Le premier “obstacle” qui m’a sauté au yeux est le suivant: comment je vais faire pour passer d’une seule IP externe et tout distribuer dans des containers ?

En effet, et pour le coup, ça tombait bien, l’installation finira derrière un NAT et je ne pouvais pas faire autrement. J’ai fini par faire un double-nat pas très propre mais fonctionnel. Ci-dessous, un exemple de règle:

# Paquets entrants
iptables -t nat -A PREROUTING -i $INTERFACE -p tcp --dport 80 -j DNAT --to xxx.xxx.xxx.xxx:80

# Paquets sortants
iptables -t nat -A POSTROUTING -s '10.0.0.0/24' -o $INTERFACE -j MASQUERADE

La rencontre de cette petite difficulté m’a permis d’apprendre et mieux comprendre comment passe un paquet au travers d’iptables (et nftables par la même occasion) et aussi de voir que, malgré mes faibles connaissances réseau, je peux faire quelque chose :p

L’installation avec libvirt avec la carte réseau de la VM configurée comme un NAT se prêtait bien la situation puisque c’est ce que j’aurai eu au final.

La communication inter-container

Cette branche est gérée par une carte réseau virtuelle créée de toute pièce dans /etc/network/interfaces. Il a fallu fouiller un peu le web pour savoir quelles directives utiliser, mais ce n’était pas si compliqué que ça. Les paquets à destination des containers arrivent sur cette interface via le préroutage d’iptables puis les paquets vers l’extérieur prennent l’adresse IP de l’hyperviseur avec -j MASQUERADE.

Ce n’est peut-être pas la meilleure des approches, mais ça fait le boulot correctement.

Le stockage

Au niveau stockage, j’ai assez d’espace. C’est surtout savoir comment configurer Proxmox pour prendre en compte les espaces de stockage qui sont à sa disposition et comment les utiliser.

En cresant un peu, j’ai trouvé un fichier storage.cfg dans /etc/pve. Ce fichier permet de faire exactement ce que j’ai mentionné plus haut. Est-ce qu’il était nécessaire de mettre les spécifications des points de montage dans /etc/fstab ? Je ne pense pas.

J’ai aussi touché aux sauvegardes pour voir comment ça fonctionne. Et enfin, j’ai aussi fait un essai d’installation sur une Debian existante histoire de prendre les choses en main.

On se jette à l’eau

Je commence la balade par un arrêt (et désactivation du démarrage automagique) des divers services à disposition et faire une savegarde du setup actuel. Ensuite, j’installe Proxmox comme il se doit. Sauf que le temps se gâte. Déjà.

J’ai eu une erreur un peu étrange de la part du pveproxy concernant du JSON malformé. Soit. Je tente de voir où pourrait être ce fichier avant de jeter l’éponge et faire une réinstallation complète de Debian puis mettre Proxmox dessus.

Une fois la réinstallation faite, j’ai commencé par mettre Nginx compilé à la main depuis les sources à l’aide d’un script. Puis j’ai laissé Nginx de côté pour me concentrer sur le serveur mail.

Le serveur mail sur pied, j’ai continué avec Nginx. Et ainsi de suite: Postgersql, Gitea, Synapse, Lutim, Etherpad, le bot discord…

C’était répétitif: rsync des fichiers, certains juste un simple scp, adapter les configurations. Bref. Le genre de trucs qui serait peut-être passé en ellipse dans une vidéo montée :p

Pour la faire courte, tout remettre en place m’a pris deux bonnes journées remplies de commandes et d’ajustement. Des fois des oublis, des fois des bourdes telles que

A la fin du deuxième jour, tout est en ordre et fonctionnel. Je suis repassé sur certains containers pour apporter des ajustements mineurs à la configuration.

Et les sauvegardes ?

Bah oui, les sauvegardes des containers, on fait comment ?

En lisant la documentation, j’ai remarqué qu’il faut allouer un espace de stockage via l’utilitaire pvesm de Proxmox et ensuite l’affecter au container comme point de montage.

Sauf que, par défaut, les espaces alloués sont limités et ce pour des raisons qui peuvent être pratiques selon les cas d’utilisation. Sauf que c’est pas ce que je veux, notamment pour ce qui est de la base de données et des fichiers téléchargés par Synapse ou encore des repositories Git de Gitea. Il y a cependant un moyen de créer un volume qui sera tout de même dans un backup et qui n’aura pas de limite de disque2 avec pvesm, précisément avec l’option --format subvol.

Exemple (voir man pvesm pour plus amples détails):

pvesm alloc data 150 dessert.subvol 0 --format subvol
# pvesm alloc <volume> <container ID> <nom> <taille>

Ensuite, monter le sous-volume avec:

pct set 150 -mp0=data:150/dessert,mp=/mnt/dessert,backup=1

Et avec ça, le volume sera sauvegardé au prochain vzdump.

Au final, je suis content de l’installation que j’ai mise en place. Ça me permettra, entre autres, de séparer les choses comme il faut sans clasher, notamment avec les mails. Je pense que c’est aussi une bonne porte d’entrée vers la virtualisation. Affaire à suivre.


  1. User interface 

  2. Façon de parler. Ce sera limité par l’espace disque que vous avez sur le volume