За последние 24 часа нас посетили 22502 программиста и 998 роботов. Сейчас ищут 679 программистов ...

Docker + php_fpm

Тема в разделе "Прочие вопросы по PHP", создана пользователем Geebrox, 9 мар 2020.

Метки:
  1. Geebrox

    Geebrox Активный пользователь

    С нами с:
    30 июл 2016
    Сообщения:
    24
    Симпатии:
    1
    Здравствуйте. Хотел бы узнать можно ли как нибудь собрать контейнер для php_fpm и обращаться к нему через nginx? У меня есть уже установленный nginx на сервере. Я хочу создать докер контейнер который запускает только php_fpm сервис и перенаправлять конкретный запросы через nginx (proxy pass). Возможно ли реализовать такое, если да, то можете немного помочь с кодом? Я просто новичок в PHP. Спасибо!
     
  2. artoodetoo

    artoodetoo Суперстар
    Команда форума Модератор

    С нами с:
    11 июн 2010
    Сообщения:
    11.072
    Симпатии:
    1.237
    Адрес:
    там-сям
    Чем не устраивает миллион и один готовый пример LEMP via Docker ?
    --- Добавлено ---
    Покажи свои попытки. Если их не было, то начни с Гугл и туториалов по докеру.
     
  3. Geebrox

    Geebrox Активный пользователь

    С нами с:
    30 июл 2016
    Сообщения:
    24
    Симпатии:
    1
    Тем что LEMP via Docker заново настраивает и запускает сервисы Nginx и MySQL в контейнерах. Как я уже сказал выше, у меня Nginx уже настроен как отдельный сервер и слушает все входящие запросы, зачем мне запускать ещё одну в Docker’e?
     
  4. artoodetoo

    artoodetoo Суперстар
    Команда форума Модератор

    С нами с:
    11 июн 2010
    Сообщения:
    11.072
    Симпатии:
    1.237
    Адрес:
    там-сям
    Значит тебе надо на один контейнер меньше. На то они и контейнеры, Карл, чтобы собирать из них как из кубиков. С точки зрения nginx нет никакой разницы где находится слушатель php-fpm. Контейнер php должен расшаривать порт 9000.

    Рекомендация остаётся в силе.
     
  5. Geebrox

    Geebrox Активный пользователь

    С нами с:
    30 июл 2016
    Сообщения:
    24
    Симпатии:
    1
    Ну у меня не получился, возможно из за это я тут? Можете посмотреть мой код, если предоставлю?
     
  6. artoodetoo

    artoodetoo Суперстар
    Команда форума Модератор

    С нами с:
    11 июн 2010
    Сообщения:
    11.072
    Симпатии:
    1.237
    Адрес:
    там-сям
    --- Добавлено ---
    Твоя задача добраться до порта 9000. Сфокусируйся на этом. Ты можешь замапить его на локальный порт как если бы он был открыт локальным процессом.
     
  7. Geebrox

    Geebrox Активный пользователь

    С нами с:
    30 июл 2016
    Сообщения:
    24
    Симпатии:
    1
    Да может я не правильно настраиваю Nginx не могу понять почему он не перенаправляет запросы на 9000 порт, закреплю несколько скриншотов. P.S. Я запускаю весь процесс в данный момент на локалке

    Настройка nginx
    [​IMG]

    Контейнеры докер:
    [​IMG]

    Настройка docker-compose:
    [​IMG]
     
  8. artoodetoo

    artoodetoo Суперстар
    Команда форума Модератор

    С нами с:
    11 июн 2010
    Сообщения:
    11.072
    Симпатии:
    1.237
    Адрес:
    там-сям
    С виду должно работать. Может надо просто рестартовать?

    Оффтопик: Пожалуйста, не используй скриншоты там, где достаточно сделать текстовый копи-паст.
    --- Добавлено ---
    Что в логах nginx?
     
  9. Geebrox

    Geebrox Активный пользователь

    С нами с:
    30 июл 2016
    Сообщения:
    24
    Симпатии:
    1
    В логах ничего кроме ошибок об favicon. Браузер открывает дефолтную страницу nginx, странно, хотя я настраюваю дефолтный конфиг nginx. Если скинул не достаточно информации, могу полный код залить в гитхаб, если хотите...
     
  10. artoodetoo

    artoodetoo Суперстар
    Команда форума Модератор

    С нами с:
    11 июн 2010
    Сообщения:
    11.072
    Симпатии:
    1.237
    Адрес:
    там-сям
    Не надо полный код. То есть можешь, конечно, но не расчитывай на слишком большую вовлечённость других :) Минимальный и достаточный код должен быть здесь в текстовом виде без необходимости куда-то ходить и чего-то грузить. Это просто правила хорошего тона.

    Что происходит когда обращаешься к пхп скрипту в браузере: что на странице и что в логах?
    Если обращение идёт не к тому виртуальному хосту, сначала разберись с этим , а то не понятно о чём мы вообще здесь толкуем.
    --- Добавлено ---
    П.С. Почему закомментирована строка root ?!!!
    --- Добавлено ---
    Твой документ рут веб-сервера должен как-то быть связан с папкой на докере. Я не вижу этой связи.
    --- Добавлено ---
    root в nginx
    volumes в docker-compose
     
  11. Geebrox

    Geebrox Активный пользователь

    С нами с:
    30 июл 2016
    Сообщения:
    24
    Симпатии:
    1
    Страница выдает 404

    Логи:
    /var/log/nginx/api_access.log:
    Код (Text):
    1. 127.0.0.1 - - [09/Mar/2020:10:54:45 +0500] "GET /favicon.ico HTTP/1.1" 404 209 "http://localhost/index.php" "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.132 Safari/537.36"
    2. 127.0.0.1 - - [09/Mar/2020:10:54:46 +0500] "GET /index.php HTTP/1.1" 404 209 "-" "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.132 Safari/537.36"
    3. 127.0.0.1 - - [09/Mar/2020:10:54:46 +0500] "GET /favicon.ico HTTP/1.1" 404 209 "http://localhost/index.php" "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.132 Safari/537.36"
    4. 127.0.0.1 - - [09/Mar/2020:10:54:46 +0500] "GET /index.php HTTP/1.1" 404 209 "-" "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.132 Safari/537.36"
    5. 127.0.0.1 - - [09/Mar/2020:10:54:46 +0500] "GET /favicon.ico HTTP/1.1" 404 209 "http://localhost/index.php" "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.132 Safari/537.36"
    6. 127.0.0.1 - - [09/Mar/2020:10:54:48 +0500] "GET / HTTP/1.1" 404 209 "-" "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.132 Safari/537.36"
    7. 127.0.0.1 - - [09/Mar/2020:10:54:49 +0500] "GET / HTTP/1.1" 404 209 "-" "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.132 Safari/537.36"
    8. 127.0.0.1 - - [09/Mar/2020:10:54:49 +0500] "GET /favicon.ico HTTP/1.1" 404 209 "http://localhost/" "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.132 Safari/537.36"
    9. 127.0.0.1 - - [09/Mar/2020:10:54:50 +0500] "GET / HTTP/1.1" 404 209 "-" "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.132 Safari/537.36"
    10. 127.0.0.1 - - [09/Mar/2020:10:54:50 +0500] "GET /favicon.ico HTTP/1.1" 404 209 "http://localhost/" "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.132 Safari/537.36"
    11. 127.0.0.1 - - [09/Mar/2020:10:54:50 +0500] "GET / HTTP/1.1" 404 209 "-" "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.132 Safari/537.36"
    12. 127.0.0.1 - - [09/Mar/2020:10:54:50 +0500] "GET /favicon.ico HTTP/1.1" 404 209 "http://localhost/" "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.132 Safari/537.36"
    13. 127.0.0.1 - - [09/Mar/2020:10:55:17 +0500] "GET / HTTP/1.1" 200 396 "-" "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.132 Safari/537.36"
    14. 127.0.0.1 - - [09/Mar/2020:10:55:20 +0500] "GET / HTTP/1.1" 304 0 "-" "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.132 Safari/537.36"
    15. 127.0.0.1 - - [09/Mar/2020:10:55:20 +0500] "GET / HTTP/1.1" 304 0 "-" "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.132 Safari/537.36"
    16. 127.0.0.1 - - [09/Mar/2020:10:55:24 +0500] "GET /index.php HTTP/1.1" 404 209 "-" "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.132 Safari/537.36"
    17. 127.0.0.1 - - [09/Mar/2020:10:55:27 +0500] "GET /index.php HTTP/1.1" 404 209 "-" "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.132 Safari/537.36"


    /var/log/nginx/api_error.log:
    Код (Text):
    1. 2020/03/09 10:54:45 [error] 11675#11675: *19 open() "/srv/www/phpTaskManager/favicon.ico" failed (2: No such file or directory), client: 127.0.0.1, server: _, request: "GET /favicon.ico HTTP/1.1", host: "localhost", referrer: "http://localhost/index.php"
    2. 2020/03/09 10:54:46 [error] 11675#11675: *19 open() "/srv/www/phpTaskManager/favicon.ico" failed (2: No such file or directory), client: 127.0.0.1, server: _, request: "GET /favicon.ico HTTP/1.1", host: "localhost", referrer: "http://localhost/index.php"
    3. 2020/03/09 10:54:46 [error] 11675#11675: *19 open() "/srv/www/phpTaskManager/favicon.ico" failed (2: No such file or directory), client: 127.0.0.1, server: _, request: "GET /favicon.ico HTTP/1.1", host: "localhost", referrer: "http://localhost/index.php"
    4. 2020/03/09 10:54:48 [error] 11675#11675: *19 "/srv/www/phpTaskManager/index.html" is not found (2: No such file or directory), client: 127.0.0.1, server: _, request: "GET / HTTP/1.1", host: "localhost"
    5. 2020/03/09 10:54:49 [error] 11675#11675: *19 "/srv/www/phpTaskManager/index.html" is not found (2: No such file or directory), client: 127.0.0.1, server: _, request: "GET / HTTP/1.1", host: "localhost"
    6. 2020/03/09 10:54:49 [error] 11675#11675: *19 open() "/srv/www/phpTaskManager/favicon.ico" failed (2: No such file or directory), client: 127.0.0.1, server: _, request: "GET /favicon.ico HTTP/1.1", host: "localhost", referrer: "http://localhost/"
    7. 2020/03/09 10:54:50 [error] 11675#11675: *19 "/srv/www/phpTaskManager/index.html" is not found (2: No such file or directory), client: 127.0.0.1, server: _, request: "GET / HTTP/1.1", host: "localhost"
    8. 2020/03/09 10:54:50 [error] 11675#11675: *19 open() "/srv/www/phpTaskManager/favicon.ico" failed (2: No such file or directory), client: 127.0.0.1, server: _, request: "GET /favicon.ico HTTP/1.1", host: "localhost", referrer: "http://localhost/"
    9. 2020/03/09 10:54:50 [error] 11675#11675: *19 "/srv/www/phpTaskManager/index.html" is not found (2: No such file or directory), client: 127.0.0.1, server: _, request: "GET / HTTP/1.1", host: "localhost"
    10. 2020/03/09 10:54:50 [error] 11675#11675: *19 open() "/srv/www/phpTaskManager/favicon.ico" failed (2: No such file or directory), client: 127.0.0.1, server: _, request: "GET /favicon.ico HTTP/1.1", host: "localhost", referrer: "http://localhost/"
    --- Добавлено ---
    Изменил конфиг Nginx на эту, как Вы говорили в рут указал путь от docker-compose volumes:
    Код (Text):
    1. server {
    2.     listen 80 default_server;
    3.     server_name _;
    4.     root /srv/www/phpTaskManager;
    5.    
    6.     location ~ \.php$ {
    7.         try_files $uri =404;
    8.         fastcgi_split_path_info ^(.+\.php)(/.+)$;
    9.         fastcgi_pass localhost:9000;
    10.         fastcgi_index index.php;
    11.         include fastcgi_params;
    12.         fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
    13.         fastcgi_param PATH_INFO $fastcgi_path_info;
    14.     }
    15.     error_log /var/log/nginx/api_error.log;
    16.     access_log /var/log/nginx/api_access.log;
    17. }
    Проблема та же, в логах ничего, открывается 404
     
  12. artoodetoo

    artoodetoo Суперстар
    Команда форума Модератор

    С нами с:
    11 июн 2010
    Сообщения:
    11.072
    Симпатии:
    1.237
    Адрес:
    там-сям
    Ты перепутал путь на контейнере и на хост машине.
     
  13. Geebrox

    Geebrox Активный пользователь

    С нами с:
    30 июл 2016
    Сообщения:
    24
    Симпатии:
    1
    Я перенастроил проект https://github.com/Geebrox/taskmanager

    nginx_default.conf - это настройки дефолтные которые сейчас на хосте. Можете взглянуть пожалуйста?
     
  14. Geebrox

    Geebrox Активный пользователь

    С нами с:
    30 июл 2016
    Сообщения:
    24
    Симпатии:
    1
    Как я понял чтобы сделать обратный прокси все таки нужно для php_fpm поднять отдельный контейнер nginx и туда передавать запросы от nginx на remote сервере. Я хотел обойтись без отдельного nginx контейнера для php_fpm, но пока не нашёл решение. Тема пусть останется открытой, вдруг кто-нибудь сталкивался с этим и возможно имеется решение.
     
  15. romach

    romach Старожил

    С нами с:
    26 окт 2013
    Сообщения:
    2.904
    Симпатии:
    719
    @Geebrox

    - fastcgi_pass localhost:9000;
    +fastcgi_pass php:9000;

    первое что приходит в голову
     
  16. Geebrox

    Geebrox Активный пользователь

    С нами с:
    30 июл 2016
    Сообщения:
    24
    Симпатии:
    1
    Нет, это работает если только через докер php+nginx связать два контейенера и передавать зависимости, в ином случае nginx не увидит upstream host 'php'. BTW, таким методотом я сейчас и сделал настройку, код в гитхабе обновил, если кому интересно.
     
  17. romach

    romach Старожил

    С нами с:
    26 окт 2013
    Сообщения:
    2.904
    Симпатии:
    719
    А на localhost он как должен php увидеть? Почему теперь php слушает nginx? Каким образом он вообще сможет это сделать? Он точно не сыпет в лог ошибки с такой конфигурацией?

    https://github.com/Geebrox/taskmanager/blob/master/docker/php/www.conf#L6

    php должен висеть на своем ip и своем порте, который будет выставлен наружу конфигом. Тогда nginx не может его не увидеть, если они конечно будут находиться в пределах одной сети.
     
  18. Geebrox

    Geebrox Активный пользователь

    С нами с:
    30 июл 2016
    Сообщения:
    24
    Симпатии:
    1
    Изучите про docker-compose и все узнаёте. P.S. Нет, в логах ошибок нет.

    почему вы думаете, что я не пытался реализовать такое? Вы точно тему и ответы с начала до конца читали?)
     
  19. romach

    romach Старожил

    С нами с:
    26 окт 2013
    Сообщения:
    2.904
    Симпатии:
    719
    Ну, наверное потому что это бы работало. Если задать нормальные пути, обращаться к нужным контейнерам и запускаться на верных ip, то именно так и будет, о чем и написано в этой теме неоднократно.

    ок