Я пытаюсь следовать этот учебник Ansible настраивая его для Ubuntu 16.04 с php7. Ниже этого сообщения вы найдете мой файл Ansible. После запуска и попытки посетить страницу в браузере я получаю 404, а в журналах ошибок nginx следующее:
2016/10/15 13:13:20 [crit] 28771 # 28771: * 7 connect () для
Unix: /var/run/php7.0-fpm.sock не удалось (2: нет такого файла или каталога)
при подключении к восходящему каналу клиент: 93.xxx.xxx.xx, сервер:
95.xx.xx.xx, запрос: «GET / HTTP / 1.1», восходящий поток: «fastcgi: // unix: /var/run/php7.0-fpm.sock:», хост: «95.xx.xx .xx»
Итак, я проверил, существует ли файл сокета, и кажется, что он существует, но ls
ведет себя странно
$ 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
Почему может ls
найти файл сокета, если я ищу его по части имени php
в то время как он не может найти файл сокета, когда я перечисляю больше, чем это php7
или даже полное имя php7.0-fpm.sock
?
И самое главное, как я могу заставить это работать с nginx? Все советы приветствуются!
ниже я вставил свой файл 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
Была такая же проблема.
Решение очень простое.
В файле conf nginx вы пытаетесь апстримировать
unix:/var/run/php7.0-fpm.sock
Правильный путь
unix:/var/run/php/php7.0-fpm.sock
Есть упоминание об этом в документация
Nginx связывается с PHP-FPM с помощью доменного сокета Unix. Розетки
сопоставить путь в файловой системе, и наша установка PHP 7 использует новый
путь по умолчанию:PHP 5
/var/run/php5-fpm.sock
PHP 7
/var/run/php/php7.0-fpm.sock
Отвечая на ваш первый вопрос:
Почему может
ls
найти файл сокета, если я ищу его по части имениphp
в то время как он не может найти файл сокета, когда я перечисляю больше, чем этоphp7
или даже полное имяphp7.0-fpm.sock
?
Потому что когда ты бежишь sudo ls -l /var/run/php
вы отображаете содержимое /var/run/php
каталог, но при запуске sudo ls -l /var/run/php7
или же sudo ls -l /var/run/php7.0-fpm.sock
вы просите конкретные файлы в его родительском каталоге /var/run
которые не существуют.
Что касается второго вопроса, это не кажется проблемой Ansible, но вам нужно устранить неполадки размещения файлов с учетом вышеизложенного.
Отредактируйте свой /etc/php/7.0/fpm/pool.d/www.conf файл и найдите следующую строку:
listen = 127.0.0.1:9000
И закомментируйте это или замените это следующим:
listen = /var/run/php7.0-fpm.sock
В Ubuntu 18.04 проблема для меня заключалась в том, что в настоящее время он использует PHP 7.2, но файл по умолчанию, доступный для сайтов, имеет:
fastcgi_pass unix:/var/run/php/php7.0-fpm.sock;
Обновление версии в этой строке так, чтобы это 7.2 вместо 7.0 решило проблему для меня.
fastcgi_pass unix:/var/run/php/php7.2-fpm.sock;
В /etc/nginx/nginx.conf
пользователь nginx;
Если ваш веб-сервер работает на пользователя WWW-данные нужно написать
пользовательские www-данные;