L’automatisation des serveurs joue maintenant un rôle essentiel dans l’administration des systèmes, en raison de la nature disponible des environnements d’application modernes. Les outils de gestion de la configuration tels qu’Ansible sont généralement utilisés pour rationaliser le processus d’automatisation de la configuration des serveurs en établissant des procédures standard pour les nouveaux serveurs tout en réduisant l’erreur humaine associée aux configurations manuelles.
Ansible offre une architecture simple qui ne nécessite pas l’installation de logiciels spéciaux sur les nœuds. Elle fournit également un ensemble robuste de caractéristiques et de modules intégrés qui facilitent l’écriture de scripts d’automatisation.
Ce guide explique comment utiliser Ansible pour automatiser les étapes contenues dans notre guide sur Comment installer Linux, Apache, MySQL et PHP (LAMP) sur Ubuntu 18.04. Un empilement “LAMP” est un groupe de logiciels open-source qui est généralement installé ensemble pour permettre à un serveur d’accueillir des sites web dynamiques et des apps web. Ce terme est en fait un sigle qui représente le système d’exploitation Linux, avec le serveur web Apache. Les données du site sont stockées dans une base de données MySQL, et le contenu dynamique est traité par PHP.
Afin d’exécuter la configuration automatisée fournie par le playbook dont nous parlons dans ce guide, vous aurez besoin :
Avant de poursuivre, vous devez d’abord vous assurer que votre nœud de contrôle Ansible est capable de connecter et d’exécuter des commandes sur votre ou vos hôte(s) Ansible. Pour réaliser un test de connexion, veuillez vérifier l’étape 3 de Comment installer et configurer Ansible sur Ubuntu 18.04.
Ce playbook Ansible offre une alternative à la gestion manuelle via la procédure décrite dans notre guide sur Comment installer Linux, Apache, MySQL et PHP (LAMP) sur Ubuntu 18.04.
L’exécution de ce playbook exécutera les actions suivantes sur vos hôtes Ansible :
aptitude
, qui est préférée par Ansible comme une alternative au gestionnaire de paquets apt
.VirtualHost
Apache et création d’une racine de document dédiée à cela.VirtualHost
true
80
par défaut).Une fois le Playbook exécuté, vous aurez un environnement web PHP fonctionnant au-dessus d’Apache, basé sur les options que vous avez définies dans vos variables de configuration.
La première chose que nous devons faire est d’obtenir le playbook LAMP et ses dépendances à partir du répertoire do-community/ansible-playbooks Nous devons cloner ce répertoire vers un dossier local à l’intérieur du nœud de contrôle Ansible.
Si vous avez déjà cloné ce répertoire en suivant un autre guide, accédez à votre copie existante de ansible-playbooks
et lancez une commande git pull
pour vous assurer que vous disposez d’un contenu mis à jour :
- cd ~/ansible-playbooks
- git pull
Si c’est la première fois que vous utilisez le répertoire do-community/ansible-playbooks
, vous devriez commencer par cloner le répertoire vers votre dossier d’accueil avec :
- cd ~
- git clone https://github.com/do-community/ansible-playbooks.git
- cd ansible-playbooks
Les fichiers qui nous intéressent sont situés à l’intérieur du dossier lamp_ubuntu1804
, qui a la structure suivante :
lamp_ubuntu1804
├── files
│ ├── apache.conf.j2
│ └── info.php.j2
├── vars
│ └── default.yml
├── playbook.yml
└── readme.md
Voici ce que sont chacun de ces fichiers :
files/info.php.j2
: fichier template pour configurer une page de test PHP sur la racine du serveur webfiles/apache.conf.j2
: fichier template pour la création du VirtualHost Apachevars/default.yml
: fichier variable pour la personnalisation des paramètres playbookplaybook.yml
: le fichier playbook, contenant les tâches à exécuter sur le( les) serveur(s) distant(s)readme.md
: un fichier texte contenant des informations sur ce playbookNous allons modifier le fichier variable du playbook pour personnaliser les configurations de MySQL et d’Apache. Accédez au répertoire lamp_ubuntu1804
et ouvrez le fichier vars/default.yml
en utilisant l’éditeur en ligne de commande de votre choix :
- cd lamp_ubuntu1804
- nano vars/default.yml
Ce fichier contient quelques variables qui nécessitent votre attention :
---
mysql_root_password: "mysql_root_password"
app_user: "sammy"
http_host: "your_domain"
http_conf: "your_domain.conf"
http_port: "80"
disable_default: true
La liste suivante contient une brève explication de chacune de ces variables et la façon dont vous pourriez vouloir les modifier :
mysql_root_password
: le mot de passe souhaité pour le compte root MySQLapp_user
: un utilisateur distant non root sur l’hôte Ansible qui sera défini comme le propriétaire des fichiers d’applicationhttp_host
: votre nom de domainehttp_conf
:le nom du fichier de configuration qui sera créé au sein d’Apachehttp_port
: port HTTP pour cet hôte virtuel, où 80
est celui par défautdisable_default
: la possibilité de désactiver ou non le site web par défaut qui accompagne Apache.Une fois que vous avez terminé la mise à jour des variables à l’intérieur de vars/default.yml
, enregistrez et fermez ce fichier Si vous avez utilisé nano
, faites-le en appuyant sur CTRL+X
, Y
, puis ENTER
.
Vous êtes maintenant prêt à exécuter ce playbook sur un ou plusieurs serveurs. La plupart des playbooks sont configurés pour être exécutés sur chaque serveur de votre répertoire, par défaut. Nous pouvons utiliser le drapeau -l
pour nous assurer qu’un seul sous-ensemble de serveurs, ou un seul serveur, est affecté par le playbook. Nous pouvons également utiliser le drapeau -u
pour spécifier quel utilisateur du serveur distant nous utilisons pour nous connecter et exécuter les commandes du playbook sur les hôtes distants.
Pour exécuter le playbook uniquement sur server1
, connecté en tant quesammy
, vous pouvez utiliser la commande suivante :
- ansible-playbook playbook.yml -l server1 -u sammy
Vous obtiendrez une sortie similaire à ceci :
Output
PLAY [all] *********************************************************************************************************
TASK [Gathering Facts] *********************************************************************************************************ok: [server1]
TASK [Install prerequisites] *********************************************************************************************************ok: [server1] => (item=aptitude)
...
TASK [UFW - Allow HTTP on port 80] *********************************************************************************************************
changed: [server1]
TASK [Sets Up PHP Info Page] *********************************************************************************************************
changed: [server1]
RUNNING HANDLER [Reload Apache] *********************************************************************************************************
changed: [server1]
RUNNING HANDLER [Restart Apache] *********************************************************************************************************
changed: [server1]
PLAY RECAP *********************************************************************************************************
server1 : ok=15 changed=11 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
Remarque : pour plus d’informations sur la façon d’exécuter les playbooks Ansible, consultez notre Guide Ansible Cheat Sheet.
Lorsque le playbook a fini de s’exécuter, ouvrez votre navigateur web et accédez à l’adresse hôte ou IP du serveur, tel qu’elle est configurée dans les variables playbook, suivi par /info.php
:
http://server_host_or_IP/info.php
Vous verrez une page comme ceci :
Étant donné que cette page contient des informations sensibles sur votre environnement PHP, il est recommandé que vous la supprimiez du serveur en lançant une commande rm -f /var/www/info.php
une fois que vous avez terminé de la configurer.
Vous pouvez trouver la configuration du serveur LAMP présentée dans ce tutoriel dans le dossier lamp_ubuntu1804
à l’intérieur du répertoire DigitalOcean Community Playbooks. Pour copier ou télécharger directement le contenu du script, cliquez sur le bouton Raw dans la partie supérieure de chaque script.
Le contenu complet du playbook ainsi que ses fichiers associés sont également inclus ici pour votre commodité.
Le fichier variable default.yml
contient des valeurs qui seront utilisées dans les tâches du playbook, comme le mot de passe pour le compte root MySQL et le nom du domaine à configurer au sein d’Apache.
---
mysql_root_password: "mysql_root_password"
app_user: "sammy"
http_host: "your_domain"
http_conf: "your_domain.conf"
http_port: "80"
disable_default: true
Le fichier apache.conf.j2
est un fichier template Jinja 2 qui configure un nouveau VirtualHost Apache. Les variables utilisées dans ce modèle sont définies dans le fichier variable vars/default.yml
<VirtualHost *:{{ http_port }}>
ServerAdmin webmaster@localhost
ServerName {{ http_host }}
ServerAlias www.{{ http_host }}
DocumentRoot /var/www/{{ http_host }}
ErrorLog ${APACHE_LOG_DIR}/error.log
CustomLog ${APACHE_LOG_DIR}/access.log combined
<Directory /var/www/{{ http_host }}>
Options -Indexes
</Directory>
<IfModule mod_dir.c>
DirectoryIndex index.php index.html index.cgi index.pl index.xhtml index.htm
</IfModule>
</VirtualHost>
Le fichier info.php.j2
est un autre modèle Jinja, utilisé pour configurer un script de test PHP dans la racine du document du serveur LAMP nouvellement configuré.
<?php
phpinfo();
Le fichier playbook.yml
est l’endroit où toutes les tâches de cette configuration sont définies. Il commence par définir le groupe de serveurs qui doit être la cible de cette configuration tous
, après quoi il utilise become: true
pour définir que les tâches doivent être exécutées avec une élévation des privilèges sudo
par défaut. Ensuite, il inclut le fichier variable vars/default.yml
pour charger les options de configuration.
---
- hosts: all
become: true
vars_files:
- vars/default.yml
tasks:
- name: Install prerequisites
apt: name={{ item }} update_cache=yes state=latest force_apt_get=yes
loop: [ 'aptitude' ]
#Apache Configuration
- name: Install LAMP Packages
apt: name={{ item }} update_cache=yes state=latest
loop: [ 'apache2', 'mysql-server', 'python3-pymysql', 'php', 'php-mysql', 'libapache2-mod-php' ]
- name: Create document root
file:
path: "/var/www/{{ http_host }}"
state: directory
owner: "{{ app_user }}"
mode: '0755'
- name: Set up Apache virtualhost
template:
src: "files/apache.conf.j2"
dest: "/etc/apache2/sites-available/{{ http_conf }}"
notify: Reload Apache
- name: Enable new site
shell: /usr/sbin/a2ensite {{ http_conf }}
notify: Reload Apache
- name: Disable default Apache site
shell: /usr/sbin/a2dissite 000-default.conf
when: disable_default
notify: Reload Apache
# MySQL Configuration
- name: Sets the root password
mysql_user:
name: root
password: "{{ mysql_root_password }}"
login_unix_socket: /var/run/mysqld/mysqld.sock
- name: Removes all anonymous user accounts
mysql_user:
name: ''
host_all: yes
state: absent
login_user: root
login_password: "{{ mysql_root_password }}"
- name: Removes the MySQL test database
mysql_db:
name: test
state: absent
login_user: root
login_password: "{{ mysql_root_password }}"
# UFW Configuration
- name: "UFW - Allow HTTP on port {{ http_port }}"
ufw:
rule: allow
port: "{{ http_port }}"
proto: tcp
# PHP Info Page
- name: Sets Up PHP Info Page
template:
src: "files/info.php.j2"
dest: "/var/www/{{ http_host }}/info.php"
handlers:
- name: Reload Apache
service:
name: apache2
state: reloaded
- name: Restart Apache
service:
name: apache2
state: restarted
N’hésitez pas à modifier ces fichiers pour qu’ils répondent au mieux à vos besoins individuels dans votre propre flux de travail.
Dans ce guide, nous avons utilisé Ansible pour automatiser le processus d’installation et de création d’un environnement LAMP sur un serveur distant. Parce que chaque individu a des besoins différents lorsqu’il travaille avec les bases de données et les utilisateurs de MySQL, nous vous encourageons à consulter la documentation officielle Ansible pour obtenir plus d’informations et de cas d’utilisation du module mysql_user
Ansible.
Si vous souhaitez inclure d’autres tâches dans ce playbook pour personnaliser davantage la configuration de votre serveur, veuillez vous référer à notre guide d’introduction à Ansible, Gestion de la configuration 101 : L’écriture de Playbooks Ansible.
Thanks for learning with the DigitalOcean Community. Check out our offerings for compute, storage, networking, and managed databases.
This textbox defaults to using Markdown to format your answer.
You can type !ref in this text area to quickly search our full set of tutorials, documentation & marketplace offerings and insert the link!