hello ,
i’ve this inventory.ini :
[servers]
ubuntu ansible_host=xx.xx.xx.xx ansible_user=alexandre ansible_become_method=su ansible_become_user=root
[all:vars]
ansible_python_interpreter=/usr/bin/python3
i 've this playbook :
---
- hosts: servers
vars_files:
- ./ansible/group_vars/all/vault.yml
vars:
symfony_root: /var/www/monSiteWeb
local_project_root: "/home/alexandre/Documents/monSiteWeb"
nvm_dir: "/usr/local/nvm"
nvm_version: "v0.40.3"
node_version: "24.7.0"
composer_path: "/usr/local/bin/composer" # Chemin fixe car vous l'avez confirmé
tasks:
- debug:
msg: "Ansible version: {{ ansible_version.full }}"
# === 1. Vérification de Composer (déjà installé selon vous) ===
- name: Vérifier que Composer est accessible
command: "{{ composer_path }} --version --no-interaction"
register: composer_check
ignore_errors: yes
changed_when: false
environment:
COMPOSER_ALLOW_SUPERUSER: "1" # Autorise l'exécution en root
COMPOSER_NO_INTERACTION: "1" # Désactive les prompts
- name: Échouer si Composer n'est pas disponible
fail:
msg: "Composer n'est pas installé dans {{ composer_path }}. Veuillez l'installer manuellement."
when: composer_check.rc != 0
# === 2. Installation de NVM et Node.js ===
- name: Créer un répertoire global pour NVM
file:
path: "{{ nvm_dir }}"
state: directory
owner: root
group: root
mode: '0755'
- name: Télécharger et installer nvm globalement
shell: |
curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/{{ nvm_version }}/install.sh | bash
args:
creates: "{{ nvm_dir }}/nvm.sh"
environment:
NVM_DIR: "{{ nvm_dir }}"
PROFILE: "/dev/null"
- name: Installer Node.js avec NVM
shell: |
export NVM_DIR="{{ nvm_dir }}"
[ -s "$NVM_DIR/nvm.sh" ] && \. "$NVM_DIR/nvm.sh"
nvm install {{ node_version }}
nvm use {{ node_version }}
environment:
NVM_DIR: "{{ nvm_dir }}"
PATH: "{{ nvm_dir }}/versions/node/v{{ node_version }}/bin:{{ ansible_env.PATH }}"
# === 3. Préparation du projet ===
- name: Créer le répertoire du projet avec les bonnes permissions
file:
path: "{{ symfony_root }}"
state: directory
owner: www-data
group: www-data
mode: '0755'
- name: Créer les répertoires nécessaires pour Symfony
block:
- name: Créer var/log
file:
path: "{{ symfony_root }}/var/log"
state: directory
owner: www-data
group: www-data
mode: '0775'
- name: Créer var/cache
file:
path: "{{ symfony_root }}/var/cache"
state: directory
owner: www-data
group: www-data
mode: '0775'
- name: Créer .npm pour www-data
file:
path: "/home/www-data/.npm"
state: directory
owner: www-data
group: www-data
mode: '0755'
- name: Synchroniser les fichiers du projet
synchronize:
src: "{{ local_project_root }}/"
dest: "{{ symfony_root }}"
delete: yes
mode: push
compress: true
rsync_opts:
- "--iconv=utf-8,utf-8"
- "--exclude=.git"
- "--exclude=*.sh"
- "--exclude=/vendor"
- "--exclude=/ansible"
- "--exclude=/node_modules"
- "--exclude=var/cache/*"
- "--exclude=var/log/*"
- "--exclude=.env.local"
- "--exclude=package-lock.json"
delegate_to: localhost
become: yes
# === 5. Gestion des permissions ===
- name: Corriger les permissions du projet
file:
path: "{{ symfony_root }}"
state: directory
owner: www-data
group: www-data
recurse: yes
# === 6. Gestion de node_modules ===
- name: Supprimer package-lock.json s'il existe
file:
path: "{{ symfony_root }}/package-lock.json"
state: absent
- name: Créer un nouveau package-lock.json
command: npm install --package-lock-only
args:
chdir: "{{ symfony_root }}"
become: yes
become_user: www-data
environment:
NVM_DIR: "{{ nvm_dir }}"
PATH: "{{ nvm_dir }}/versions/node/v{{ node_version }}/bin:{{ ansible_env.PATH }}"
HOME: "/home/www-data"
npm_config_cache: "/home/www-data/.npm"
- name: Mettre à jour les paquets npm si node_modules existe
command: npm update
args:
chdir: "{{ symfony_root }}"
become: yes
become_user: www-data
environment:
NVM_DIR: "{{ nvm_dir }}"
PATH: "{{ nvm_dir }}/versions/node/v{{ node_version }}/bin:{{ ansible_env.PATH }}"
HOME: "/home/www-data"
npm_config_cache: "/home/www-data/.npm"
when: lookup('fileglob', symfony_root + '/node_modules/*', wantlist=True) | length > 0
- name: Corriger les versions Symfony dans composer.json
ansible.builtin.replace:
path: /var/www/monSiteWeb/composer.json
regexp: '"symfony/([^"]+)": "[^"]+"'
replace: '"symfony/\1": "7.0.*"'
backup: yes
- name: Supprimer composer.lock pour permettre la mise à jour
file:
path: "{{ symfony_root }}/composer.lock"
state: absent
become: yes
become_user: www-data
# === 7. Gestion de Symfony (avec gestion d'erreurs) ===
- name: Gérer les dépendances Symfony
block:
- name: Vérifier si symfony/runtime est installé
command: "{{ composer_path }} show symfony/runtime"
args:
chdir: "{{ symfony_root }}"
register: runtime_check
ignore_errors: yes
changed_when: false
become: yes
become_user: www-data
environment:
COMPOSER_HOME: "/home/www-data/.composer"
PATH: "/usr/local/bin:{{ ansible_env.PATH }}"
# - name: Installer symfony/runtime si nécessaire
# command: "{{ composer_path }} require symfony/runtime --no-interaction --optimize-autoloader"
# args:
# chdir: "{{ symfony_root }}"
# become: yes
# become_user: www-data
# when: runtime_check.rc is defined and runtime_check.rc != 0
# environment:
# COMPOSER_HOME: "/home/www-data/.composer"
# COMPOSER_NO_INTERACTION: "1"
# PATH: "/usr/local/bin:{{ ansible_env.PATH }}"
- name: Forcer Symfony 7 dans composer.json
ansible.builtin.replace:
path: "{{ symfony_root }}/composer.json"
regexp: '"symfony/([^"]+)": "[^"]+"'
replace: '"symfony/\1": "7.0.*"'
backup: yes
- name: Corriger les bundles incompatibles avec Symfony 7
ansible.builtin.replace:
path: "{{ symfony_root }}/composer.json"
regexp: '"(symfony/(monolog-bundle|maker-bundle|webpack-encore-bundle))": "[^"]+"'
replace: '"\1": "^2.0"' # Pour monolog-bundle et webpack-encore-bundle
backup: yes
- name: Forcer maker-bundle pour Symfony 7
ansible.builtin.replace:
path: "{{ symfony_root }}/composer.json"
regexp: '"symfony/maker-bundle": "[^"]+"'
replace: '"symfony/maker-bundle": "^1.50"' # Version compatible Symfony 7
backup: yes
- name: Nettoyer le cache Symfony
command: "php bin/console cache:clear --env=dev"
args:
chdir: "{{ symfony_root }}"
become: yes
become_user: www-data
environment:
APP_ENV: dev
PATH: "/usr/local/bin:{{ ansible_env.PATH }}"
rescue:
- name: Afficher l'erreur détaillée
debug:
var: ansible_failed_result
- name: Créer le fichier de log si absent
file:
path: "{{ symfony_root }}/var/log/prod.log"
state: touch
owner: www-data
group: www-data
mode: '0664'
- name: Vérifier les logs Symfony (si le fichier existe)
command: "tail -n 20 {{ symfony_root }}/var/log/prod.log"
register: symfony_logs
ignore_errors: yes
become: yes
become_user: www-data
- name: Afficher les logs
debug:
var: symfony_logs.stdout_lines
when: symfony_logs.stdout is defined and symfony_logs.stdout | length > 0
- name: Redémarrer PHP-FPM
service:
name: "php8.3-fpm"
state: restarted
when: ansible_os_family == 'Debian'
become: yes
and, i’ve these problems :
alexandre@alexandre-Matebook:~/Documents/monSiteWeb$ ansible-playbook -i ./ansible/inventory.ini ./ansible/playbookQuatre.yml
PLAY [servers] *****************************************************************************************************************************************************************
TASK [Gathering Facts] *********************************************************************************************************************************************************
ok: [ubuntu]
TASK [debug] *******************************************************************************************************************************************************************
ok: [ubuntu] => {
"msg": "Ansible version: 2.21.1"
}
TASK [Vérifier que Composer est accessible] ************************************************************************************************************************************
ok: [ubuntu]
TASK [Échouer si Composer n'est pas disponible] ********************************************************************************************************************************
skipping: [ubuntu]
TASK [Créer un répertoire global pour NVM] *************************************************************************************************************************************
ok: [ubuntu]
TASK [Télécharger et installer nvm globalement] ********************************************************************************************************************************
ok: [ubuntu]
TASK [Installer Node.js avec NVM] **********************************************************************************************************************************************
changed: [ubuntu]
TASK [Créer le répertoire du projet avec les bonnes permissions] ***************************************************************************************************************
ok: [ubuntu]
TASK [Créer var/log] ***********************************************************************************************************************************************************
ok: [ubuntu]
TASK [Créer var/cache] *********************************************************************************************************************************************************
ok: [ubuntu]
TASK [Créer .npm pour www-data] ************************************************************************************************************************************************
ok: [ubuntu]
TASK [Synchroniser les fichiers du projet] *************************************************************************************************************************************
[ERROR]: Task failed: Duplicate become password prompt encountered waiting for become success.
>>> Standard Error
[sudo via ansible, key=lqcrgkzlmhihryqhjaaoxqqrzynktqzp] password:
Désolé, essayez de nouveau.
[sudo via ansible, key=lqcrgkzlmhihryqhjaaoxqqrzynktqzp] password:
Origin: /home/alexandre/Documents/monSiteWeb/ansible/playbookQuatre.yml:95:7
93 mode: '0755'
94
95 - name: Synchroniser les fichiers du projet
^ column 7
fatal: [ubuntu -> localhost]: FAILED! => {"changed": false, "msg": "Task failed: Duplicate become password prompt encountered waiting for become success.\n>>> Standard Error\n[sudo via ansible, key=lqcrgkzlmhihryqhjaaoxqqrzynktqzp] password:\nDésolé, essayez de nouveau.\n[sudo via ansible, key=lqcrgkzlmhihryqhjaaoxqqrzynktqzp] password:"}
PLAY RECAP *********************************************************************************************************************************************************************
ubuntu : ok=10 changed=1 unreachable=0 failed=1 skipped=1 rescued=0 ignored=0
alexandre@alexandre-Matebook:~/Documents/monSiteWeb$ date
jeu. 25 juin 2026 17:43:11 CEST
i typed an put this :
alexandre@srv1155463:~$ sudo usermod -aG www-data alexandre
alexandre@srv1155463:~$ date
Thu Jun 25 17:45:54 CEST 2026
,and this configuraton:
alexandre@alexandre-Matebook:~/Documents/AnalyticaTechCode$ ls -la ~/.ssh/
total 24
drwx------ 2 alexandre alexandre 4096 juin 11 12:38 .
drwxrwxrwx 61 alexandre alexandre 4096 juin 20 13:27 ..
-rw------- 1 alexandre alexandre 3454 mai 28 2025 id_rsa
-rw-r--r-- 1 alexandre alexandre 754 mai 28 2025 id_rsa.pub
-rw------- 1 alexandre alexandre 978 juin 11 12:38 known_hosts
-rw-r--r-- 1 alexandre alexandre 142 juin 11 12:37 known_hosts.old
lexandre@alexandre-Matebook:~/Documents/AnalyticaTechCode$ date
jeu. 25 juin 2026 17:54:01 CEST
on my virtual private server.
Could you help me ?
Regards
Alexandre