diff --git a/TP.md b/TP.md
new file mode 100644
index 0000000000000000000000000000000000000000..5984cb81c4dac9cfd4a212bfe75cfe8befe88430
--- /dev/null
+++ b/TP.md
@@ -0,0 +1,56 @@
+## 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
+
+ - name: Creation private key
+  openssl_privatekey:
+    path:  /etc/nginx/cert/server.key
+    size: 2048
+
+- name: demande de signature
+  openssl_csr:
+    path:  /etc/nginx/cert/server.csr
+    privatekey_path:  /etc/nginx/cert/server.key
+
+- name: Creation du certificat
+  openssl_certificate:
+    path:  /etc/nginx/cert/servcer.crt
+    privatekey_path:  /etc/nginx/cert/server.key
+    csr_path:  /etc/nginx/cert/server.csr
+    provider: selfsigned
+
+ * 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.
diff --git a/Vagrantfile b/Vagrantfile
new file mode 100644
index 0000000000000000000000000000000000000000..685bf06699d099016a81961e99a769662862ba11
--- /dev/null
+++ b/Vagrantfile
@@ -0,0 +1,37 @@
+# -*- mode: ruby -*-
+# vi: set ft=ruby :
+Vagrant.configure("2") do |config|
+  config.vm.define "web" do |web|
+    web.vm.box = "debian/buster64"
+    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/buster64"
+    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
+    
\ No newline at end of file
diff --git a/ansible.cfg b/ansible.cfg
new file mode 100644
index 0000000000000000000000000000000000000000..d69f9fa5c29e150d3d693e65a07e728c8ad5be83
--- /dev/null
+++ b/ansible.cfg
@@ -0,0 +1,5 @@
+[defaults]
+remote_user=vagrant
+
+[privilege_escalation]
+become = true
diff --git a/cle_publique b/cle_publique
new file mode 100644
index 0000000000000000000000000000000000000000..0179a509d76a96192dac9bf7df688c283564afbb
--- /dev/null
+++ b/cle_publique
@@ -0,0 +1 @@
+ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQCnmOJHPMiVedU3a4+LGnlVcdQtGhx93Qx3eaMb+SjfvSfeEHvnbVLh3TFTM6L2WzzXSB2G5BhtaRcMlXWCBmnxi0lO9J+NkynKmWlIx7MlTAQnJFuMVrtp7T5U2d5/ijRwB/H7k7eIJ04obt1plxCRJs71x0o12z1De9z1trh+c9YtAoHR7gbCXC/tiTa9bLDgkQpcTZM56dX6JDA+32nXcKsRRyPTKg1jaAW8T1CeTN0VQZhPhUVrdcxCgBtHNy0pYK2CkyTgHr0wFqCVfqZIzwrV+5JaeH0FmhpQdz1p8g7NVJX0clx1DyHPUonvmAn795iwZoNmcBL6x2ovtth/ thibault@Thibault
diff --git a/inventory b/inventory
new file mode 100644
index 0000000000000000000000000000000000000000..62fa1e56d21e80c105a6dc1dca2f8962b6965612
--- /dev/null
+++ b/inventory
@@ -0,0 +1,24 @@
+all:
+  children:
+    loadbalancer:
+      hosts:
+        theLB:
+          ansible_host: 192.168.33.18
+      vars:
+        user:
+          - thibault
+          - michel
+          - bernard
+        pass:
+          - jesaispas
+          - jesaispas2
+          - jesaispas3
+
+    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  }
diff --git a/play.retry b/play.retry
new file mode 100644
index 0000000000000000000000000000000000000000..bb923f62afb461505edb4ba3c2f4236aa2c58a5f
--- /dev/null
+++ b/play.retry
@@ -0,0 +1,3 @@
+machine1
+theApache
+theLB
diff --git a/play.yml b/play.yml
new file mode 100755
index 0000000000000000000000000000000000000000..a0b2e7189f51d690945ea1a5e8fba4511c0d54dc
--- /dev/null
+++ b/play.yml
@@ -0,0 +1,13 @@
+#!/usr/bin/env ansible-playbook
+
+- hosts: all
+  roles:
+    - role: commun
+
+- hosts: web
+  roles:
+    - role: apache2
+
+- hosts: loadbalancer
+  roles:
+    - role:  nginx
\ No newline at end of file
diff --git a/roles/apache2/defaults/main.yml b/roles/apache2/defaults/main.yml
new file mode 100644
index 0000000000000000000000000000000000000000..315db63b2226a56526991ad593cea7eac9accbcf
--- /dev/null
+++ b/roles/apache2/defaults/main.yml
@@ -0,0 +1,5 @@
+sites:
+  - { 'nom_du_site': site1 , 'port': 81 }
+  - { 'nom_du_site': site2 , 'port': 82  }
+
+default_site_directory: /var/www/
diff --git a/roles/apache2/tasks/main.yml b/roles/apache2/tasks/main.yml
new file mode 100644
index 0000000000000000000000000000000000000000..d566dfcc88bc0d4238624edd3c98d49706fda431
--- /dev/null
+++ b/roles/apache2/tasks/main.yml
@@ -0,0 +1,38 @@
+- 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 }}"
+
+- name: restart apache2
+  service:
+    name: apache2
+    state: restarted
diff --git a/roles/apache2/templates/site.j2 b/roles/apache2/templates/site.j2
new file mode 100644
index 0000000000000000000000000000000000000000..35885121be79ee706a8816b527397f9fffa44213
--- /dev/null
+++ b/roles/apache2/templates/site.j2
@@ -0,0 +1,7 @@
+<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>
diff --git a/roles/commun/tasks/main.yml b/roles/commun/tasks/main.yml
new file mode 100644
index 0000000000000000000000000000000000000000..49fac7e7036b6c3afef183b6fff649f82e837358
--- /dev/null
+++ b/roles/commun/tasks/main.yml
@@ -0,0 +1,8 @@
+- name : Installation des paquets communs
+  apt:
+   name: "{{ item }}"
+  loop:
+   - nmon
+   - htop
+   - tmux
+   - screen
\ No newline at end of file
diff --git a/roles/nginx/tasks/main.yml b/roles/nginx/tasks/main.yml
new file mode 100644
index 0000000000000000000000000000000000000000..16f7d5a7dc0bd26ce2bca3393e81741377f6c00b
--- /dev/null
+++ b/roles/nginx/tasks/main.yml
@@ -0,0 +1,69 @@
+- name : nginx install
+  apt:
+   name: "{{ item }}"
+  loop:
+   - nginx
+   - python-openssl
+   - python-cryptography
+   - python-mysqldb
+
+- name: Creation private key
+  openssl_privatekey:
+    path: /etc/ssl/certs/server.key
+    size: 2048
+
+- name: demande de signature
+  openssl_csr:
+    path: /etc/ssl/certs/server.csr
+    privatekey_path: /etc/ssl/certs/server.key
+
+- name: Creation du certificat
+  openssl_certificate:
+    path: /etc/ssl/certs/server.crt
+    privatekey_path: /etc/ssl/certs/server.key
+    csr_path: /etc/ssl/certs/server.csr
+    provider: selfsigned
+
+#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
+
+- name: restart nginx
+  service:
+    name: nginx
+    state: restarted
+
+- name: Insallation de la base MariaDB
+  apt:
+    name: 
+      - mariadb-server
+
+- name: Creation utilisateur 1 db
+  mysql_user:
+    name: "{{ user[0] }}"
+    password: "{{ pass[0] }}"
+    priv: '*.*:ALL'
+    state: present
+
+- name: Creation utilisateur 2 db
+  mysql_user:
+    name: "{{ user[1] }}"
+    password: "{{ pass[1] }}"
+    priv: '*.*:ALL'
+    state: present
+
+- name: Creation utilisateur 3 db
+  mysql_user:
+    name: "{{ user[2] }}"
+    password: "{{ pass[2] }}"
+    priv: '*.*:ALL'
+    state: present
\ No newline at end of file
diff --git a/roles/nginx/templates/lb.j2 b/roles/nginx/templates/lb.j2
new file mode 100644
index 0000000000000000000000000000000000000000..1ad4f7ecc7ce666d77bae84892622260351a5ac5
--- /dev/null
+++ b/roles/nginx/templates/lb.j2
@@ -0,0 +1,22 @@
+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;
+
+  ssl on;
+
+  ssl_certificate /etc/ssl/certs/server.crt;
+  ssl_certificate_key /etc/ssl/certs/server.key;
+
+  location / {
+    proxy_pass http://nginx-proxy;
+  }
+}