383 lines
16 KiB
YAML
383 lines
16 KiB
YAML
---
|
|
# ============================================
|
|
# PostgreSQL Installation (vm-postgres uniquement)
|
|
# ============================================
|
|
- name: Installation et configuration de PostgreSQL
|
|
hosts: uber-stup
|
|
become: true
|
|
gather_facts: true
|
|
|
|
tasks:
|
|
# ============================================================
|
|
# Dépendances requises
|
|
# ============================================================
|
|
- name: Installer les dépendances pour le dépôt APT
|
|
ansible.builtin.apt:
|
|
name:
|
|
- gnupg2
|
|
- curl
|
|
- ca-certificates
|
|
- lsb-release
|
|
- python3-psycopg2
|
|
- acl
|
|
state: present
|
|
update_cache: yes
|
|
|
|
# ============================================================
|
|
# Ajout du dépôt officiel PostgreSQL
|
|
# ============================================================
|
|
- name: Ajouter la clé GPG du dépôt PostgreSQL
|
|
ansible.builtin.apt_key:
|
|
url: https://www.postgresql.org/media/keys/ACCC4CF8.asc
|
|
state: present
|
|
|
|
- name: Ajouter le dépôt PostgreSQL 16
|
|
ansible.builtin.apt_repository:
|
|
repo: "deb http://apt.postgresql.org/pub/repos/apt {{ ansible_distribution_release }}-pgdg main"
|
|
state: present
|
|
filename: pgdg
|
|
|
|
# ============================================================
|
|
# Installation PostgreSQL 16
|
|
# ============================================================
|
|
- name: Installer PostgreSQL 16
|
|
ansible.builtin.apt:
|
|
name:
|
|
- "postgresql-{{ pg_version }}"
|
|
- "postgresql-client-{{ pg_version }}"
|
|
- "postgresql-contrib-{{ pg_version }}"
|
|
state: present
|
|
update_cache: yes
|
|
|
|
- name: Démarrer et activer PostgreSQL
|
|
ansible.builtin.systemd:
|
|
name: postgresql
|
|
state: started
|
|
enabled: yes
|
|
|
|
# ============================================================
|
|
# Configuration PostgreSQL
|
|
# ============================================================
|
|
- name: Configurer l'écoute sur localhost
|
|
ansible.builtin.lineinfile:
|
|
path: "/etc/postgresql/{{ pg_version }}/main/postgresql.conf"
|
|
regexp: "^#?listen_addresses"
|
|
line: "listen_addresses = 'localhost'"
|
|
notify: Restart postgresql
|
|
|
|
- name: Configurer le port
|
|
ansible.builtin.lineinfile:
|
|
path: "/etc/postgresql/{{ pg_version }}/main/postgresql.conf"
|
|
regexp: "^#?port"
|
|
line: "port = {{ db_port }}"
|
|
notify: Restart postgresql
|
|
|
|
# ============================================================
|
|
# Locale requise
|
|
# ============================================================
|
|
- name: Générer la locale fr_FR.UTF-8
|
|
ansible.builtin.command: locale-gen fr_FR.UTF-8
|
|
register: locale_gen
|
|
changed_when: "'Generation complete' in locale_gen.stdout"
|
|
|
|
- name: Mettre à jour les locales
|
|
ansible.builtin.command: update-locale
|
|
when: locale_gen.changed
|
|
|
|
# ============================================================
|
|
# Création de la base de données et configuration utilisateur
|
|
# ============================================================
|
|
- name: Définir le mot de passe de l'utilisateur postgres
|
|
become_user: postgres
|
|
ansible.builtin.postgresql_user:
|
|
name: "{{ db_user }}"
|
|
password: "{{ db_password }}"
|
|
state: present
|
|
|
|
- name: Vérifier si la base de données existe
|
|
become_user: postgres
|
|
ansible.builtin.command: psql -tAc "SELECT 1 FROM pg_database WHERE datname='{{ db_name }}'"
|
|
register: db_exists
|
|
changed_when: false
|
|
|
|
- name: Créer la base de données avec ICU
|
|
become_user: postgres
|
|
ansible.builtin.command: >
|
|
psql -c "CREATE DATABASE {{ db_name }}
|
|
OWNER {{ db_user }}
|
|
ENCODING 'UTF8'
|
|
LOCALE_PROVIDER icu
|
|
ICU_LOCALE 'fr-FR'
|
|
TEMPLATE template0"
|
|
when: db_exists.stdout != "1"
|
|
|
|
- name: Accorder tous les privilèges sur la base
|
|
become_user: postgres
|
|
ansible.builtin.postgresql_privs:
|
|
db: "{{ db_name }}"
|
|
role: "{{ db_user }}"
|
|
type: database
|
|
privs: ALL
|
|
state: present
|
|
|
|
# ============================================================
|
|
# Données initiales - corrections d'adresses
|
|
# ============================================================
|
|
- name: Insérer les corrections d'adresses
|
|
become_user: postgres
|
|
ansible.builtin.postgresql_query:
|
|
db: "{{ db_name }}"
|
|
query: |
|
|
INSERT INTO adresse_correction (invalid_address, correct_address) VALUES
|
|
('6 Place Alfred Lallié 44000 Nantes', '13 Rue Saint-Rogatien 44000 Nantes'),
|
|
('26 boulevard Vincent gâche 44200', '62 Rue des Français Libres 44200'),
|
|
('41 quai Malakoff 44000', '41 rue du pré Gauchet 44000'),
|
|
('au 6 rue du Rhône 44100', '106 rue du bois Hardy 44100'),
|
|
('10 allée de l''île gloriette 44000', '8 rue Deurbroucq 44000'),
|
|
('1 Ter Boulevard de Launay 44100', '5 Rue Lavoisier 44100'),
|
|
('6 Boulevard de la prairie au duc 44200', '10 Rue Alain Barbe Torte 44200'),
|
|
('4 rue de mauves , 44470 thouaré sur Loire', '4 Rue de la Halbarderie 44470 Thouaré-sur-Loire'),
|
|
('26 rue Louis blanc, 44200 Nantes', '6 Rue de Hercé 44200 Nantes'),
|
|
('4 rue la tour d''Auvergne 44200 nantes', '6 Rue de Hercé 44200 Nantes'),
|
|
('12 rue d''Orléans 44000', '10 rue de l''industrie 44000'),
|
|
('3 rue Bertrand Geslin 44000 Nantes', '10 Rue de Sévigné 44000 Nantes'),
|
|
('33 boulevard de doulon 44300', '3 Avenue du Forgeron 44300 Nantes'),
|
|
('2 rue Stanislas Baudry 44000 Nantes', '9 Rue de Richebourg 44000 Nantes'),
|
|
('8 Place Saint-Pierre, 44000 Nantes', '2 Rue Saint-Denis 44000 Nantes'),
|
|
('20 boulevard du petit port 44300', '3 Rue du Transvaal 44300 Nantes'),
|
|
('5 cours Sully 44000 Nantes', '75 Rue Préfet Bonnefoy 44000'),
|
|
('50 rue Paul Bellamy 44000', '2 rue du docteur Heurteaux 44000'),
|
|
('33 rue de la petite sensive 44300', '8 Rue du Docteur Chenantais 44300'),
|
|
('45 rue Louis guiotton 44300 Nantes', '59 Rue de Nancy 44300 Nantes'),
|
|
('6 rue Meuris 44000 Nantes', '3 Rue Daubenton 44100 Nantes'),
|
|
('26 rue Félix Faure 44000', '12 rue bonaparte 44000'),
|
|
('1 rue Charles Dullin 44100 nantes', '12 Avenue de l''Églantine 44800 Saint-Herblain'),
|
|
('16 rue Anatole de monzie 44200', '1 Rue Georges Leygues 44200 Nantes'),
|
|
('52 boulevard de l''Estuaire 44200', '1 Rue Ruth First 44200 Nantes'),
|
|
('186 Route de Saint-Joseph 44300 Nantes', 'Rue de Pontecorvo 44300 Nantes'),
|
|
('16 Rue Jules Launey 44100 Nantes', '5 Chemin du Pressoir Chênaie 44100 Nantes'),
|
|
('1 rue maréchal Lyautey 44000', '9 rue Louis Mékarski 44000'),
|
|
('74 boulevard de la prairie au duc 44200', '7 Rue René Siegfried 44200'),
|
|
('1 impasse du baut 44300 Nantes', '8 Avenue d''Assise 44300 Nantes'),
|
|
('5 rue moquechien, 44000 Nantes', '4 Rue Adolphe Moitié 44000 Nantes'),
|
|
('21 chaussée de la madeleine 44000', '4 bis Rue Perrault 44000 Nantes'),
|
|
('31 boulevard Michelet 44000', '26 Rue de la Haute Forêt 44000 Nantes'),
|
|
('95 Boulevard longchamp 44300', '7 Petite Avenue de Longchamp 44300'),
|
|
('7 Quai Marcel Boissard, 44400 Rezé', '6 Rue Jean Jouneau 44400 Rezé'),
|
|
('43 avenue de la libération 44400', '10 rue de l''Erdronnière 44400'),
|
|
('165 route de rennes 44700 orvault', '5 Rue de l''Ascension 44700 Orvault'),
|
|
('17rue yves bodiguel 44000', '8 Rue Frédureau 44000 Nantes'),
|
|
('176 boulevard Jules verne 44300', '44 Rue des Platanes 44300 Nantes'),
|
|
('133 Boulevard Jules Verne 44300', '28 Rue Moriceau Thébault 44300'),
|
|
('53 Boulevard Jules Verne 44300', '66 Rue de la Moisdonnière 44300'),
|
|
('7 chaussé de la madeleine, 44000', '3 Rue Perrault 44000 Nantes'),
|
|
('LA CHEVROLIÈRE', '12 Rue des Ajoncs 44400 Rezé'),
|
|
('9 rue Delattre de tassigny 44000 nantes', '1 Rue des Cadeniers 44000 Nantes'),
|
|
('14 place de l''Oratoire 44000 Nantes', '2 Rue Élie Delaunay 44000 Nantes'),
|
|
('19 allée Baco, 44000 Nantes', '23 Rue Crucy 44000 Nantes'),
|
|
('21bd babin chevaye 44200', '7 Rue de Hercé 44200 Nantes'),
|
|
('49 boulevard dalby 44000', '51 Rue de la Ville en Pierre 44000'),
|
|
('96 route de Vannes 44100', '14 Avenue des Coucous 44300'),
|
|
('1 rue du Luxembourg 44000 Nantes', '5 Rue de l''Indre 44000 Nantes'),
|
|
('3 rue de bretagne 44880 Sautron', '9 Rue de Flore 44880 Sautron'),
|
|
('42 rue paul bellamy 44000 nantes', '5 Rue de Bouillé 44000 Nantes'),
|
|
('125 Rue Paul Bellamy 44000 Nantes', '14 Rue Anatole le Braz 44000 Nantes'),
|
|
('214 Rue Paul Bellamy 44000 Nantes', '17 Rue de la Saulzinière 44000 Nantes'),
|
|
('49 Boulevard Robert Schuman 44300 Nantes', '47 Rue Georges Bizot 44300 Nantes'),
|
|
('142 Boulevard Robert Schuman 44300', '10 Rue St-Mihiel 44300 Nantes'),
|
|
('23 route de la chapelle sur erdre 44300', '14 Rue de la Boulonnerie 44300 Nantes'),
|
|
('27 Rue Pierre Blard 44800 Saint-Herblain', '2 Rue Louis Boutin 44800 Saint-Herblain'),
|
|
('109 Boulevard Ernest Dalby 44000 Nantes', '53 bis rue de la ville en pierre 44000'),
|
|
('13 rue pitre chevalier 44000', '10 Rue Jean-Émile Laboureur 44000'),
|
|
('Rue lesage - 44000 - Nantes', '4 rue Maurice Sibille 44000'),
|
|
('86 Rue de la Bourgeonnière 44300', '6 Avenue de l''Alverne 44300'),
|
|
('8 boulevard Émile romanet 44100', '33 Route de St-Herblain 44100 Nantes')
|
|
ON CONFLICT (invalid_address) DO NOTHING;
|
|
|
|
# ============================================================
|
|
# Authentification pg_hba.conf
|
|
# ============================================================
|
|
- name: Configurer l'authentification md5 pour les connexions locales
|
|
ansible.builtin.postgresql_pg_hba:
|
|
dest: "/etc/postgresql/{{ pg_version }}/main/pg_hba.conf"
|
|
contype: host
|
|
databases: "{{ db_name }}"
|
|
users: "{{ db_user }}"
|
|
source: "127.0.0.1/32"
|
|
method: md5
|
|
notify: Restart postgresql
|
|
|
|
- name: Configurer l'authentification md5 pour IPv6 local
|
|
ansible.builtin.postgresql_pg_hba:
|
|
dest: "/etc/postgresql/{{ pg_version }}/main/pg_hba.conf"
|
|
contype: host
|
|
databases: "{{ db_name }}"
|
|
users: "{{ db_user }}"
|
|
source: "::1/128"
|
|
method: md5
|
|
notify: Restart postgresql
|
|
|
|
# ============================================================
|
|
# Vérification
|
|
# ============================================================
|
|
- name: Vérifier la version de PostgreSQL
|
|
become_user: postgres
|
|
ansible.builtin.command: psql --version
|
|
register: pg_version_check
|
|
changed_when: false
|
|
|
|
- name: Afficher la version
|
|
ansible.builtin.debug:
|
|
msg: "{{ pg_version_check.stdout }}"
|
|
|
|
- name: Vérifier que la base existe
|
|
become_user: postgres
|
|
ansible.builtin.command: psql -lqt
|
|
register: pg_databases
|
|
changed_when: false
|
|
|
|
- name: Afficher les bases de données
|
|
ansible.builtin.debug:
|
|
msg: "{{ pg_databases.stdout_lines }}"
|
|
|
|
handlers:
|
|
- name: Restart postgresql
|
|
ansible.builtin.systemd:
|
|
name: postgresql
|
|
state: restarted
|
|
|
|
# ============================================
|
|
# Redis Installation (vm-redis uniquement)
|
|
# ============================================
|
|
- name: Installation et configuration de Redis
|
|
hosts: uber-stup
|
|
become: true
|
|
gather_facts: true
|
|
|
|
tasks:
|
|
- name: Installer Redis
|
|
apt:
|
|
name:
|
|
- redis-server
|
|
- python3-redis
|
|
state: present
|
|
update_cache: yes
|
|
|
|
- name: Créer le répertoire de backup Redis
|
|
file:
|
|
path: /var/lib/redis/backup
|
|
state: directory
|
|
owner: redis
|
|
group: redis
|
|
mode: "0755"
|
|
|
|
- name: Configurer Redis - bind address (accepter connexions réseau)
|
|
lineinfile:
|
|
path: /etc/redis/redis.conf
|
|
regexp: "^bind"
|
|
line: "bind 127.0.0.1 192.168.1.62"
|
|
state: present
|
|
notify: Redémarrer Redis
|
|
|
|
- name: Configurer Redis - port
|
|
lineinfile:
|
|
path: /etc/redis/redis.conf
|
|
regexp: "^port"
|
|
line: "port {{ redis_port }}"
|
|
state: present
|
|
notify: Redémarrer Redis
|
|
|
|
- name: Configurer Redis - maxmemory
|
|
lineinfile:
|
|
path: /etc/redis/redis.conf
|
|
regexp: "^# ?maxmemory"
|
|
line: "maxmemory {{ redis_maxmemory }}"
|
|
state: present
|
|
notify: Redémarrer Redis
|
|
|
|
- name: Configurer Redis - maxmemory-policy
|
|
lineinfile:
|
|
path: /etc/redis/redis.conf
|
|
regexp: "^# ?maxmemory-policy"
|
|
line: "maxmemory-policy {{ redis_maxmemory_policy }}"
|
|
state: present
|
|
notify: Redémarrer Redis
|
|
|
|
- name: Configurer Redis - requirepass
|
|
lineinfile:
|
|
path: /etc/redis/redis.conf
|
|
regexp: "^# ?requirepass"
|
|
line: "requirepass {{ redis_password }}"
|
|
state: present
|
|
notify: Redémarrer Redis
|
|
|
|
- name: Activer AOF (Append Only File) pour Redis
|
|
lineinfile:
|
|
path: /etc/redis/redis.conf
|
|
regexp: "^appendonly"
|
|
line: "appendonly yes"
|
|
state: present
|
|
notify: Redémarrer Redis
|
|
|
|
- name: Configurer la fréquence de sync AOF
|
|
lineinfile:
|
|
path: /etc/redis/redis.conf
|
|
regexp: "^# ?appendfsync"
|
|
line: "appendfsync everysec"
|
|
state: present
|
|
notify: Redémarrer Redis
|
|
|
|
- name: Activer la persistance RDB (snapshots)
|
|
blockinfile:
|
|
path: /etc/redis/redis.conf
|
|
block: |
|
|
save 900 1
|
|
save 300 10
|
|
save 60 10000
|
|
marker: "# {mark} ANSIBLE MANAGED RDB PERSISTENCE"
|
|
notify: Redémarrer Redis
|
|
|
|
- name: Configurer le nom du fichier AOF
|
|
lineinfile:
|
|
path: /etc/redis/redis.conf
|
|
regexp: "^appendfilename"
|
|
line: 'appendfilename "appendonly.aof"'
|
|
state: present
|
|
notify: Redémarrer Redis
|
|
|
|
- name: Désactiver le mode protégé Redis
|
|
lineinfile:
|
|
path: /etc/redis/redis.conf
|
|
regexp: "^protected-mode"
|
|
line: "protected-mode no"
|
|
state: present
|
|
notify: Redémarrer Redis
|
|
|
|
- name: Configurer le répertoire de travail Redis
|
|
lineinfile:
|
|
path: /etc/redis/redis.conf
|
|
regexp: "^dir"
|
|
line: "dir /var/lib/redis"
|
|
state: present
|
|
notify: Redémarrer Redis
|
|
|
|
- name: Définir le niveau de log
|
|
lineinfile:
|
|
path: /etc/redis/redis.conf
|
|
regexp: "^loglevel"
|
|
line: "loglevel notice"
|
|
state: present
|
|
notify: Redémarrer Redis
|
|
|
|
- name: S'assurer que Redis est démarré
|
|
systemd:
|
|
name: redis-server
|
|
state: started
|
|
enabled: yes
|
|
|
|
handlers:
|
|
- name: Redémarrer Redis
|
|
systemd:
|
|
name: redis-server
|
|
state: restarted
|