Instalando o PHP 5.3 no Debian Stretch (9)

5

Estou migrando um servidor muito antigo (Debian etch) para o Debian Stretch e cada aplicativo desenvolvido tem problemas de PHP, era esperado. Alguns podem ser corrigidos, alguns não podem (como vários drupal 6 sites). No futuro, um único aplicativo será servido no PHP7.0, mas até esse dia chegar, eu preciso do PHP5.3 para servi-los.

Eu sei que o Debian stretch tem algum tipo de suporte "nativo" para versões de PHP co-instaláveis, mas todos os exemplos que eu encontrei são com PHP5.6 (versão de Jessie): link

Além disso, eu encontrei alguns exemplos de PHP5.3 e PHP5.4 ou PHP5.6 trabalhando juntos no Debian Jessie, Wheezy, etc, mas não no Debian Stretch (PHP7.0): link

Então, primeiro, eu preciso saber se é possível ter PHP7.0 e PHP5.3 trabalhando juntos no apache2 no Debian Stretch.

Em segundo lugar, eu preciso descobrir como isso pode ser feito .

Eu não sou sysadmin, então meu conhecimento sobre o Debian está crescendo dia a dia do zero.

Obrigado.

    
por raguchi 18.07.2017 / 11:14

2 respostas

3

Uma semana depois, consegui fazê-lo funcionar, mas de uma maneira diferente. Parei de brincar com o host e comecei a aprender como o Docker pode salvar minha vida.

Este post me deu a chave: Docker - Execute o Apache no host e no contêiner de diferentes sites

Minha iniciática lida sobre o docker foi esta: Desenvolvimento Web PHP com Docker

Resumindo, não preciso instalar o apache2.2 & PHP5.3 no meu servidor host, eu posso ter um contêiner isolado onde eu possa instalar qualquer coisa que eu precise (geralmente um serviço) e esquecer sobre possíveis incompatibilidades com a versão do sistema operacional host. O Docker gerencia tudo isso. Então eu posso ter um container com o apache 2.2 + PHP 5.3 como seria em um sistema operacional squeeze debian. Outro container com o apache 2.2 + PHP 5.4 como seria em um Wheezy, outro com o apache 2.4 + PHP7.0 como em stretch e assim por diante. Tudo funcionando como o mesmo tempo e servindo domínios diferentes. Para conseguir isso, faça com que o apache / nginx no host funcione como proxy reverso, redirecionando cada domínio para um contêiner apache-php diferente, graças ao mapeamento da porta do docker. Você nem precisa ter o apache / nginx no host, ele pode estar em um container também.

O jeito do docker é ter cada (micro) serviço em um container, assim você pode ter o mariaDB em outro container, etc.

Minhas etapas (resumidas): ( não posso postar mais do que links, quando obtiver reputação suficiente vou editar e adicioná-los )

0 - Leia sobre o docker (quanto mais, melhor): como criar imagens com o Dockerfile , melhores práticas , rede dentro do docker, ...

1 - Instalar o Docker: siga o guia oficial sempre.

2 - Crie um diretório com o nome da sua imagem futura (/ home / user / docker / images / apache22php53, por exemplo), crie o seu Dockerfile e configs (virtualhostconf neste caso) meu Dockerfile :

FROM debian:squeeze

LABEL maintainer="[email protected]"

# 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"]

Dentro da pasta coloque seu arquivo conf virtualhost dentro do caminho: conf / apache / virtualhosts /

3 - construa a imagem com (cd anterior dentro do diretório):

sudo docker build -t apache22php53 .

4 - inicie o contêiner com:

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

O Docker mapeará a porta do host (-p) 2253 para a porta do contêiner 80. Estamos montando (-v) também a raiz do nosso documento hospedeiro (/ var / www / html) na raiz do documento container-apache (em squeeze é / var / www). O está configurando também o nome do contêiner (--name).

5 - ssh para o contêiner com:

sudo docker exec -ti apache22php53 /bin/bash

e inicie o apache se necessário (como no meu caso). "exit" para voltar ao host cli.

6 - navegue até ... yourvhostdomain.com:2253 e você deverá ver seu apache sendo executado com o PHP5.3 carregado.

Este é o básico. Depois disso, você aprenderá sobre como montar dados de host (www, bancos de dados, etc) dentro de contêineres, como os contêineres podem se comunicar entre eles e com o host (IPs privados na rede docker), como usar o docker-compose para configurar vários contêineres de uma só vez (web, banco de dados, etc), proxy reverso para vários servidores web de containers, etc.

    
por 28.07.2017 / 12:35
3

Eu me deparei com um problema semelhante e consegui fazê-lo funcionar.

Eu tive que instalar um servidor com o debian 9 / nginx / php5.4, portanto, embora ele não corresponda exatamente aos seus pré-requisitos, suponho que a solução seja semelhante. Vou listar os passos que tomei que resolveram para mim.

Basicamente, você precisa instalar o php a partir de fontes, e isso representa um problema se você precisar de suporte a openssl (--with-openssl), porque versões antigas do PHP (< 7.0) não suportam openssl > = 1.1. 0, que é o padrão no debian 9. Então você tem que construir uma versão mais antiga do openssl (eu peguei 1.0.1u).

Mas vamos instalar algumas dependências primeiro.

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

Depois, criaremos 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

Como uma reação em cadeia, você terá que construir libcurl e libc-client (para suporte a imap) com seu openssl recém-construído. Vamos começar com 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

Em seguida, libc-client. Eu realmente usei as fontes do debian 8, já que incluía algumas correções. A própria construção falhou, mas ainda produzia o c-client.a, que é tudo de que eu precisava.

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

Com isso, eu tive tudo o que preciso para compilar o PHP5.4. Por favor, note que eu tinha um aviso de ligações postgresql na compilação (por causa da incompatibilidade de versões local vs openssl do sistema), então eu acho que você terá que construir sua própria libpq se você quiser usá-las.

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

As únicas coisas restantes são a criação dos arquivos php.ini e php-fpm.conf, que são triviais, a configuração do soquete php-fpm e a criação de um initscript (há muitos exemplos online, não posso postar o arquivo completo aqui), e a configuração do seu servidor web (fastcgi no socket).

    
por 25.07.2017 / 15:06