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