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

0

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

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

Прежде всего, я попытался подключиться к директории проекта и foreman start web.

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

1). Установлена последняя версия PHP из пользовательского PPA (ppa: ondrej/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: 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 и sudo service nginx stop попытку.

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

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

Из журнала ошибок 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 локально от моего пользователя (а не от корня)?

Теги:
nginx
heroku
fastcgi

2 ответа

1

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

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

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

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

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

  • 0
    Какие разрешения вы установили для этих файлов журнала?
  • 0
    CHMOD 666, казалось, сделал свое дело.
Показать ещё 1 комментарий
0

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

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

Первый:

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

comment: #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

Ещё вопросы

Сообщество Overcoder
Наверх
Меню