Saltar al contenido

Instalación de PHP 5.3 en Debian Stretch (9)

Nuestro team de expertos luego de muchos días de investigación y de recopilar de datos, encontramos la solución, queremos que todo este artículo sea de gran utilidad para tu plan.

Solución:

Me encontré con un problema similar y logré hacerlo funcionar.

Tuve que instalar un servidor con debian 9 / nginx / php5.4, así que aunque no coincide exactamente con sus requisitos previos, supongo que la solución es similar. Enumeraré los pasos que tomé y que me solucionaron.

Básicamente, necesita instalar php desde las fuentes, y esto plantea un problema si necesita compatibilidad con openssl (–with-openssl), porque las versiones antiguas de PHP (<7.0) don't support openssl>= 1.1.0, que es el predeterminado en Debian 9. Así que tienes que construir una versión más antigua de openssl (tomé 1.0.1u).

Pero instalemos algunas dependencias primero.

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

Luego, crearemos 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 reacción en cadena, tendrá que compilar libcurl y libc-client (para soporte de imap) con su openssl recién construido. Empezaremos con 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

Entonces, libc-client. De hecho, utilicé las fuentes de debian 8, ya que incluía algunos parches. La compilación en sí falló, pero aún así produjo c-client.a, que es todo lo que necesitaba.

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

Con esto, tenía todo lo que necesitaba para construir PHP5.4. Tenga en cuenta que recibí una advertencia para los enlaces de postgresql en la compilación (debido a la falta de coincidencia de la versión de openssl del sistema con el local), por lo que creo que tendrá que crear su propia libpq si desea usarlos.

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

Lo único que queda es la creación de archivos php.ini y php-fpm.conf, que son triviales, la configuración del socket php-fpm y la creación de un initscript (hay muchos ejemplos en línea, no puedo publicar el archivo completo aquí) y la configuración de su servidor web (fastcgi en socket).

Una semana después logré que funcionara pero de una manera diferente. Dejé de jugar con el anfitrión y comencé a aprender cómo Estibador puede salvar mi vida.

Esta publicación me dio la key: Docker: ejecute Apache en el host y el contenedor para diferentes sitios web

Mi lectura inicial sobre Docker fue esta: Desarrollo web PHP con Docker

Resumiendo, no necesito instalar apache2.2 y PHP5.3 en mi servidor host, puedo tener un contenedor aislado donde puedo instalar todo lo que necesito (generalmente un servicio) y olvidarme de posibles incompatibilidades con la versión del sistema operativo host. Docker lo gestiona todo. Entonces puedo tener un contenedor con apache 2.2 + PHP 5.3 como lo sería en un sistema operativo debian squeeze. Otro contenedor con apache 2.2 + PHP 5.4 como estaría en un Wheezy, otro con apache 2.4 + PHP7.0 como en stretch y así sucesivamente. Todos trabajando al mismo tiempo y sirviendo a diferentes dominios. Para lograr esto último, haga que apache / nginx en el host funcione como proxy inverso redireccionando cada dominio a un contenedor apache-php diferente gracias al mapeo de puertos docker. Ni siquiera necesita tener apache / nginx en el host, también puede estar en un contenedor.

La forma de Docker es tener cada (micro) servicio en un contenedor, para que pueda tener mariaDB en otro contenedor, etc.

Mis pasos (resumido): (No puedo publicar más que en enlaces, cuando tenga suficiente reputación, los editaré y agregaré)

0 – Lea sobre Docker (cuanto más, mejor): cómo crear imágenes con Dockerfile, mejores prácticas, redes dentro de Docker, …

1 – Instalar Docker: siga la guía oficial siempre.

2 – Cree un directorio con el nombre de su imagen futura (/ home / user / docker / images / apache22php53 eg), dentro cree su Dockerfile y configs (virtualhost conf en este caso) mi Dockerfile era:

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 del directorio, coloque su archivo conf de virtualhost dentro de la ruta: conf / apache / virtualhosts /

3 – construye la imagen con (cd anterior dentro del directorio):

sudo docker build -t apache22php53 .

4 – lanzar el contenedor con:

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

Docker asignará (-p) el puerto de host 2253 al puerto de 80 contenedores. Estamos montando (-v) también nuestra raíz de documentos de host (/ var / www / html) en la raíz de documentos de apache-container (en squeeze es / var / www). También están configurando el nombre del contenedor (–nombre).

5 – ssh al contenedor con:

sudo docker exec -ti apache22php53 /bin/bash

e inicie apache si es necesario (como en mi caso). “exit” para volver al host cli.

6 – navegue a … yourvhostdomain.com:2253 y debería ver su apache ejecutándose con PHP5.3 cargado.

Estos son los fundamentos. Después de eso, aprenderá cómo montar datos de host (www, bases de datos, etc.) dentro de contenedores, cómo los contenedores pueden comunicarse entre ellos y con el host (IP privadas en la red de Docker), cómo usar docker-compose para configurar múltiples contenedores. a la vez (web, base de datos, etc.), proxy inverso para servidores web de múltiples contenedores, etc.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *