Comment automatiser l'installation du serveur ? Quelles infrastructures/systèmes correspondent à nos besoins ?

Nous avons plus de 10 serveurs physiques avec plus de 100 machines virtuelles, principalement LAMP. Pas trop, mais aussi rien qui puisse continuer à fonctionner tout seul. Tous les serveurs ont une virtualisation KVM. Nous hébergeons diverses applications sur mesure pour nos clients que nous modifions fréquemment. Il ne s'agit donc pas d'une seule application qui doit évoluer. Les équipes de projet travaillent directement avec les clients et avec les machines virtuelles et c'est une exigence.

Le problème auquel nous sommes régulièrement confrontés est que la réinstallation d'une VM/machine devient délicate car personne ne contrôle les modifications récentes, cela présente un risque d'instabilité, les gens la reportent le plus longtemps possible et les problèmes s'aggravent avec le temps.

Je souhaite établir une procédure de réinstallation au moins tous les 3 mois et à la demande. La réinstallation doit commencer par un référentiel de code et une sauvegarde. Il ne doit pas s'agir d'une duplication de VM.

Nous estimons que cela nous coûtera environ 6 hommes-mois tous les 3 mois dans la configuration actuelle si cela est fait à la main. Comment pouvons-nous réduire ce temps et également augmenter la répétabilité du processus ?

La question est de savoir quel logiciel peut nous aider à automatiser cette tâche. Il doit être le plus léger possible. Nous n'avons pas besoin d'une allocation automatisée des nœuds. Nous avons juste besoin d'avoir des réinstallations pour être aussi automatisé que possible. Nous assumons la surveillance humaine de chaque réinstallation.

Nos nœuds sont principalement LAMP avec deux systèmes ayant plus de 1 To de données de base de données structurées, plusieurs > 200 Go et environ 50 petites machines virtuelles personnalisées. Nous pouvons planifier facilement un arrêt planifié de chaque système, il ne s'agit donc pas d'une question de haute disponibilité lors de la réinstallation.

Nous avons juste besoin d'automatiser la réinstallation autant que possible.

answer

Vous avez besoin d'un framework de gestion de configuration comme Ansible, Saltstack, Puppet ou Chef.

C'est l'outil à utiliser pour gérer et appliquer les configurations. Cependant, la sélection de l'outil réel est une partie mineure du projet.

Vous devez concevoir et déployer le processus, où toutes les modifications apportées à l'infrastructure sont gérées via cet outil.

Cela nécessite:

  • former les gens à l'utilisation de l'outil
  • modifier l'architecture du système afin que les modifications ne puissent pas être apportées sans l'outil
  • faire face à la résistance au changement du mode de fonctionnement fondamental des personnes

Vous devez également envisager d'unifier l'infrastructure de la pile logicielle.

Si chaque machine virtuelle a une configuration logicielle légèrement différente, vous aurez soit

  • beaucoup de code en double dans votre code de gestion de configuration pour différentes installations
  • logique complexe pour choisir comment appliquer quelle configuration

L'un ou l'autre de ces facteurs ajoute beaucoup de frais généraux de maintenance, et le résultat final peut devenir aussi pénible que votre situation actuelle.

Votre cloud dispose-t-il d'une clé API ?

La plupart des nuages ​​ont des images LAMP en un clic, par exemple

Vultr : https://www.vultr.com/apps/lamp/

Océan numérique : https://marketplace.digitalocean.com/apps/lamp

Linode : https://www.linode.com/docs/guides/lamp-stack-marketplace-app/

Sinon, ma référence absolue est VestaCP https://vestacp.com/install/

Et https://hestiacp.com/

Les deux ajoutent le backend apache, le front-end nginx, MySQL/mariadb/postgres et php/php-fpm. Toutes les options aussi.

Pour les mises à jour, je créerais un serveur séparé, déposerais une clé publique SSH commune dans /root/.ssh/authorized_keyslaquelle le serveur séparé a, qui peut se connecter automatiquement à chaque serveur, quelque chose comme :

INSTANCES=(
10.0.0.5
10.0.0.6
10.0.0.7
...
)


for INSTANCE in "${INSTANCES[@]}"; do
    ssh [email protected]${INSTANCE} /bin/bash -c "apt update -y && apt upgrade -y"
done

C'est à peu près Terraform, Kubernetes etc. DIY.

Également sur GitHub, il existe de nombreux guides spécifiques au cloud, par exemple :

Un autre océan numérique : https://github.com/ethanbeyer/DigitalOcean-Droplet-Setup

Un AWS : https://github.com/elionaz/aws-LAMP/blob/master/install_lamp.sh