Commit cb01e788 authored by Thibault's avatar Thibault
Browse files

ajout du repertoire du tp

parent 56ba2e21
## 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.
# -*- 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
[defaults]
remote_user=vagrant
[privilege_escalation]
become = true
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQCnmOJHPMiVedU3a4+LGnlVcdQtGhx93Qx3eaMb+SjfvSfeEHvnbVLh3TFTM6L2WzzXSB2G5BhtaRcMlXWCBmnxi0lO9J+NkynKmWlIx7MlTAQnJFuMVrtp7T5U2d5/ijRwB/H7k7eIJ04obt1plxCRJs71x0o12z1De9z1trh+c9YtAoHR7gbCXC/tiTa9bLDgkQpcTZM56dX6JDA+32nXcKsRRyPTKg1jaAW8T1CeTN0VQZhPhUVrdcxCgBtHNy0pYK2CkyTgHr0wFqCVfqZIzwrV+5JaeH0FmhpQdz1p8g7NVJX0clx1DyHPUonvmAn795iwZoNmcBL6x2ovtth/ thibault@Thibault
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 }
machine1
theApache
theLB
#!/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
sites:
- { 'nom_du_site': site1 , 'port': 81 }
- { 'nom_du_site': site2 , 'port': 82 }
default_site_directory: /var/www/
- 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
<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 : Installation des paquets communs
apt:
name: "{{ item }}"
loop:
- nmon
- htop
- tmux
- screen
\ No newline at end of file
- 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
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;
}
}
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment