Настраиваем работу php-fpm на порт или на сокет

Довольно часто на проектах 1С-Битрикс требуется установленная библиотека cURL, напирем в нашем решении Купитрикс:кэшбэк данная библиотека необходима для обмена данными между кэшбэк-сервисом и CPA-сетью.

Шаг — Подготовка

На этапе подготовки мы убеждаемся что у нас есть всё необходимое для выполнения дальнейшей инструкции:

  • Нам нужна установленная ОС  Ubuntu Server — Вам в помощь статья — Установка Ubuntu Server LTS
  • Ubuntu Server должна иметь доступ в интернет. — Настройка сети в Ubuntu Server [Netplan]
  • Для проверки потребуется веб-сервер Apache или Nginx. — Apache web server. Установка на Ubuntu Server или Установка Nginx на Ubuntu Server
Шаг - Подготовка

Посмотрим IP-адрес командой ifconfig(Рис.1).

ifconfigРис.1 — Смотрим IP-адрес Ubuntu

Шаг - Подготовка

Адрес моего сервера — , в этой статье я буду вводить его в браузере на другом ПК, для проверки работоспособности PHP7.2. Вы должны будете ввести свой IP-адрес.

Если у вас, допустим, Ubuntu Desktop и нету возможности подключиться с другого ПК, то вводите на своей же Ubuntu в браузере — localhost или IP-адрес — 127.0.0.1

На этом подготовка завершена, приступаем к установке PHP7.2.

Шаг - Подготовка

Установка cURL на Cent OS с Битрикс Окружением.

далее нам нужно ввести последовательно следующие команды:

yum install php-curl

эта команда установит библиотеку cURL на сервер

cp /etc/php.d/ /etc/php.d/

разрешаем работу cURL на сервере

/etc/init.d/httpd restart

перезагружаем сервер

Если вторая и третья строка не срабатывают и выдают ошибки(зависит от версии Битрикс Окружения), после установки самой библиотеки достаточно перезагрузить сервер целиком введя в консоли команду

reboot

и после перезагрузки сервера библиотека cURL начнет работать.

Для своих проектов на базе 1С-Битрикс мы используем сервера у хостинг провайдера firstvds

Для покупки сервера вы можете использовать промокод:

648485035

Как узнать установлен ли у меня curl в debian?

Перед тем, как ринуться к установке, давайте проверим: возможно, он уже у Вас установлен. Я не нашел ничего проще, чем создать файл, к примеру, с содержимым:

Читайте также:  Как установить и настроить прокси-сервер Squid в Ubuntu 20.04

<?php phpinfo(); ?>

и запустить его через браузер.

В выведенной простыне текста, можно поиском по странице поискать curl и если он у Вас не найдется, то смело полагать, что у Вас он не установлен.

Еще с давних времен, когда я использовал Ubuntu, я привык к DEB-дистрибутивам и менять их не хочу. Именно поэтому практически на всех своих серверах я использую в качестве операционной системы – Debian, о чем еще ни разу не пожалел.

Изначально в Debian эта утилита не установлена. При вызове команды, мы получим:

curl command not found

Нужно просто установить.

Установка

Сам curl — это автономная утилита независящая от какого-либо языка программирования. В нашем случае не зависит от используемого нами PHP. Но язык программирования должен уметь работать с curl. Для этого есть специальный пакет, который должен быть обязательно установлен в debian.

  • — это для PHP 5.3,
  • — это для PHP 7.3 соответственно для debian.

sudo apt-get install curl libcurl3 libcurl3-dev

Пакеты libcurl3 И libcurl3-dev нужны для правильной работы самого курл.

Перезапускаем web-сервер

service apache2 restart

service nginx restart

Что такое CURL?

CURL – это библиотека функций PHP, с помощью которой можно посылать запросы, например, HTTP, из PHP скрипта. CURL поддерживает такие протоколы как HTTP, HTTPS, FTP и другие. Посылать HTTP запросы можно методами GET, POST, PUT.

CURL может пригодиться в случаях когда необходимо вызвать удаленный скрипт и получить результат или просто сохранить HTML код вызываемой страницы, в общем каждый может найти свое применение но смысл один это то что можно послать запросы в процессе выполнения скрипта.

Установка cURL на Denwer (Денвер). Как начать пользоваться libcurl?

Первое, что мы должны сделать, это установить библиотеку. На локальном компьютере я пользуюсь сборкой Denwer, как и подавляющее большинство начинающих вебмастеров, на которых и рассчитана статья. Опытные пользователи, которые самостоятельно устанавливают связку php+apache+mysql смогут установить и cURL, не мне объяснять им как это делается 😉 А мы, новички, пользуемся готовыми решениями, чтобы было проще. Поэтому, устанавливаем libcurl следующим образом:

  • Скачиваем готовый пакет расширений «PHP5: дополнительные модули».
  • Соответственно, устанавливаем его. Ничего сложного, согласитесь 🙂
  • Открываем в блокноте (я всегда рекомендую Notepad++) файл:

    X:/webservers/usr/local/php5/ //где X — ваш диск, куда установлен вебсервер

    и убираем точку с запятой в начале сроки:

    ;extension=php_

  • Делаем рестарт сервера Денвер.

Готово. Чтобы проверить работоспособность библиотеки можете вызвать функцию phpinfo() и найти там строчку: cURL support enabled. Поздравляю с первой победой.

Проблема phpmyadmin после обновления.

Если при попытке зайти в панель управления phpmyadmin, после обновления на новую версию php. Ваш сервер выдает ошибку 500 — внутренняя ошибка сервера, то необходимо найти различия в файле расположенного по пути:

sudo nano /etc/php/7.4/fpm/pool.d/

В моем случае необходимо было закомментировать одну строчку и добавить еще одну:

;listen = /run/php/ listen = 127.0.0.1:9000

После перезагружаем наш php-fpm командой

sudo /etc/init.d/ restart

Все теперь phpmyadmin заработал в обычном режиме.

Если есть вопросы, то пишем в комментариях.

Также можете помочь проекту, заранее всем СПАСИБО!!!

Пожертвовать

Чиним

Потратил относительно много времени, чтобы починиться. Гуглил и саму проблему, что по идее не проблема, а просто nginx почему-то ходит не туда куда надо. Хотя ещё минуту назад с php7.2 он ходил туда же, но ничего не находил. Опуская детали, у меня nginx был настроен вот так

location / { … location ~ [^/]\.php(/|$) { … fastcgi_pass 127.0.0.1:9000; fastcgi_index ; include /etc/nginx/fastcgi_params; } }

Что как бы намекает, что nginx лезет на 9000 порт, но вот

# netstat -tulpn | grep 9000

как бы намекает, что на этом порту у меня нет никого от слова совсем-вообще. А чтобы постичь следующую мудрость мне потребовалось 2 часа моего личного времени.

Как видно из заголовка поста FPM умеет быть в двух разных ипостасях: жить на tcp порту и на сокете (Я не силён в теории сетей, поэтому примем этот факт как аксиому). Для nginx’а нужно было чтобы приемник жил на порту с номером 9000. Технически ему по барабану кто на том конце сидит, он свое дело делает как умеет, пересылает туда куда написано. А вот приемник в лице php-fpm отчего-то не захотел подниматься, хотя когда в прошлый раз настраивал оно как-то само всё заработало без моей помощи… кажется…

Итого. Всякими страшными заклинаниями я постиг истину.

Чтобы php-fpm жил на порту

Нужно в /etc/php/7.3/fpm/pool.d/  писать так

… много строк… listen = 127.0.0.1:9000 … много строк…

Остальные директивы listen либо закомментировать (точка с запятой в начале строки), либо удалить. Тогда верхний конфиг будет работать нормально.

А  чтобы php-fpm жил на сокете

Нужно в /etc/php/7.3/fpm/pool.d/  писать так

строк… listen = /var/run/ строк…

Скорее всего оно так написано по умолчанию. Ещё рекомендуют раскомментировать

_clients = 127.0.0.1

Типа, чтобы запросы только от локлхоста обрабатывались. При этом в конфигах nginx надо перенаправлять запросы на этот самый сокет

location / { … location ~ [^/]\.php(/|$) { …. fastcgi_pass unix:/var/run/php/; fastcgi_index ; include /etc/nginx/fastcgi_params; } }

Обрати внимание на директиву fastcgi_pass, в первом и втором случае она принципиально отличаются.

Всем рок!

Файловая структура

Переходим к организации папок и файлов нашей сборки. Создадим на диске какую-нибудь директорию, которая будет корневой для нашей сборки и в ней по порядку создаем следующие директории:

  • www — в этой папке будут лежать файлы наших проектов, по директории на каждый проект;
  • mysql — в этой папке будут храниться файлы наших баз данных;
  • logs — здесь будет собриать логи из разных образов;
  • hosts — здесь будут храниться файлы конфигурации nginx для наших проектов;
  • images — папка с нашими образами — компонентами нашей системы.

Еще не помешает создать дефолтный проект, чтобы проверить работоспособность нашей сборки когда все запустится. В директории www создадим директорию тестового проекта — с одим единственным файлом Содердимое файла классическое:

<?php phpinfo();

Также в корне будет лежать наш — сердце любой docker-конфигурации 🙂