I'm trying to follow this Ansible tutorial while adjusting it for Ubuntu 16.04 with php7. Below this message you'll find my Ansible file. After running it and trying to visit the page in the browser I get a 404, and the following in the nginx error logs:
2016/10/15 13:13:20 [crit] 28771#28771: *7 connect() to unix:/var/run/php7.0-fpm.sock failed (2: No such file or directory) while connecting to upstream, client: 93.xxx.xxx.xx, server: 95.xx.xx.xx, request: "GET / HTTP/1.1", upstream: "fastcgi://unix:/var/run/php7.0-fpm.sock:", host: "95.xx.xx.xx"
So I checked if the socket file exists, and it seems to exist, but ls
behaves weird:
$ 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
Why can ls
find the socket file if I search it by part of the name php
while it cannot find the socket file when I list more than that php7
or even the full name php7.0-fpm.sock
?
And most importantly, how can I make this work with nginx? All tips are welcome!
below I pasted my Ansible file
---
- 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
In /etc/nginx/nginx.conf
If you web server work at user www-data need write
Edit your /etc/php/7.0/fpm/pool.d/www.conf file and find the following line:
And comment it out or replace it with the following:
Answering your first question:
Because when you run
sudo ls -l /var/run/php
you are displaying the contents of the/var/run/php
directory, but when you runsudo ls -l /var/run/php7
orsudo ls -l /var/run/php7.0-fpm.sock
you ask for specific files in its parent directory/var/run
which do not exist.As for the second question, it does not seem an Ansible problem, but you need to troubleshoot the placement of files considering the above.
Had same problem. Solution is very easy.
In nginx conf file you are trying upstreaming to
unix:/var/run/php7.0-fpm.sock
Correct path is
unix:/var/run/php/php7.0-fpm.sock
There is mention abou this in documentation
In Ubuntu 18.04 the problem for me was that it's currently using PHP 7.2, but the sites-available default file has:
fastcgi_pass unix:/var/run/php/php7.0-fpm.sock;
Updating the version on that line so that it's the 7.2 instead of 7.0 fixed the issue for me.
fastcgi_pass unix:/var/run/php/php7.2-fpm.sock;