Установка PHP 5.3 на растяжку Debian (9)

Я переношу очень старый сервер (Debian etch) в Debian Stretch, и каждое отдельное приложение разработало проблемы с PHP, ожидалось. Некоторые из них могут быть исправлены, некоторые из них не могут (как несколько сайтов для Drupal 6). В будущем одно приложение будет обслуживаться под PHP7.0, но до этого дня мне нужно, чтобы PHP5.3 обслуживал их.

Я знаю, что растяжка Debian имеет некоторую «родную» поддержку для совместимых версий PHP, но все примеры, которые я нашел, – это PHP5.6 (версия Джесси): https://pehapkari.cz/blog/2017/03/27 / множественная PHP-версия-The-легкий путь /

Кроме того, я нашел несколько примеров PHP5.3 и PHP5.4 или PHP5.6, работающих вместе над Debian Jessie, Wheezy и т. Д., Но не для Debian Stretch (PHP7.0): https://superuser.com/questions/913792 / PHP-5-3-10-на-Debian-Jessie

Итак, во-первых, мне нужно знать, может ли PHP7.0 и PHP5.3 работать вместе на apache2 в Debian Stretch.

Во-вторых, мне нужно выяснить, как это можно сделать .

Я не сисадмин, поэтому мои дебианские знания растут изо дня в день с нуля.

Спасибо.

  • Как обновить PHP с 5.4.16 до> = PHP 5.6.5 / PHP 7 на Centos 7?
  • Как установить extenion php_intl в centos7?
  • Кактусы перестали работать после обновления до растяжки
  • Как включить несколько конфигурационных файлов в php-fpm?
  • Ожидайте PECL для PHP 7
  • httpd (apache2) сервер не анализирует * .php файлы, а отображает их как текст с установленным php-модулем в arch-linux
  • Apache2 Не удалось запустить после установки php5 alonside php7 на Ubuntu 16.04
  • Как заменить Php7 install from dotdeb на php7 от Stretch
  • 2 Solutions collect form web for “Установка PHP 5.3 на растяжку Debian (9)”

    Через неделю мне удалось заставить его работать, но по-другому. Я прекратил возиться с хозяином и начал узнавать, как Докер может спасти мою жизнь.

    Этот пост дал мне ключ: Docker – запустить Apache на хосте и контейнере для разных сайтов

    Мое иноязычное чтение о докере было таким: PHP Web Development с Docker

    Подводя итог, мне не нужно устанавливать apache2.2 и PHP5.3 на моем хост-сервере, у меня может быть изолированный контейнер, где я могу установить все, что мне нужно (обычно одну службу), и забыть о возможных несовместимостях с версией хост-OS. Докер управляет всем этим. Таким образом, у меня может быть один контейнер с apache 2.2 + PHP 5.3, как это было бы в операционной системе debian. Другой контейнер с apache 2.2 + PHP 5.4, как это было бы в Wheezy, другое с apache 2.4 + PHP7.0 как в растяжке и так далее. Все работают одновременно и обслуживают разные области. Чтобы добиться последнего, apache / nginx на хосте будет работать как обратный прокси-сервер, перенаправляющий каждый домен в другой контейнер apache-php благодаря сопоставлению портов докеров. Вам даже не нужно иметь apache / nginx на хосте, он также может быть в контейнере.

    Докеры должны иметь каждый (микро) сервис в контейнере, поэтому вы можете иметь mariaDB в другом контейнере и т. Д.

    Мои шаги (резюмированные): ( я не могу писать больше, чем ссылки, когда я получаю достаточную репутацию, я отредактирую и добавлю их )

    0 – Читайте о докере (чем больше, тем лучше): как создавать изображения с помощью Dockerfile, передовой практики, создания сетей внутри докеров, …

    1 – Установите Docker: всегда следуйте официальному руководству.

    2 – Создайте каталог с вашим будущим именем изображения (/ home / user / docker / images / apache22php53, например), внутри создайте свой файл Docker и конфиги (в этом случае виртуальный хост) мой файл Docker был:

    FROM debian:squeeze LABEL maintainer="raguchi@gmail.com" # squeeze new mirrors RUN echo "deb http://archive.debian.org/debian/ squeeze contrib main non-free" > /etc/apt/sources.list RUN apt-get update # Common packages RUN apt-get update && \ apt-get install -y --force-yes curl wget RUN apt-get update && \ apt-get install -y --force-yes \ apache2 \ libapache2-mod-php5 \ ntp \ php5 \ php5-curl \ php5-gd \ php5-ldap \ php5-mcrypt \ php5-mysql \ vim RUN a2enmod \ php5 \ rewrite \ ssl ENV APACHE_RUN_USER www-data ENV APACHE_RUN_GROUP www-data ENV APACHE_LOG_DIR /var/log/apache2 ENV APACHE_LOCK_DIR /var/lock/apache2 ENV APACHE_PID_FILE /var/run/apache2.pid # RUN chown -R www-data:www-data /var/www COPY conf/apache/virtualhosts /etc/apache2/sites-enabled # disable default virtualhost RUN a2dissite 000-default EXPOSE 80 EXPOSE 443 CMD ["/usr/sbin/apache2ctl", "-D", "FOREGROUND"] 

    Внутри каталога введите свой файл confhost в путь: conf / apache / virtualhosts /

    3 – постройте изображение с (предыдущим cd внутри каталога):

     sudo docker build -t apache22php53 . 

    4 – запустите контейнер с:

     sudo docker run -ti -d -p 2253:80 -v /var/www/html:/var/www --name apache22php53 apache22php53 /bin/bash 

    Docker будет отображать (-p) 2253 хост-порт на 80 контейнерных портов. Мы монтируем (-v) также наш корень документа узла (/ var / www / html) в корневом документе apache-container (в сжатии есть / var / www). Параметр также задает имя контейнера (–name).

    5 – ssh в контейнер с:

     sudo docker exec -ti apache22php53 /bin/bash 

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

    6 – перейдите к … yourvhostdomain.com:2253, и вы увидите, что ваш apache работает с загруженным PHP5.3.

    Это основы. После этого вы узнаете о том, как монтировать данные хоста (www, базы данных и т. Д.) Внутри контейнеров, как контейнеры могут связываться между ними и с хостом (приватные IP-адреса в сети докеров), как использовать компоновку докеров для настройки нескольких контейнеров сразу (веб, база данных и т. д.), обратный прокси-сервер для веб-серверов нескольких контейнеров и т. д.

    Я наткнулся на подобную проблему и сумел заставить ее работать.

    Мне пришлось установить сервер с debian 9 / nginx / php5.4, поэтому, хотя он не соответствует вашим предпосылкам, я предполагаю, что решение похоже. Я перечислю шаги, которые я сделал, которые решили это для меня.

    В принципе, вам нужно установить php из источников, и это создает проблему, если вам нужна поддержка openssl (–with-openssl), поскольку старые версии PHP (<7.0) не поддерживают openssl> = 1.1.0, что по умолчанию в debian 9. Итак, вам нужно построить более старую версию openssl (я взял 1.0.1u).

    Но давайте сначала определим некоторые зависимости.

     apt install build-essential checkinstall zip autoconf apt install libfcgi-dev libfcgi0ldbl libmcrypt-dev libssl-dev libc-client2007e-dev libkrb5-dev libcurl4-openssl-dev apt install libxml2-dev libcurl4-openssl-dev libpcre3-dev libbz2-dev libjpeg-dev libpng-dev libfreetype6-dev libmcrypt-dev libmhash-dev freetds-dev libmariadbclient-dev-compat unixodbc-dev libxslt1-dev 

    Затем мы построим openssl.

     cd /opt/ wget https://www.openssl.org/source/old/1.0.1/openssl-1.0.1u.tar.gz tar xzf openssl-1.0.1u.tar.gz cd openssl-1.0.1u ./config shared --openssldir=/usr/local/openssl/ enable-ec_nistp_64_gcc_128 make depend make make install ln -s /usr/local/openssl/lib /usr/local/openssl/lib/x86_64-linux-gnu 

    Как цепная реакция, вам придется создавать libcurl и libc-client (для поддержки imap) с помощью только что созданного openssl. Мы начнем с libcurl.

     cd /opt/ wget https://curl.haxx.se/download/curl-7.26.0.tar.gz tar xzf curl-7.26.0.tar.gz cd curl-7.26.0 env PKG_CONFIG_PATH=/usr/local/openssl/lib/pkgconfig LDFLAGS=-Wl,-rpath=/usr/local/openssl/lib ./configure --with-ssl=/usr/local/openssl --with-zlib --prefix=/usr/local/curl make make install 

    Затем, libc-client. Я фактически использовал источники из debian 8, так как он включал некоторые исправления. Сама сборка не удалась, но все же произвела c-client.a, и это все, что мне было нужно.

     cd /tmp/ wget http://http.debian.net/debian/pool/main/u/uw-imap/uw-imap_2007f\~dfsg-2.dsc wget http://http.debian.net/debian/pool/main/u/uw-imap/uw-imap_2007f\~dfsg.orig.tar.gz wget http://http.debian.net/debian/pool/main/u/uw-imap/uw-imap_2007f\~dfsg-2.debian.tar.gz dpkg-source -x uw-imap_2007f\~dfsg-2.dsc imap-2007f mv imap-2007f /usr/local/ cd /usr/local/imap-2007f/ touch {ipv6,lnxok} make slx SSLINCLUDE=/usr/local/openssl/include/ SSLLIB=/usr/local/openssl/lib EXTRAAUTHENTICATORS=gss mkdir lib include cp c-client/*.c lib/ cp c-client/*.h include/ cp c-client/c-client.a lib/libc-client.a ln -s /usr/lib/libc-client.a /usr/lib/x86_64-linux-gnu/libc-client.a 

    При этом у меня было все, что мне нужно для создания PHP5.4. Обратите внимание, что у меня было предупреждение о связывании postgresql в компиляции (из-за несоответствия версии local vs system openssl), поэтому я думаю, вам нужно будет создать собственный libpq, если вы хотите их использовать.

     cd /opt/ PHP_VER=5.4.45 wget http://museum.php.net/php5/php-${PHP_VER}.tar.gz tar xzf php-${PHP_VER}.tar.gz cd php-${PHP_VER} LDFLAGS="-Wl,-rpath=/usr/local/openssl/lib,-rpath=/usr/local/curl/lib" './configure' --prefix=/usr/local/php-${PHP_VER} '--with-zlib-dir' '--with-freetype-dir' '--enable-fpm' '--enable-mbstring' '--with-libxml-dir=/usr' '--enable-soap' '--enable-calendar' '--with-curl=/usr/local/curl' '--with-mcrypt' '--with-zlib' '--with-gd' '--disable-rpath' '--enable-inline-optimization' '--with-bz2' '--with-zlib' '--enable-sockets' '--enable-sysvsem' '--enable-sysvshm' '--enable-mbregex' '--with-mhash' '--enable-zip' '--with-pcre-regex' '--with-mysql' '--with-pdo-mysql' '--with-mysqli' '--with-jpeg-dir=/usr' '--with-png-dir=/usr' '--enable-gd-native-ttf' '--enable-cgi' '--with-pear' '--enable-memcache' '--with-openssl=/usr/local/openssl' '--with-imap=/usr/local/imap-2007f' '--with-kerberos' '--with-imap-ssl' '--with-libdir=lib/x86_64-linux-gnu' LDFLAGS="-Wl,-rpath=/usr/local/openssl/lib,-rpath=/usr/local/curl/lib" make make install 

    Осталось только создавать файлы php.ini и php-fpm.conf, которые являются тривиальными, конфигурация сокета php-fpm и создание initscript (есть много примеров онлайн, я не могу опубликовать полный файл здесь) и конфигурацию вашего веб-сервера (fastcgi on socket).

    Linux и Unix - лучшая ОС в мире.