У меня есть проект 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)?
У меня была такая же проблема (на 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
(не судо), тогда оба бегают как никто, и это сработало для меня.
Ваше обстоятельство точно так же, как я.
Проблема заключается в разнице разрешений между процессом о 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