Introduction
De nos jours, les serveurs doivent être créés et détruits très fréquemment. En effet, par moments, les serveurs subissent une charge d'exécution importante alors qu'à d'autres moments la charge diminue, gaspillant ainsi les ressources du système. Un exemple courant est celui des sites de commerce électronique pendant les périodes de fêtes qui attirent beaucoup de trafic. Lorsque la nature de l'application est d'être évolutive, il est toujours nécessaire de disposer d'outils de gestion de configuration pour faciliter le processus global de création de serveurs. Ansible est un excellent outil de gestion de configuration qui automatise la création de serveurs à l'aide de procédures standard, réduisant ainsi les erreurs humaines.
Ansible ne nécessite pas l'installation de logiciels spécifiques sur les nœuds des serveurs. Il dispose de tous les outils nécessaires pour écrire, construire et faciliter l'automatisation des scripts. Ce tutoriel explique en détail comment utiliser Ansible pour automatiser les étapes contenues dans notre tutoriel Comment configurer votre serveur Ubuntu..
Prérequis
Pour compléter ce guide, nous utiliserons Ubuntu 20.04. De plus, vous aurez également besoin de :
-
Un nœud de contrôle Ansible: Une machine Ubuntu exécutant la dernière version d'Ubuntu. Le binaire maître d'Ansible doit être installé et en cours d'exécution sur cette machine. Cette machine doit pouvoir se connecter aux nœuds Ansible. Pour ces connexions, vous devez utiliser des clés SSH. Pour éviter les problèmes lors de la connexion, assurez-vous que votre nœud de contrôle Ansible a un pare-feu activé. Si vous avez besoin d'aide, consultez notre blog sur l'Installation et configuration d'Ansible sur Ubuntu 20.04.
-
Hôtes Ansible: Un ou plusieurs hôtes sont nécessaires pour s'y connecter. Les hôtes sont essentiellement les nœuds gérés dans Ansible. Ceux-ci doivent être des serveurs Ubuntu.
Fonctions du Playbook Ansible
Vous pouvez configurer manuellement toutes les étapes mentionnées ci-dessous. Cependant, nous allons automatiser cette exécution. Lorsque vous exécuterez ce playbook, il effectuera les opérations ci-dessous sur votre machine :
-
Il installera aptitude, qui est préféré par Ansible comme gestionnaire de paquets.
-
Il créera un groupe d'administration wheel avec des permissions sudo sans mot de passe.
-
Il créera un nouvel utilisateur sudo.
-
Il copiera une clé SSH locale dans le fichier authorized_keys. Ceci est destiné à être utilisé pour un nouvel utilisateur administrateur sur un hôte distant.
-
Il désactivera l'authentification par mot de passe pour l'utilisateur root.
-
Il installera les paquets nécessaires.
-
Il configurera le pare-feu UFW pour autoriser uniquement les connexions SSH. Toutes les autres connexions seront bloquées.
Une fois l'exécution du Playbook terminée, un nouvel utilisateur sera disponible. Vous pourrez utiliser cet utilisateur pour vous connecter au système.
Utilisation du Playbook Ansible
Pour configurer le serveur, vous aurez besoin du playbook de configuration initiale du serveur et de ses dépendances. Si vous l'utilisez pour la première fois, vous devrez cloner le dépôt à l'aide du lien ci-dessous :
|
1 |
cd ~ |
|
1 |
git clone https://github.com/do-community/ansible-playbooks.git |
|
1 |
cd ansible-playbooks |
Si le dépôt existe déjà sur votre système, exécutez la commande ci-dessous pour obtenir les dernières mises à jour :
|
1 |
cd ~/ansible-playbooks |
|
1 |
git pull |
Vous obtiendrez la structure de fichiers ci-dessous sur votre machine :
|
1 2 3 4 |
setup |-- playbook.yml |__vars |-- default,yml |
Voici la description des fichiers :
-
vars/default.yml: Ce fichier contient les variables pour configurer le nœud Ansible.
-
playbook.yml: Ce fichier contient les tâches à exécuter sur le serveur.
Le fichier vars/default.yml ressemble à ceci :
|
1 2 3 4 |
--- create_user: my_user copy_local_key: "{{ lookup('file', lookup('env','HOME') + '/.ssh/id_rsa.pub') }}" sys_packages: [ 'curl', 'vim', 'git', 'ufw'] |
Voici la description de ces variables. Si vous souhaitez les modifier, vous pouvez remplacer leurs valeurs par les vôtres :
-
create_user: C'est l'utilisateur qui est créé. Cet utilisateur dispose de privilèges sudo.
-
copy_local_key: Ceci contient le chemin d'accès à la clé publique SSH locale. Elle sera copiée sur le serveur distant sous le nom de authorized_key.
-
sys_packages: Si vous souhaitez installer un ou plusieurs paquets sur votre serveur, indiquez-les ici sous forme de tableau.
Une fois que vous avez modifié ce fichier, enregistrez le contenu. Après cela, dans nano, appuyez sur CTRL+X , Y. Puis, ENTRÉE pour enregistrer le contenu du fichier.
Vous êtes maintenant prêt à exécuter ce playbook sur plusieurs serveurs. Par défaut, les Playbooks sont prêts à être exécutés sur les serveurs de votre inventaire. Si vous souhaitez utiliser le Playbook sur certains serveurs spécifiques, vous pouvez utiliser l'option -l . Supposons maintenant que le serveur distant possède plusieurs utilisateurs, vous pouvez utiliser l'option -u pour indiquer à quel utilisateur se connecter.
Si le nom de votre serveur est my_server et le nom d'utilisateur est my_user, exécutez ensuite la commande ci-dessous pour l'exécuter sur les nœuds Ansible :
|
1 |
ansible-playbook playbook.yml -l my_server -u my_user |
Vous obtiendrez une sortie semblable à ceci :
|
1 2 3 4 5 6 7 8 9 |
PLAY [all] ***************************************************************************************************************************** TASK [Collecte des faits] ***************************************************************************************************************** ok: [my_server] TASK [Installer les prérequis] *********************************************************************************************************** changed: [my_server] TASK [S'assurer que nous avons un 'wheel' groupe] *********************************************************************************************** changed: [my_server] TASK [Autoriser 'wheel' le groupe à avoir un sudo sans mot de passesudo] *********************************************************************************** changed: [my_server] |
Une fois cette exécution terminée, vous pouvez vous connecter à l'aide de la commande ci-dessous :
|
1 |
ssh my_user@server_host_or_IP |
Rappelez-vous que my_user était le nom que nous avions utilisé dans le fichier vars/default.yml. Vous devrez également remplacer l'adresse IP du serveur par l'adresse IP de votre serveur dans la commande ci-dessus. Si vous aviez fourni la variable copy_local_key pour pointer vers une clé SSH personnalisée, spécifiez l'emplacement avec l'option -i :
|
1 |
ssh my_user@server_host_or_IP -i ~/.ssh/ansible_controller_key |
Ensuite, connectez-vous à votre serveur pour vérifier les règles du pare-feu UFW :
|
1 |
sudo ufw status |
Vous obtiendrez la sortie ci-dessous :
|
1 2 3 4 5 |
Statut: actif À Action De -- ------ ---- OpenSSH ALLOW N'importe où OpenSSH (v6) ALLOW N'importe où (v6) |
La sortie ci-dessus confirme que le pare-feu UFW a été configuré avec succès. C'était la dernière étape de notre playbook. Si cela est effectué correctement, cela signifie que l'exécution a réussi.
Le contenu du Playbook Ansible
Les fichiers du Playbook que nous avons utilisés dans ce tutoriel sont hébergés sur ansible-playbooks/setup_ubuntu1804 at master · do-community/ansible-playbooks · GitHub. Si vous souhaitez voir le contenu de chaque fichier pour l'utiliser ou le modifier, cliquez sur le bouton Raw en haut de chaque script.
Pour référence rapide, nous partagerons le contenu complet du Playbook ainsi que les fichiers correspondants :
-
vars/default.yml
Ce fichier contient les valeurs qui seront utilisées par les tâches du playbook. Celles-ci incluent des valeurs telles que le nom de l'utilisateur, les privilèges, les clés SSH, les paquets à installer dans le cadre de la configuration initiale, et ainsi de suite :
|
1 2 3 4 |
--- create_user: my_user copy_local_key: "{{ lookup('file', lookup('env','HOME') + '/.ssh/id_rsa.pub') }}" sys_packages: [ 'curl', 'vim', 'git', 'ufw'] |
-
playbook.yml
Le playbook.yml contient les tâches à exécuter. Tout d'abord, le fichier répertorie tous les hôtes à cibler. Si vous souhaitez spécifier tous les serveurs, définissez la valeur de cette clé sur all. Ensuite, si vous souhaitez spécifier les tâches à exécuter avec les privilèges sudo, vous définissez la valeur de la variable become: true. Enfin, ce fichier doit inclure le contenu du vars/default.yml ci-dessus. Nous les incluons ensuite pour charger les paramètres de ce fichier :
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 |
--- - hosts: all become: true vars_files: - vars/default.yml tasks: - name: Installer les prérequis apt: name=aptitude update_cache=yes state=latest force_apt_get=yes # Configuration du groupe Sudo - name: S'assurer que nous avons un groupe 'wheel' group group: name: wheel state: present - name: Autoriser le groupe 'wheel' à avoir un accès sans mot de passe à sudo lineinfile: path: /etc/sudoers state: present regexp: '^%wheel' line: '%wheel ALL=(ALL) NOPASSWD: ALL' validate: '/usr/sbin/visudo -cf %s' # Configuration de l'utilisateur et de la clé - name: Créer un nouvel utilisateur standard avec les privilèges sudo user: name: "{{ create_user }}" state: present groups: wheel append: true create_home: true shell: /bin/bash - name: Définir la clé autorisée pour l'utilisateur distant authorized_key: user: "{{ create_user }}" state: present key: "{{ copy_local_key }}" - name: Désactiver l'authentification par mot de passe pour root lineinfile: path: /etc/ssh/sshd_config state: present regexp: '^#?PermitRootLogin' line: 'PermitRootLogin prohibit-password' # Installation des paquets - name: Mettre à jour apt apt: update_cache=yes - name: Installer les paquets système requis apt: name={{ sys_packages }} state=latest # Configuration d'UFW - name: UFW - - Autoriser les connexions SSH ufw: rule: allow name: OpenSSH - name: UFW - - Refuser tout autre trafic entrant par défaut ufw: state: enabled policy: deny direction: incoming |
Conclusion
L'automatisation est essentielle en informatique, car elle garantit que tous les processus sont exempts d'erreurs et respectent les pratiques et procédures standard. Étant donné que la plupart des logiciels actuels sont distribués via le Web et ont une nature distribuée, la création de nouveaux serveurs est devenue une tâche quotidienne, par exemple pour différents environnements tels que le staging ou la production, ou même des environnements de démonstration.
Dans ce tutoriel, nous avons démontré comment automatiser des serveurs à l'aide d'Ansible, un outil puissant et facile à utiliser qui peut vous faire gagner beaucoup de temps.
Bonne informatique !
Commentaires
Aucun commentaire pour l'instant. Soyez le premier.