J'essaie de suivre ce tutoriel Ansible tout en l'ajustant pour Ubuntu 16.04 avec php7. Au-dessous de ce message, vous trouverez mon fichier Ansible. Après l'avoir exécuté et essayé de visiter la page dans le navigateur, je reçois un 404, ainsi que les suivants dans les journaux des erreurs nginx:
2016/10/15 13:13:20 [crit] 28771 # 28771: * 7 connect () à unix: /var/run/php7.0-fpm.sock a échoué (2: aucun fichier ni répertoire de ce type) lors de la connexion en amont, client: 93.xxx.xxx.xx, serveur: 95.xx.xx.xx, requête: "GET/HTTP/1.1", en amont: "fastcgi: // unix: /var/run/php7.0-fpm.sock:", hôte: "95.xx.xx .xx "
J'ai donc vérifié si le fichier de socket existe et semble exister, mais ls
se comporte bizarrement:
$ Sudo ls -l /var/run/php
total 4
-rw-r--r-- 1 root root 5 Oct 15 13:00 php7.0-fpm.pid
srw-rw---- 1 www-data www-data 0 Oct 15 13:00 php7.0-fpm.sock
$ Sudo ls -l /var/run/php7
ls: cannot access '/var/run/php7': No such file or directory
$ Sudo ls -l /var/run/php7.0-fpm.sock
ls: cannot access '/var/run/php7.0-fpm.sock': No such file or directory
Pourquoi ls
peut-il trouver le fichier de socket si je le recherche par une partie du nom php
alors qu’il ne peut pas trouver le fichier de socket lorsque j’énumère plus que php7
ou même le nom complet php7.0-fpm.sock
?
Et surtout, comment puis-je faire fonctionner cela avec nginx? Tous les conseils sont les bienvenus!
ci-dessous j'ai collé mon fichier Ansible
---
- hosts: php
become: true
tasks:
- name: install packages
apt: name={{ item }} update_cache=yes state=latest
with_items:
- git
- mcrypt
- nginx
- php-cli
- php-curl
- php-fpm
- php-intl
- php-json
- php-mcrypt
- php-mbstring
- php-sqlite3
- php-xml
- sqlite3
- name: enable mbstring
Shell: phpenmod mbstring
notify:
- restart php7.0-fpm
- restart nginx
- name: create /var/www/ directory
file: dest=/var/www/ state=directory owner=www-data group=www-data mode=0700
- name: Clone git repository
git: >
dest=/var/www/laravel
repo=https://github.com/laravel/laravel.git
update=no
become: true
become_user: www-data
register: cloned
- name: install composer
Shell: curl -sS https://getcomposer.org/installer | php -- --install-dir=/usr/local/bin --filename=composer
args:
creates: /usr/local/bin/composer
- name: composer create-project
composer: command=create-project working_dir=/var/www/laravel optimize_autoloader=no
become: true
become_user: www-data
when: cloned|changed
- name: set APP_DEBUG=false
lineinfile: dest=/var/www/laravel/.env regexp='^APP_DEBUG=' line=APP_DEBUG=false
- name: set APP_ENV=production
lineinfile: dest=/var/www/laravel/.env regexp='^APP_ENV=' line=APP_ENV=production
- name: Configure nginx
template: src=nginx.conf dest=/etc/nginx/sites-available/default
notify:
- restart php5-fpm
- restart nginx
handlers:
- name: restart php7.0-fpm
service: name=php7.0-fpm state=restarted
- name: restart nginx
service: name=nginx state=restarted
- name: reload nginx
service: name=nginx state=reloaded
Eu le même problème ... La solution est très facile.
Dans le fichier de configuration nginx que vous essayez d’améliorer
unix:/var/run/php7.0-fpm.sock
Chemin correct est
unix:/var/run/php/php7.0-fpm.sock
Il est fait mention de cela dans documentation
Nginx communique avec PHP-FPM à l'aide d'un socket de domaine Unix. Douilles mappez sur un chemin du système de fichiers et notre installation PHP 7 utilise un nouveau fichier chemin par défaut:
PHP 5
/var/run/php5-fpm.sock
PHP 7
/var/run/php/php7.0-fpm.sock
Répondre à votre première question:
Pourquoi
ls
peut-il trouver le fichier de socket si je le recherche par une partie du nomphp
alors qu’il ne peut pas trouver le fichier de socket lorsque j’énumère plus quephp7
ou même le nom completphp7.0-fpm.sock
?
Parce que lorsque vous exécutez Sudo ls -l /var/run/php
, vous affichez le contenu du répertoire /var/run/php
, mais lorsque vous exécutez Sudo ls -l /var/run/php7
ou Sudo ls -l /var/run/php7.0-fpm.sock
, vous demandez des fichiers spécifiques dans son répertoire parent /var/run
qui n'existent pas.
En ce qui concerne la deuxième question, cela ne semble pas être un problème Ansible, mais vous devez résoudre le problème du placement des fichiers en tenant compte de ce qui précède.
Editez votre fichier /etc/php/7.0/fpm/pool.d/www.conf et trouvez la ligne suivante:
listen = 127.0.0.1:9000
Et commentez-le ou remplacez-le par ce qui suit:
listen = /var/run/php7.0-fpm.sock
Dans Ubuntu 18.04, le problème pour moi était qu'il utilise actuellement PHP 7.2, mais le fichier par défaut des sites disponibles a:
fastcgi_pass unix:/var/run/php/php7.0-fpm.sock;
La mise à jour de la version sur cette ligne pour que ce soit la version 7.2 au lieu de la version 7.0 a résolu le problème pour moi.
fastcgi_pass unix:/var/run/php/php7.2-fpm.sock;
Dans /etc/nginx/nginx.conf
utilisateur nginx;
Si votre serveur Web travaille sous/ www-data need write
utilisateur www-data;