Gestion Serveur Linux

J’ai un petit serveur à la maison qui avec le temps à subit pas mal de modification (fichier de config, ajout/suppression de paquet,…) que j’ai faite au fur et à mesure sans garder de traces particulière.

Je dois passer de i686 en x64, donc je dois tout refaire. Afin de ne pas devoir tout refaire en cas de crash par exemple, je cherche une solution permettant de gérer les modifications (configuration, ajout de paquet,…) faites sur une installe de base d’Ubuntu Server afin de pouvoir remonter le serveur en pas trop longtemps.

Si j’ai bien compris, @mike, c’est ce que tu as mis en place sur l’ACoLock ?

Oui pour l’ACoLock j’ai utilisé ansible, mais il en existe d’autres : puppet (plus lourd, c’est fait pour avoir un serveur central), chef, saltstack… En cherchant tous ces noms ensemble on tombe facilement sur des comparatifs et des noms d’autres solutions.

Ansible est assez facile à apprendre et assez populaire, c’est pour ça que je l’avais choisi pour l’ACoLock. Donc c’est probablement une bonne piste pour ton projet aussi.

C’est toujours plus long de configurer un serveur comme ça, mais c’est vraiment intéressant d’avoir à la fois une trace de tout ce qui a été fait sur le serveur et de pouvoir le refaire facilement sur un autre.

Je n’ai jamais essayé mais on trouve aussi tout un tas de roles ansible tout faits pour configurer des services facilement.

La config de l’ACoLock se trouve ici : https://github.com/acolab/acolock/tree/master/ansible. Il y a 2 playbooks principaux :

  • site.yml pour configurer le serveur, et
  • app.yml pour déployer une mise à jour de l’application (front et back).

J’ai trouvé etckeepermais je n’ai pas compris s’il était possible de réinstaller un serveur à partir ce ça ?

Je pense pas. Ça permet d’avoir un historique des changements que tu fais dans /etc, ce qui est pratique pour voir ce qui a changé et revenir à une version précédente, mais c’est à peu près tout. Tu dois pouvoir l’appliquer sur un autre serveur, mais vu que ça ne prend pas en compte tout ce que tu fais en dehors de /etc (paquets installés, fichiers ailleurs, etc.) c’est assez limité. L’équivalent sans outil ça serait d’installer ton nouveau serveur et de recopier tout /etc à partir de l’ancien. Ça peut marcher si c’est le même système mais c’est bourrin et il manquera plein de choses.

Si j’ai bien compris le principe de Ansible (pour la partie qui m’intéresse), c’est d’écrire une recette (playbook) qui servira à créer le nouveau serveur.

Donc je peux tout installer à la main en gardant la trace de tout ce que j’installe et je ferai le livre de cette à posteriori ainsi que la copie des différents fichiers de config que je modifie au fur et à mesure.

Tu peux, mais c’est pas comme ça que c’est utilisé. Si tu fais ça t’auras un playbook qui ne marchera probablement pas car tu ne l’auras jamais vraiment utilisé. Ou ton playbook sera incomplet. Et si t’as des changements à faire plus tard tu seras tenté de les faire directement sans mettre à jour le playbook. Si c’est ça que tu veux faire autant juste prendre des notes, et les reprendre le jour où t’as besoin de réinstaller.

L’idée c’est plutôt de tout faire avec ansible à part l’installation initiale du système (juste ce qu’il faut pour avoir un accès ssh et python). Mais tu fais ça de manière incrémentale : t’ajoutes un truc au playbook, tu lances le playbook, si ça marche pas tu corriges et relances, et quand c’est bon tu recommences avec le truc suivant. Tu peux utiliser les tags pour ne lancer que certains trucs si c’est trop long de tout relancer à chaque fois.

Dans l’écriture du playbook il peut arriver que tu fasses des choses manuellement sur le serveur, pour tester ou parce que tu sais pas vraiment ce que tu veux et que c’est plus rapide. Mais une fois que t’as fini de tester ce point particulier tu le mets dans le playbook de manière à ce que ça fonctionne sur un nouveau serveur, et tu continues l’écriture du playbook.

Quand t’as fini le playbook (ou pendant l’écriture) tu peux repartir d’un système vierge pour vérifier que ça réinstalle tout correctement.