Неверные разрешения при локальном запуске PHP-проекта Heroku с помощью Foreman в Ubuntu

У меня есть проект Heroku PHP в моем локальном каталоге на машине Xubuntu 14.04.

Я хочу запустить его локально, чтобы разработать / протестировать его перед развертыванием на Heroku.

Прежде всего, я попытался пройти в каталог проекта и запустил foreman start web,

Были ошибки, связанные с отсутствующими пакетами и версией PHP, поэтому я сделал следующее:

1). Установлена ​​последняя версия PHP из кастомного PPA (PPA: Ондрей / php5):

php --version

PHP 5.5.18-1+deb.sury.org~trusty+1 (cli) (built: Oct 17 2014 15:20:47),

2). Создана символическая ссылка для php5-fpm двоичная:

sudo ln -s /usr/sbin/php5-fpm /usr/local/bin/php-fpm

3). Установлены Nginx.

4). Изменил PROCFILE:

web: vendor/bin/heroku-php-nginx /web

Далее я пытаюсь запустить сервер с помощью: foreman start web команда и я получаю следующий вывод:

02:38:23 web.1  | started with pid 15815
02:38:23 web.1  | Booting on port 5000...
02:38:23 web.1  | DOCUMENT_ROOT changed to '/web/'
02:38:24 web.1  | Starting php-fpm...
02:38:24 web.1  | Starting nginx...
02:38:24 web.1  | [06-Nov-2014 02:38:24] NOTICE: [pool www] 'user' directive is ignored when FPM is not running as root
02:38:24 web.1  | [06-Nov-2014 02:38:24] NOTICE: [pool www] 'user' directive is ignored when FPM is not running as root
02:38:26 web.1  | nginx: [alert] could not open error log file: open() "/var/log/nginx/error.log" failed (13: Permission denied)
02:38:26 web.1  | 2014/11/06 02:38:26 [warn] 15897#0: the "user" directive makes sense only if the master process runs with super-user privileges, ignored in /etc/nginx/nginx.conf:1
02:38:26 web.1  | 2014/11/06 02:38:26 [emerg] 15897#0: open() "/var/log/nginx/access.log" failed (13: Permission denied)
02:38:26 web.1  | Process exited unexpectedly: nginx
02:38:26 web.1  | Going down, terminating child processes...
02:38:26 web.1  | vendor/bin/heroku-php-nginx: line 282: 15891 Terminated              tail -qF -n 0 "${logs[@]}"02:38:26 web.1  |      15892                       | strip_fpm_child_said 1>&2
02:38:26 web.1  | exited with code 1
02:38:26 system | sending SIGTERM to all processes

Очевидно, он не может запуститься, потому что не может получить доступ к файлам журналов, которые принадлежат пользователю root.

Далее я пытаюсь запустить его с помощью Судо: sudo foreman start web и получить следующий вывод:

02:43:29 web.1  | started with pid 16153
02:43:30 web.1  | Booting on port 5000...
02:43:30 web.1  | DOCUMENT_ROOT changed to '/web/'
02:43:30 web.1  | Starting php-fpm...
02:43:30 web.1  | Starting nginx...
02:43:32 web.1  | nginx: [emerg] bind() to 0.0.0.0:80 failed (98: Address already in use)
02:43:32 web.1  | nginx: [emerg] bind() to [::]:80 failed (98: Address already in use)
02:43:32 web.1  | nginx: [emerg] bind() to 0.0.0.0:80 failed (98: Address already in use)
02:43:32 web.1  | nginx: [emerg] bind() to [::]:80 failed (98: Address already in use)
02:43:33 web.1  | nginx: [emerg] bind() to 0.0.0.0:80 failed (98: Address already in use)
02:43:33 web.1  | nginx: [emerg] bind() to [::]:80 failed (98: Address already in use)
02:43:33 web.1  | nginx: [emerg] bind() to 0.0.0.0:80 failed (98: Address already in use)
02:43:33 web.1  | nginx: [emerg] bind() to [::]:80 failed (98: Address already in use)
02:43:34 web.1  | nginx: [emerg] bind() to 0.0.0.0:80 failed (98: Address already in use)
02:43:34 web.1  | nginx: [emerg] bind() to [::]:80 failed (98: Address already in use)
02:43:34 web.1  | nginx: [emerg] still could not bind()
02:43:34 web.1  | Process exited unexpectedly: nginx
02:43:34 web.1  | Going down, terminating child processes...
02:43:34 web.1  | vendor/bin/heroku-php-nginx: line 282: 16229 Terminated              tail -qF -n 0 "${logs[@]}"02:43:34 web.1  |      16230                       | strip_fpm_child_said 1>&2
02:43:34 web.1  | exited with code 1
02:43:34 system | sending SIGTERM to all processes

Похоже, ему не нравится, что сервис nginx запущен. Это почему?

Я выключаю веб-сервер, используя: sudo service nginx stop и пытаюсь снова.

На этот раз сообщений об ошибках нет, и, похоже, сервер работает.

Тем не менее, когда я загружаю веб-страницу в браузере, я получаю HTTP 502 Неверный шлюз ошибка.

Из журнала ошибок nginx видно, что nginx не может получить доступ к файлу сокета FastCGI:

2014/11/06 02:45:44 [crit] 16342#0: *1 connect() to unix:/tmp/heroku.fcgi.5000.sock failed (13: Permission denied) while connecting to upstream, client: 127.0.0.1, server: localhost, request: "GET / HTTP/1.1", upstream: "fastcgi://unix:/tmp/heroku.fcgi.5000.sock:", host: "localhost:5000",

Файл сокета принадлежит root и nginx работает как www-data,

В чем причина этого, как я могу решить эту проблему? Можно ли запустить Heroku локально от моего пользователя (не root)?

0

Решение

У меня была такая же проблема (на Mac OS, свежая установка nginx с homebrew).

Я не редактировал vendor/heroku/heroku-buildpack-php/conf/nginx/heroku.conf.php (он будет перезаписан в любое время, когда обновляется сборка, и в любом случае он немного отличается).

Я только что установил разрешение для файла журнала ошибок (изменил его) и затем запустил heroku local как обычно

Если вы бежите heroku local как root, это будет работать вокруг вашей ошибки разрешения журнала ошибок, но тогда nginx будет работать как root, а php-fpm работает как никто (в моем случае), поэтому несоответствие разрешений указано выше.

Если вы исправите разрешение, а затем запустите heroku local (не судо), тогда оба бегают как никто, и это сработало для меня.

1

Другие решения

Ваше обстоятельство точно так же, как я.

Проблема заключается в разнице разрешений между процессом о nginx и php5-fpm.
Быстрая починка:

Первый:

Редактировать файл: vendor / heroku / heroku-buildpack-php / conf / nginx / heroku.conf.php

комментарий: #server unix: /tmp/heroku.fcgi..sock max_fails = 3 fail_timeout = 3s;

откройте комментарий и измените порт: сервер 127.0.0.1:9000 max_fails = 3 fail_timeout = 3s;

Во-вторых:

Редактировать файл: vendor / heroku / heroku-buildpack-php / conf / php / php-fpm.conf

комментарий: listen = /tmp/heroku.fcgi.$‹PORT‹.sock

откройте комментарий и измените порт: listen = 127.0.0.1:9000

0

По вопросам рекламы [email protected]