Skip to content
Snippets Groups Projects
Commit a512103b authored by JACQUOT Lucas's avatar JACQUOT Lucas
Browse files

ansible

parents
Branches master
No related tags found
No related merge requests found
---- Petit README avec quelques informations :
TP 1
Playbook executé avec ansible version 2.9.18
--------------------
Utilisation de la librairie iptables_raw afin de gérer la gestions des ports sur les machines.
--------------------
Ports autorisé sur TheApache (web):
22 --> port SSH
80 --> Port HTTP
81 --> site 1
82 --> site 2
83 --> site 3
-------------------
Ports autorisé sur Thenginx (lb):
22 --> port SSH
80 --> Port HTTP
9000 --> loadbalancer
Tous les autres ports sont fermé.
Par Lucas JACQUOT
TP.md 0 → 100644
## Mode d'emploi
* Copier votre cle publique dans ./cle_publique
* commande : vagrant up
* premier déploiement : ansible-playbook -i inventory play.yml
Suivant le numéro de TP affecté (voir mon mail ) :
### TP 0 :
* Ajouter un certificat SSL autosigné pour la connexion nginx / client web
* Ajouter un moteur de base de données Mariadb/Mysql + des utilisateurs/mot de passe, définie dans une liste
* Ajouter un role commun pour les deux groupes de machine pour installer une liste de package prédéfinie (exemple : nmon, htop, tmux, screen)
### TP 1 :
* Basculer le restart d'apache2 et nginx dans un handler
* Ajouter php à apache dans le role apache et insérer une page de test phpinfo() par défaut.
* Ajouter des regles iptables sur le nginx et apache pour n'accepter qu'une liste de ports définie
## Pour tous : question bonus (à rendre dans un autre répertoire )
- Fusionner tous les roles dans un seul et unique role : avec le même résultat
## Quelques rappels
* Pour tester le fonctionnement du loadbalancer : http://192.168.33.18:9000 (et plein de F5 pour basculer d'un apache à l'autre et sauf ceux qui passeront en ssl évidemment)
* Je ferais avec vos dépots la même chose que le mode d'emploi => Je vous conseille donc de rejouer pour être sur que ça fonctionnera. Déjà, vous perdez des points et en plus, vous agacez le correcteur ( aka moi )
* Ne pas utiliser les modules "command" ou "shell" , sauf extreme urgence. Normalement, vous n'en avez pas besoin.
* Je préfère une livraison de code via un git (gitlab de préférence) qu'un zip par mail ...
* n'hésitez pas à rajouter un petit README si vous voyez la necessité #JaimeLaDoc
* j'espère que vous avez lu les rappels.
# -*- mode: ruby -*-
# vi: set ft=ruby :
Vagrant.configure("2") do |config|
config.vm.define "web" do |web|
web.vm.box = "debian/stretch64"
web.vm.hostname = 'web'
web.vm.network :private_network, ip: "192.168.33.17"
public_key = File.read("cle_publique")
config.vm.provision :shell, :inline =>"
echo 'Copying ansible-vm public SSH Keys to the VM'
mkdir -p /home/vagrant/.ssh
chmod 700 /home/vagrant/.ssh
echo '#{public_key}' >> /home/vagrant/.ssh/authorized_keys
chmod -R 600 /home/vagrant/.ssh/authorized_keys
", privileged: false
end
config.vm.define "lb" do |lb|
lb.vm.box = "debian/stretch64"
lb.vm.hostname = 'lb'
lb.vm.network :private_network, ip: "192.168.33.18"
public_key = File.read("cle_publique")
config.vm.provision :shell, :inline =>"
echo 'Copying ansible-vm public SSH Keys to the VM'
mkdir -p /home/vagrant/.ssh
chmod 700 /home/vagrant/.ssh
echo '#{public_key}' >> /home/vagrant/.ssh/authorized_keys
chmod -R 600 /home/vagrant/.ssh/authorized_keys
", privileged: false
end
end
[defaults]
remote_user=vagrant
[privilege_escalation]
become = true
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQC7DpFpErGVbykt4z7iQv/8frS1m6/njtEiF239ZmZLhL4d/hFC327DGid5S8yuWFrvWfOeAEuAuyODJ/71UKZqXFEs6bbrDYcgdFRVmXaMtD5OfCrY8PWtJy1wmXO/rEdX0brn0BguClJNbIygMHPWePDK05P2iSFm+JGIVJPxQWeDnqO2sUPT2Q3rr74XrpGXmsFBrW8VnouJBUl5i0eD4E0onKsyiQaEebrmRrcVYs+/GYxumkowP3a9w8j3VpTJgJiOJuLs3ruGOpXaWupEFMxj92Mt8x22lmtyryEz0lXIXhuD23C/FH5Cm1qFAOq5xYJOwdFYYodYYVVY6R23 lucas@debian
all:
hosts:
machine1:
ansible_host: 192.168.33.15
children:
loadbalancer:
hosts:
theLB:
ansible_host: 192.168.33.18
web:
hosts:
theApache:
ansible_host: 192.168.33.17
sites:
- { 'nom_du_site': site1 , 'port': 81 }
- { 'nom_du_site': site2 , 'port': 82 }
- { 'nom_du_site': site3 , 'port': 83 }
#!/usr/bin/env ansible-playbook
- hosts: web
roles:
- role: apache2
- hosts: loadbalancer
roles:
- role: nginx
sites:
- { 'nom_du_site': site1 , 'port': 81 }
- { 'nom_du_site': site2 , 'port': 82 }
default_site_directory: /var/www/
- name: restart apache2
ansible.builtin.service:
name: apache2
state: restarted
This diff is collapsed.
- name : apache installation
apt:
name: apache2
- name: add directory for sites
file:
state: directory
path: "/var/www/{{ item.nom_du_site }}"
loop: "{{ sites }}"
- name: add index.html in sites
lineinfile:
state: present
create: yes
path: "/var/www/{{ item.nom_du_site }}/index.html"
line: "site de {{ item.nom_du_site }}"
loop: "{{ sites }}"
- name: deploy apache site files
template:
src: "site.j2"
dest: "/etc/apache2/sites-available/{{item.nom_du_site}}.conf"
loop: "{{ sites }}"
- name: apache2 ativate VirtualHost
command: a2ensite {{ item.nom_du_site }}
loop: "{{ sites }}"
- name: add listen
lineinfile:
path: /etc/apache2/ports.conf
line: "Listen {{ item.port }}"
loop: "{{ sites }}"
notify: restart apache2
- name : php installation
apt:
name: php7.0
- name: Ajout de la page phpinfo
copy:
src: ../templates/phpinfo.php
dest: /var/www/html/
- name: suppression de dir.conf
file:
path: /etc/apache2/mods-available/dir.conf
state: absent
- name: Mettre phpinfo par defaut
copy:
src: ../templates/dir.conf
dest: /etc/apache2/mods-available/
- name: installation des services iptables
become: true
apt:
name: iptables
state: present
notify: restart apache2
- name: installation de iptables-persistent
become: true
apt:
name: iptables-persistent
state: present
- iptables_raw:
name: Autorisations des ports
keep_unmanaged: no
rules: |
-A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
-A INPUT -p tcp -m tcp --dport 22 -j ACCEPT
-A INPUT -p tcp -m tcp --dport 80 -j ACCEPT
-A INPUT -p tcp -m tcp --dport 81 -j ACCEPT
-A INPUT -p tcp -m tcp --dport 82 -j ACCEPT
-A INPUT -p tcp -m tcp --dport 83 -j ACCEPT
-A INPUT -j REJECT
-A FORWARD -j REJECT
-A OUTPUT -j ACCEPT
state: present
<IfModule mod_dir.c>
DirectoryIndex phpinfo.php index.html index.cgi index.pl index.php index.xhtml index.htm
</IfModule>
# vim: syntax=apache ts=4 sw=4 sts=4 sr noet
<?php
phpinfo();
?>
<VirtualHost *:{{ item.port }}>
ServerAdmin webmaster@localhost
DocumentRoot {{default_site_directory}}{{ item.nom_du_site }}
ErrorLog ${APACHE_LOG_DIR}/error.log
CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>
- name: restart nginx
service:
name: nginx
state: restarted
- name : nginx install
apt:
name: nginx
#TODO : livrer lb.j2 dans /etc/nginx/sites-available/
- name: installation des fichiers de conf
template:
src: lb.j2
dest: "/etc/nginx/sites-available/loadbalancer.conf"
#TODO: creer un lien symbolique /etc/nginx/sites-available/loadbalancer.conf vers /etc/nginx/sites-enabled/loadbalancer.conf
- name: create symlink
file:
src: /etc/nginx/sites-available/loadbalancer.conf
dest: /etc/nginx/sites-enabled/loadbalancer.conf
state: link
notify: restart nginx
- name: installation des services iptables
become: true
apt:
name:
- iptables
- iptables-persistent
state: present
notify: restart nginx
- iptables_raw:
name: Autorisations des ports
keep_unmanaged: no
rules: |
-A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
-A INPUT -p tcp -m tcp --dport 22 -j ACCEPT
-A INPUT -p tcp -m tcp --dport 80 -j ACCEPT
-A INPUT -p tcp -m tcp --dport 9000 -j ACCEPT
-A INPUT -j REJECT
-A FORWARD -j REJECT
-A OUTPUT -j ACCEPT
state: present
upstream nginx-proxy {
{% for host in groups['web'] %}
{% for site in hostvars[host].sites %}
server {{ hostvars[host].ansible_eth1.ipv4.address }}:{{ site.port }};
{% endfor %}
{% endfor %}
}
# RP
server {
listen 9000 ;
server_name nameserver;
location / {
proxy_pass http://nginx-proxy;
}
}
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment