Я перевожу очень старый сервер (Debian etch) на Debian Stretch, и каждое разработанное приложение имеет проблемы с PHP, как и ожидалось. Некоторые могут быть исправлены, некоторые не могут (как несколько сайтов drupal 6). В будущем когда-нибудь одно приложение будет обслуживаться под PHP7.0, но до этого дня мне нужен PHP5.3, обслуживающий их.
Я знаю, что в Debian stretch есть какая-то «нативная» поддержка совместно устанавливаемых версий PHP, но все примеры, которые я нашел, относятся к PHP5.6 (версия Jessie): https://pehapkari.cz/blog/2017/03/27 / множественная-PHP-версия самого простой путь /
Кроме того, я нашел несколько примеров работы PHP5.3 и PHP5.4 или PHP5.6 вместе с Debian Jessie, Wheezy и т. Д., Но не над Debian Stretch (PHP7.0): /superuser/913792 / PHP-5-3-10-на-Debian-Jessie
Итак, во-первых, мне нужно знать, возможно ли совместное использование PHP7.0 и PHP5.3 для apache2 в Debian Stretch.
Во-вторых, мне нужно выяснить, как это можно сделать .
Я не являюсь системным администратором, поэтому мои знания по Debian растут день ото дня с нуля.
Спасибо.
Ответы:
Я наткнулся на похожую проблему и сумел заставить ее работать.
Мне пришлось установить сервер с Debian 9 / nginx / php5.4, поэтому, хотя он не совсем соответствует вашим требованиям, я предполагаю, что решение аналогично. Я перечислю шаги, которые я сделал, который решил это для меня.
По сути, вам нужно установить php из исходников, и это создает проблему, если вам нужна поддержка openssl (--with-openssl), потому что старые версии PHP (<7.0) не поддерживают openssl> = 1.1.0, что по умолчанию в Debian 9. Поэтому вы должны собрать более старую версию openssl (я взял 1.0.1u).
Но давайте сначала установим некоторые зависимости.
Тогда мы будем строить openssl.
В качестве цепной реакции вам придется собрать libcurl и libc-client (для поддержки imap) с помощью только что созданного openssl. Начнем с libcurl.
Затем libc-клиент. Я на самом деле использовал исходники Debian 8, так как он включал некоторые патчи. Сама сборка не удалась, но все равно выдала c-client.a, и это все, что мне было нужно
С этим у меня было все, что мне нужно для сборки PHP5.4. Обратите внимание, что у меня было предупреждение о привязках postgresql при компиляции (из-за несоответствия версий локальной и системной версий openssl), поэтому я думаю, что вам придется создать свой собственный libpq, если вы хотите их использовать.
Осталось только создание файлов php.ini и php-fpm.conf, которые являются тривиальными, настройка сокета php-fpm и создание начального сценария (есть много примеров в Интернете, я не могу опубликовать полный файл здесь) и конфигурации вашего веб-сервера (fastcgi on socket).
источник
/usr/local/imap-2007f/ipopd/ipop2d.c
Через неделю мне удалось заставить его работать, но по-другому. Я перестал возиться с хозяином и начал изучать, как Docker может спасти мою жизнь.
Этот пост дал мне ключ: Docker - Запустите Apache на хосте и контейнере для разных сайтов.
Мое начальное чтение о докере было таким: PHP Web Development с Docker
Подводя итог, мне не нужно устанавливать apache2.2 и PHP5.3 на моем хост-сервере, у меня может быть изолированный контейнер, в который я могу установить все, что мне нужно (обычно один сервис), и забыть о возможных несовместимостях с версией хост-ОС. Докер управляет всем этим. Таким образом, я могу иметь один контейнер с apache 2.2 + PHP 5.3, как это было бы в операционной системе Debian Squeeze. Другой контейнер с apache 2.2 + PHP 5.4, как это было бы в Wheezy, другой с apache 2.4 + PHP7.0 как в растяжке и так далее. Все работают одновременно и обслуживают разные домены. Чтобы добиться последнего, сделайте на хосте apache / nginx, чтобы он работал в качестве обратного прокси-сервера, перенаправляя каждый домен в отдельный контейнер apache-php благодаря сопоставлению портов докера. Вам даже не нужно иметь apache / nginx на хосте, он также может быть в контейнере.
Способ докера состоит в том, чтобы каждая (микро) служба была в контейнере, чтобы вы могли иметь mariaDB в другом контейнере и т. Д.
Мои шаги (кратко): ( Я не могу публиковать больше, чем ссылки, когда я наберу достаточно репутации, я буду редактировать и добавлять их )
0 - Узнайте о докере (чем больше, тем лучше): как создавать образы с помощью Dockerfile , лучшие практики , работа в сети в Docker, ...
1 - Установите Docker: всегда следуйте официальному руководству .
2 - Создайте каталог с вашим будущим именем образа (например, / home / user / docker / images / apache22php53), внутри создайте ваш Dockerfile и конфиги (в данном случае - virtualhost conf), мой Dockerfile был:
В директории поместите файл conf вашего виртуального хоста в путь: conf / apache / virtualhosts /
3 - построить изображение с помощью (предыдущий компакт-диск внутри директории):
4 - запустить контейнер с:
Docker отобразит (-p) хост-порт 2253 на 80 контейнерный порт. Мы монтируем (-v) также наш корневой каталог хоста (/ var / www / html) в корневой каталог документа apache-контейнера (в squeeze это / var / www). Устанавливаются также имя контейнера (--name).
5 - SSH в контейнер с:
и при необходимости запустите apache (как в моем случае). "выход", чтобы вернуться к хозяину кли.
6 - перейдите к ... yourvhostdomain.com:2253, и вы должны увидеть, что ваш apache работает с загруженным PHP5.3.
Это основы. После этого вы узнаете, как монтировать данные хоста (www, базы данных и т. Д.) Внутри контейнеров, как контейнеры могут взаимодействовать между ними и с хостом (приватные IP-адреса в сети Docker), как использовать docker-compose для настройки нескольких контейнеров. сразу (веб, база данных и т. д.), обратный прокси-сервер для нескольких контейнерных веб-серверов и т. д.
источник