Paillasse/ansible/roles/portail/tasks/03-code.yml
Adam Belkacemi 30e14b1c54 ajoute le portail Laravel : connexion prof/élève, session unique, gestion de classe, salle d'attente
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-10-08 02:01:58 +02:00

113 lines
3.5 KiB
YAML

---
- name: créer le dossier de l'application
ansible.builtin.file:
path: "{{ portail_dossier_app }}"
state: directory
owner: "{{ ansible_user }}"
group: "{{ ansible_user }}"
mode: "0755"
# storage/ et bootstrap/cache/ sont de l'état et du cache runtime, jamais du
# code : on ne les synchronise jamais depuis le Mac (un rsync --delete les
# effacerait sinon, y compris storage/app/ où atterriront plus tard les
# travaux d'élèves). On crée leur structure une fois, puis on laisse
# www-data (PHP-FPM) les posséder en continu.
- name: créer la structure storage/ et bootstrap/cache/ (une seule fois)
ansible.builtin.file:
path: "{{ portail_dossier_app }}/{{ item }}"
state: directory
owner: www-data
group: www-data
mode: "0775"
loop:
- storage/app/public
- storage/framework/cache/data
- storage/framework/sessions
- storage/framework/views
- storage/logs
- bootstrap/cache
- name: synchroniser le code du portail (sans vendor/node_modules/.env/storage)
become: false
ansible.posix.synchronize:
src: "{{ playbook_dir }}/../portail/"
dest: "{{ portail_dossier_app }}/"
delete: true
rsync_opts:
- "--exclude=/vendor"
- "--exclude=/node_modules"
- "--exclude=/.env"
- "--exclude=/database/database.sqlite"
- "--exclude=/storage"
- "--exclude=/bootstrap/cache"
- "--exclude=/public/build"
- "--exclude=/public/hot"
- "--exclude=/.git"
register: portail_code_synchronise
- name: installer les dépendances PHP (composer)
ansible.builtin.command:
cmd: composer install --no-dev --optimize-autoloader --no-interaction
args:
chdir: "{{ portail_dossier_app }}"
environment:
COMPOSER_ALLOW_SUPERUSER: "1"
register: portail_composer_install_app
changed_when: "'Nothing to install' not in portail_composer_install_app.stdout"
- name: vérifier si .env existe déjà
ansible.builtin.stat:
path: "{{ portail_dossier_app }}/.env"
register: portail_env_stat
- name: générer une clé d'application (une seule fois)
ansible.builtin.command:
cmd: php artisan key:generate --show
args:
chdir: "{{ portail_dossier_app }}"
register: portail_app_key_generee
when: not portail_env_stat.stat.exists
changed_when: true
- name: déployer .env de production (une seule fois, jamais réécrit ensuite)
ansible.builtin.template:
src: env.production.j2
dest: "{{ portail_dossier_app }}/.env"
owner: "{{ ansible_user }}"
group: www-data
mode: "0640"
vars:
portail_app_key: "{{ portail_app_key_generee.stdout }}"
portail_app_url: "http://{{ ansible_host }}"
when: not portail_env_stat.stat.exists
- name: installer les dépendances JS (npm)
ansible.builtin.command:
cmd: npm ci
args:
chdir: "{{ portail_dossier_app }}"
register: portail_npm_ci
changed_when: true
- name: compiler les assets (vite build)
ansible.builtin.command:
cmd: npm run build
args:
chdir: "{{ portail_dossier_app }}"
register: portail_npm_build
changed_when: true
- name: appliquer les migrations
ansible.builtin.command:
cmd: php artisan migrate --force
args:
chdir: "{{ portail_dossier_app }}"
register: portail_migrate
changed_when: "'Nothing to migrate' not in portail_migrate.stdout"
- name: mettre en cache la configuration et les routes
ansible.builtin.shell:
cmd: php artisan config:cache && php artisan route:cache && php artisan view:cache
args:
chdir: "{{ portail_dossier_app }}"
changed_when: true