Ansible pour nginx

Playbook

Dans le playbook, voici les commandes utiles au fonctionnement de nginx. Nous avons trois roles.

- name : copie de la page web
  hosts: webservers
  user: root
  roles:
    - page_web

- name : certif
  hosts: webservers
  become: yes
  roles:
    - certificates

- name : nginx
  hosts: webservers
  become: yes
  roles:
    - nginx_https

Rôles : page_web

L’objectif de ce rôle est de copier la page html contenant notre site TOP GUN. Il commence par vérifier si le dossier de réception existe (#1). S’il n’existe pas, il le crée (#2) après quoi il copie la page index.html dedans (#3). La dernière étape fut de copier les pages d’erreur personnelle comme 404.html par exemple. Cela nous sera utile pour réduire l’emprunte du site.

# 1
- name: verification si le dossie /var/www/html/pageweb/ exite
  stat:
    path: /var/www/html/pageweb/
  register: stat_result

# 2
- name: creation du dossier si non existant
  ansible.builtin.file:
    path: /var/www/html/pageweb/
    state: directory
    owner: root
    group: root
  when:  not stat_result.stat.exists

# 3
- name: copie de la page index.html
  template:
    src: index.html.j2
    dest: /var/www/html/pageweb/index.html
    owner: root
    group: root
    mode: 0644

# 4
- name: copie des erreurs perso
  ansible.builtin.copy:
    src: errors/
    dest: /var/www/html/pageweb/
    owner: root
    group: root
    mode: 0644

Rôles : certificates

Pour commencer nous copions les fichiers .crt et .key qui sont des certificats créés par mini-pki. Nous les avons ajoutés manuellement dans l’architecture d’ansible. Dans une situation professionnelle, un système permettant de faire des demandes directement à la CA. Cela serait plus sécurisé et éviterait de transporter des fichiers manuellement. La troisième étape est l’ajout de la clé publique de la CA, nous en aurons besoin pour l’authentification mutuelle. Finalement, nous générons la clé dhparam.pem qui nous servira pour augmenter la sécurité de notre site.

# 1
- name: copie des fichiers d'indentifiaction nginx.crt
  ansible.builtin.copy:
    src: nginx.crt
    dest: /etc/ssl/nginx.crt
    owner: root
    group: root
    mode: 0644

# 2
- name: copie des fichiers nginx.key
  ansible.builtin.copy:
    src: nginx.key
    dest: /etc/ssl/nginx.key
    owner: root
    group: root
    mode: 0644

# 3
- name: copie des fichiers mutual-authent
  ansible.builtin.copy:
    src: ca.crt
    dest: /etc/ssl/ca.crt
    owner: root
    group: root
    mode: 0644

# 4
- name : dhparam
  community.crypto.openssl_dhparam:
    path: /etc/ssl/dhparam.pem
    size: 2048
    force: yes

Rôles : nginx_https

Ce dernier rôle a pour objectif d’installer nginx pour commencer, après quoi nous allons supprimer les fichier default_vhost qui ne nous servent à rien et vont entrer en conflit avec nos fichiers.

Par la suite, nous installons notre propre fichier de configuration de nginx et créons un lien de celui-ci dans un autre dossier. Pour finir, nous redémarrons nginx.

# 1
- name: install nginx
  apt:
    name: nginx, nginx-extras
    state: present
    cache_valid_time: 3600
    update_cache: yes

# 2
- name: remove default file
  file:
    path: "{{ item }}"
    state: absent
  with_items:
  - "/etc/nginx/sites-available/default_vhost.conf"
  - "/etc/nginx/sites-enabled/default_vhost.conf"

# 3
- name: install vhost
  template:
    src: default_vhost.conf.j2
    dest: /etc/nginx/sites-available/default_vhost.conf
    owner: root
    group: root
    mode: 0644
  notify: restart nginx

# 4
- name: création du lien symbolique
  file:
    src: /etc/nginx/sites-available/default_vhost.conf
    dest: /etc/nginx/sites-enabled/default_vhost.conf
    state: link

- name: start nginx
  systemd:
    name: nginx
    state: started

- name: reload nginx
  systemd:
    name: nginx
    state: reloaded

- name: Flush handlers
  meta: flush_handlers