--- - name: Paquets (python venv/pip, git, nginx) ansible.builtin.apt: name: - python3-venv - python3-pip - git - nginx state: present update_cache: true cache_valid_time: 3600 - name: Utilisateur de service des webapps ansible.builtin.user: name: "{{ serveur_web_dorsal_utilisateur }}" system: true home: "{{ serveur_web_dorsal_racine }}" shell: /usr/sbin/nologin create_home: false - name: Creer la racine des webapps ansible.builtin.file: path: "{{ serveur_web_dorsal_racine }}" state: directory owner: root group: root mode: "0755" - name: Cloner / mettre a jour chaque app (clone superficiel) ansible.builtin.git: repo: "{{ item.depot }}" dest: "{{ serveur_web_dorsal_racine }}/{{ item.nom }}" version: "{{ item.branche | default('main') }}" depth: 1 force: true loop: "{{ serveur_web_dorsal_apps }}" loop_control: label: "{{ item.nom }}" notify: Redemarrer les webapps - name: Creer le venv + installer les dependances de chaque app ansible.builtin.pip: requirements: "{{ serveur_web_dorsal_racine }}/{{ item.nom }}/{{ item.requirements | default('requirements.txt') }}" virtualenv: "{{ serveur_web_dorsal_racine }}/{{ item.nom }}/.venv" virtualenv_command: python3 -m venv loop: "{{ serveur_web_dorsal_apps }}" loop_control: label: "{{ item.nom }}" notify: Redemarrer les webapps - name: Repertoire d'etat persistant (apps avec data_dir) ansible.builtin.file: path: "{{ item.data_dir }}" state: directory owner: "{{ serveur_web_dorsal_utilisateur }}" group: "{{ serveur_web_dorsal_utilisateur }}" mode: "0750" loop: "{{ serveur_web_dorsal_apps }}" loop_control: label: "{{ item.nom }}" when: item.data_dir is defined # Le code reste possede par root (lecture seule pour l'app = plus sur, et git # reste idempotent : pas de "propriete douteuse" au pull). L'etat va dans data_dir. - name: Deployer l'unite systemd de chaque app ansible.builtin.template: src: app.service.j2 dest: "/etc/systemd/system/{{ item.nom }}.service" owner: root group: root mode: "0644" loop: "{{ serveur_web_dorsal_apps }}" loop_control: label: "{{ item.nom }}" notify: Redemarrer les webapps - name: Deployer le vhost proxy local de chaque app ansible.builtin.template: src: proxy.conf.j2 dest: "/etc/nginx/sites-available/{{ item.nom }}" owner: root group: root mode: "0644" loop: "{{ serveur_web_dorsal_apps }}" loop_control: label: "{{ item.nom }}" notify: Recharger nginx serveur_web_dorsal - name: Activer le vhost proxy de chaque app ansible.builtin.file: src: "/etc/nginx/sites-available/{{ item.nom }}" dest: "/etc/nginx/sites-enabled/{{ item.nom }}" state: link loop: "{{ serveur_web_dorsal_apps }}" loop_control: label: "{{ item.nom }}" notify: Recharger nginx serveur_web_dorsal - name: Activer et demarrer chaque webapp ansible.builtin.systemd: name: "{{ item.nom }}" enabled: true state: started daemon_reload: true loop: "{{ serveur_web_dorsal_apps }}" loop_control: label: "{{ item.nom }}" when: not ansible_check_mode