Files
e-cosplay/ansible/playbook.yml
2025-07-17 11:29:45 +02:00

237 lines
9.2 KiB
YAML

# Fichier: install_php_83_symfony_pgsql.yml
- name: Deploy application
hosts: webservers # Cible les hôtes définis dans le groupe 'webservers' de votre inventaire
become: true # Nécessite des privilèges root pour exécuter les tâches
gather_facts: true # Utile pour obtenir des informations sur le système, comme l'OS
# Il est recommandé de définir les variables sensibles comme les mots de passe
# dans un fichier vault chiffré (ansible-vault).
vars:
db_name: "mainframe"
db_user: "mainframe"
db_password: "mainframe"
redis_password: "mainframe"
redis_port: "20100"
tasks:
- name: Installer le support ACL pour corriger les permissions de 'become_user'
# Le paquet 'acl' est nécessaire pour qu'Ansible puisse définir des permissions
# granulaires sur les fichiers temporaires lorsqu'il passe à un utilisateur non-root.
ansible.builtin.apt:
name: acl
state: present
update_cache: true
when: ansible_os_family == "Debian"
- name: Installation des dépendances pour le module Ansible PostgreSQL
# Installe python3-psycopg2, nécessaire pour que les modules Ansible puissent communiquer avec PostgreSQL.
ansible.builtin.apt:
name: python3-psycopg2
state: present
update_cache: true
when: ansible_os_family == "Debian"
- name: Installation de PHP 8.3 et PHP 8.3-FPM avec les dépendances
# Installe PHP 8.3, PHP-FPM et toutes les extensions nécessaires pour Symfony,
# ainsi que le support Redis, Imagemagick, FFmpeg et PostgreSQL.
ansible.builtin.apt:
name:
- php8.3
- php8.3-fpm
- php8.3-cli
- php8.3-common
- php8.3-mysql # Driver MySQL/MariaDB
- php8.3-pgsql # Support pour PostgreSQL
- php8.3-xml # Pour XML, SOAP, etc.
- php8.3-mbstring # Pour la manipulation de chaînes de caractères multi-octets
- php8.3-zip # Pour la manipulation des archives ZIP
- php8.3-intl # Pour l'internationalisation
- php8.3-gd # Pour la manipulation d'images (GD Library)
- php8.3-curl # Pour faire des requêtes HTTP
- php8.3-pdo # Pour les connexions à la base de données via PDO
- php8.3-opcache # Pour l'optimisation des performances de PHP
- php8.3-bcmath # Pour les fonctions mathématiques de précision arbitraire
- php8.3-redis # Support pour la base de données en mémoire Redis
- php8.3-imagick # Pour la manipulation d'images via ImageMagick
- ffmpeg # Outil en ligne de commande pour la manipulation audio/vidéo
state: present
when: ansible_os_family == "Debian"
- name: Démarrage et activation du service PHP 8.3 FPM
# S'assure que le service PHP 8.3 FPM est démarré et configuré pour démarrer au boot.
ansible.builtin.systemd:
name: php8.3-fpm
state: started
enabled: yes
when: ansible_os_family == "Debian"
- name: Créer le fichier .env.local avec les secrets de production
# Crée le fichier .env.local avec les variables d'environnement pour la production.
ansible.builtin.copy:
content: |
APP_ENV=prod
VITE_LOAD=1
DATABASE_URL="postgresql://{{ db_user }}:{{ db_password }}@127.0.0.1:5432/{{ db_name }}?serverVersion=16&charset=utf8"
REDIS_DSN="redis://{{ redis_password }}@127.0.0.1:{{ redis_port }}"
REDIS_URL="redis://{{ redis_password }}@127.0.0.1:{{ redis_port }}"
MESSENGER_TRANSPORT_DSN="redis://{{ redis_password }}@127.0.0.1:{{ redis_port }}/messages"
APP_SECRET=939bbc67038c2e2d1232d86fc605bf2f
dest: "{{ path }}/.env.local"
when: ansible_os_family == "Debian"
- name: Creates directory
ansible.builtin.file:
path: "{{path}}/var"
owner: www-data
group: www-data
mode: 0777
state: directory
- name: Creates directory log
ansible.builtin.file:
path: "{{path}}/var/log"
owner: www-data
group: www-data
mode: 0777
state: directory
- name: Creates directory log
ansible.builtin.file:
path: "{{path}}/public/media"
owner: www-data
group: www-data
mode: 0777
state: directory
- name: Exécuter 'composer install' dans le répertoire de l'application
# Installe les dépendances PHP de production.
ansible.builtin.command: composer install --no-dev --optimize-autoloader
become: false
args:
chdir: "{{ path }}" # La variable 'path' doit être définie dans votre inventaire ou en extra-vars.
when: ansible_os_family == "Debian"
- name: Exécuter bun install dans le répertoire de l application
ansible.builtin.command: bun install
become: false
args:
chdir: "{{ path }}"
when: ansible_os_family == "Debian"
- name: Exécuter bun build dans le répertoire de l application
ansible.builtin.command: bun run build
become: false
args:
chdir: "{{ path }}"
when: ansible_os_family == "Debian"
- name: Creates directory
ansible.builtin.file:
path: "{{path}}/var"
owner: www-data
group: www-data
mode: 0777
state: directory
- name: Creates directory log
ansible.builtin.file:
path: "{{path}}/var/log"
owner: www-data
group: www-data
mode: 0777
state: directory
- name: Creates directory log
ansible.builtin.file:
path: "{{path}}/public/media"
owner: www-data
group: www-data
mode: 0777
state: directory
- name: Supervisor config
ansible.builtin.template:
src: supervisor.j2
dest: "/etc/supervisor/conf.d/mainframe.conf"
mode: '0644'
- name: Reread Supervisor configuration
command: supervisorctl reread
- name: Update Supervisor (add/remove updated programs)
command: supervisorctl update
# --- Début de la section de purge Redis ---
- name: Purger la base de données Redis
# Exécute FLUSHALL pour vider toutes les clés de toutes les bases de données du serveur Redis.
# Utile pour s'assurer que le cache est propre après un déploiement.
ansible.builtin.command: "redis-cli -p {{ redis_port }} -a {{ redis_password }} FLUSHALL"
when: ansible_os_family == "Debian"
# --- Fin de la section de purge Redis ---
- name: Generate Caddy site configuration
ansible.builtin.template:
src: caddy.j2
dest: "/etc/caddy/sites/mainframe.conf"
mode: '0644'
- name: Reload Caddy to apply new configuration
systemd:
name: caddy
state: reloaded
enabled: yes
- name: Exécuter cache:clear dans le répertoire de l application
ansible.builtin.command: php bin/console cache:clear
become: false
args:
chdir: "{{ path }}"
when: ansible_os_family == "Debian"
- name: Creates directory media
ansible.builtin.file:
path: "{{path}}/public/media"
owner: www-data
group: www-data
mode: 0777
state: directory
- name: Change ownership of /var/www/mainframe/app/public/media
.builtin.file:
path: /var/www/mainframe/app/public/media
owner: bot
group: www-data
recurse: yes
state: directory
- name: Exécuter liip:imagine:cache:remove dans le répertoire de l application
ansible.builtin.command: php bin/console liip:imagine:cache:remove
become: false
args:
chdir: "{{ path }}"
- name: Change ownership of /var/www/mainframe/app/public/media
.builtin.file:
path: /var/www/mainframe/app/public/media
owner: www-data
group: www-data
recurse: yes
state: directory
when: ansible_os_family == "Debian"
- name: Creates directory
ansible.builtin.file:
path: "{{path}}/var"
owner: www-data
group: www-data
mode: 0777
state: directory
- name: Creates directory log
ansible.builtin.file:
path: "{{path}}/var/log"
owner: www-data
group: www-data
mode: 0777
state: directory
- name: Creates directory log
ansible.builtin.file:
path: "{{path}}/public/media"
owner: www-data
group: www-data
mode: 0777
state: directory