From cb01e7889d611509659dc8c6794c8e5193f3b568 Mon Sep 17 00:00:00 2001
From: Thibault <thibault@Thibault.home>
Date: Sun, 14 Mar 2021 02:03:24 +0100
Subject: [PATCH] ajout du repertoire du tp

---
 TP.md                           | 56 ++++++++++++++++++++++++++
 Vagrantfile                     | 37 ++++++++++++++++++
 ansible.cfg                     |  5 +++
 cle_publique                    |  1 +
 inventory                       | 24 ++++++++++++
 play.retry                      |  3 ++
 play.yml                        | 13 +++++++
 roles/apache2/defaults/main.yml |  5 +++
 roles/apache2/tasks/main.yml    | 38 ++++++++++++++++++
 roles/apache2/templates/site.j2 |  7 ++++
 roles/commun/tasks/main.yml     |  8 ++++
 roles/nginx/tasks/main.yml      | 69 +++++++++++++++++++++++++++++++++
 roles/nginx/templates/lb.j2     | 22 +++++++++++
 13 files changed, 288 insertions(+)
 create mode 100644 TP.md
 create mode 100644 Vagrantfile
 create mode 100644 ansible.cfg
 create mode 100644 cle_publique
 create mode 100644 inventory
 create mode 100644 play.retry
 create mode 100755 play.yml
 create mode 100644 roles/apache2/defaults/main.yml
 create mode 100644 roles/apache2/tasks/main.yml
 create mode 100644 roles/apache2/templates/site.j2
 create mode 100644 roles/commun/tasks/main.yml
 create mode 100644 roles/nginx/tasks/main.yml
 create mode 100644 roles/nginx/templates/lb.j2

diff --git a/TP.md b/TP.md
new file mode 100644
index 0000000..5984cb8
--- /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 0000000..685bf06
--- /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 0000000..d69f9fa
--- /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 0000000..0179a50
--- /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 0000000..62fa1e5
--- /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 0000000..bb923f6
--- /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 0000000..a0b2e71
--- /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 0000000..315db63
--- /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 0000000..d566dfc
--- /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 0000000..3588512
--- /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 0000000..49fac7e
--- /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 0000000..16f7d5a
--- /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 0000000..1ad4f7e
--- /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;
+  }
+}
-- 
GitLab