Files
ansible-mln/infra/playbook-haproxy.yml
T

128 lines
3.9 KiB
YAML

---
# Le certificat mln-uber.club n'est pas généré ici : il existe déjà sur prod-uber
# (utilisé par le conteneur waf du docker-compose). On le récupère et on le copie
# vers le load-balancer. Relancer ce playbook après chaque renouvellement du cert
# sur prod-uber pour resynchroniser HAProxy.
- name: Récupérer le certificat mln-uber.club depuis prod-uber
hosts: prod-uber
become: true
gather_facts: false
vars:
# À CONFIRMER : chemin réel du cert sur prod-uber (aucun playbook ne le dépose
# actuellement à cet endroit — à ajuster si différent).
app_cert_dir: "{{ docker_dir }}/certs"
local_cert_sync_dir: /tmp/mln-uber-cert-sync
tasks:
- name: Créer le dossier temporaire local de synchronisation
ansible.builtin.file:
path: "{{ local_cert_sync_dir }}"
state: directory
mode: "0700"
delegate_to: localhost
become: false
- name: Rapatrier fullchain.pem et privkey.pem
ansible.builtin.fetch:
src: "{{ app_cert_dir }}/{{ item }}"
dest: "{{ local_cert_sync_dir }}/{{ item }}"
flat: true
loop:
- fullchain.pem
- privkey.pem
- name: Restreindre les permissions locales de la clé privée
ansible.builtin.file:
path: "{{ local_cert_sync_dir }}/privkey.pem"
mode: "0600"
delegate_to: localhost
become: false
- name: Déploiement HAProxy (load-balancer)
hosts: load-balancer
become: true
gather_facts: true
vars:
haproxy_cert_dir: /etc/haproxy/certs
haproxy_cert_path: "{{ haproxy_cert_dir }}/{{ domain_name }}.pem"
local_cert_sync_dir: /tmp/mln-uber-cert-sync
tasks:
- name: Installer HAProxy
ansible.builtin.apt:
name: haproxy
state: present
update_cache: yes
- name: Créer le dossier des certificats HAProxy
ansible.builtin.file:
path: "{{ haproxy_cert_dir }}"
state: directory
owner: root
group: root
mode: "0750"
- name: Copier fullchain.pem et privkey.pem sur le load-balancer
ansible.builtin.copy:
src: "{{ local_cert_sync_dir }}/{{ item }}"
dest: "{{ haproxy_cert_dir }}/{{ item }}"
owner: root
group: root
mode: "0640"
loop:
- fullchain.pem
- privkey.pem
notify: reload haproxy
- name: Construire le certificat combiné pour HAProxy (fullchain + privkey)
ansible.builtin.shell: >
cat {{ haproxy_cert_dir }}/fullchain.pem
{{ haproxy_cert_dir }}/privkey.pem
> {{ haproxy_cert_path }}
notify: reload haproxy
- name: Restreindre les permissions du certificat combiné
ansible.builtin.file:
path: "{{ haproxy_cert_path }}"
owner: root
group: root
mode: "0640"
- name: Ouvrir le port HTTPS dans UFW
ansible.builtin.ufw:
rule: allow
port: "443"
proto: tcp
- name: Déployer la configuration HAProxy
ansible.builtin.template:
src: ../templates/haproxy.cfg.j2
dest: /etc/haproxy/haproxy.cfg
owner: root
group: root
mode: "0644"
validate: haproxy -c -f %s
notify: reload haproxy
- name: Démarrer et activer HAProxy
ansible.builtin.systemd:
name: haproxy
state: started
enabled: yes
- name: Nettoyer les fichiers temporaires locaux
ansible.builtin.file:
path: "{{ local_cert_sync_dir }}"
state: absent
delegate_to: localhost
become: false
handlers:
- name: reload haproxy
ansible.builtin.systemd:
name: haproxy
state: reloaded