Ich versuche, diesem Ansible-Tutorial zu folgen, während ich es für Ubuntu 16.04 mit PHP 7 einstelle. Unter dieser Nachricht finden Sie meine Ansible-Datei. Nachdem ich es ausgeführt habe und versucht habe, die Seite im Browser aufzurufen, bekomme ich eine 404 und folgende in den Nginx-Fehlerprotokollen:
15.10.2016 13:13:20 [krit] 28771 # 28771: * 7 connect () mit Unix: /var/run/php7.0-fpm.sock fehlgeschlagen (2: Keine solche Datei oder ein solches Verzeichnis) Bei der Verbindung zum Upstream-Client: 93.xxx.xxx.xx, Server: 95.xx.xx.xx, Anforderung: "GET/HTTP/1.1", Upstream: "fastcgi: // unix: /var/run/php7.0-fpm.sock:", Host: "95.xx.xx .xx "
Also habe ich überprüft, ob die Socket-Datei existiert, und es scheint zu existieren, aber ls
verhält sich komisch:
$ 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
Warum kann ls
die Socket-Datei finden, wenn ich sie nach einem Teil des Namens php
durchsuche, während sie die Socket-Datei nicht finden kann, wenn ich mehr als diesen php7
oder sogar den vollständigen Namen php7.0-fpm.sock
aufliste?
Und vor allem, wie kann ich das mit Nginx funktionieren lassen? Alle Tipps sind willkommen!
unten habe ich meine Ansible-Datei eingefügt
---
- 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
Hatte dasselbe Problem ... Die Lösung ist sehr einfach.
In der Nginx-Conf-Datei versuchen Sie, das Upstreaming durchzuführen
unix:/var/run/php7.0-fpm.sock
Richtiger Pfad ist
unix:/var/run/php/php7.0-fpm.sock
Es wird erwähnt in Dokumentation
Nginx kommuniziert mit PHP-FPM über einen Unix-Domänensocket. Steckdosen map einem Pfad im Dateisystem zuordnen, und bei der Installation von PHP 7 wird ein neues .__ verwendet. Pfad standardmäßig:
PHP 5
/var/run/php5-fpm.sock
PHP 7
/var/run/php/php7.0-fpm.sock
Beantwortung Ihrer ersten Frage:
Warum kann
ls
die Socket-Datei finden, wenn ich sie nach einem Teil des Namensphp
durchsuche, während sie die Socket-Datei nicht finden kann, wenn ich mehr als diesenphp7
oder sogar den vollständigen Namenphp7.0-fpm.sock
aufliste?
Denn wenn Sie Sudo ls -l /var/run/php
ausführen, zeigen Sie den Inhalt des /var/run/php
-Verzeichnisses an, aber wenn Sie Sudo ls -l /var/run/php7
oder Sudo ls -l /var/run/php7.0-fpm.sock
ausführen, fragen Sie nach bestimmten Dateien im übergeordneten Verzeichnis /var/run
, die nicht vorhanden sind.
Bei der zweiten Frage scheint es sich nicht um ein Ansible-Problem zu handeln, aber Sie müssen die Platzierung von Dateien unter Berücksichtigung der oben genannten Probleme prüfen.
Bearbeiten Sie Ihre /etc/php/7.0/fpm/pool.d/www.conf -Datei und suchen Sie die folgende Zeile:
listen = 127.0.0.1:9000
Und kommentieren Sie es aus oder ersetzen Sie es durch Folgendes:
listen = /var/run/php7.0-fpm.sock
In Ubuntu 18.04 bestand das Problem für mich darin, dass derzeit PHP 7.2 verwendet wird, die standardmäßige Site-Datei hat jedoch
fastcgi_pass unix:/var/run/php/php7.0-fpm.sock;
Das Aktualisieren der Version in dieser Zeile, sodass 7.2 anstelle von 7.0 angezeigt wird, hat das Problem für mich behoben.
fastcgi_pass unix:/var/run/php/php7.2-fpm.sock;
In /etc/nginx/nginx.conf
benutzer nginx;
Wenn Ihr Webserver unter user www-data arbeitet, müssen Sie schreiben
benutzer www-Daten;
Sudo service php7.0-fpm status
OR
Sudo systemctl status php7.0-fpm
Sudo service php7.0-fpm restart
OR
Sudo systemctl reload php7.0-fpm
Sudo service php7.0-fpm start
OR
Sudo systemctl start php7.0-fpm