Estoy migrando un servidor muy antiguo (Debian etch) a Debian Stretch y se esperaba que todas las aplicaciones desarrolladas tengan problemas de PHP. Algunos pueden repararse, otros no (como varios sitios de drupal 6). En el futuro, una sola aplicación se servirá con PHP7.0, pero hasta ese día necesito PHP5.3.
Sé que Debian stretch tiene algún tipo de soporte "nativo" para las versiones de PHP coinstalables, pero todos los ejemplos que he encontrado son con PHP5.6 (versión de Jessie): https://pehapkari.cz/blog/2017/03/27 / multiple-php-version-the-easy-way /
Además, he encontrado algunos ejemplos de PHP5.3 y PHP5.4 o PHP5.6 trabajando juntos en Debian Jessie, Wheezy, etc., pero no para Debian Stretch (PHP7.0): /superuser/913792 / php-5-3-10-on-debian-jessie
Entonces, primero, necesito saber si es posible tener PHP7.0 y PHP5.3 trabajando juntos en apache2 en Debian Stretch.
En segundo lugar, necesito averiguar cómo se puede hacer esto .
No soy administrador de sistemas, así que mi conocimiento de Debian está creciendo día a día desde cero.
Gracias.
Respuestas:
Me topé con un problema similar y logré hacerlo funcionar.
Tuve que instalar un servidor con Debian 9 / nginx / php5.4, por lo que si bien no coincide exactamente con sus requisitos previos, supongo que la solución es similar. Voy a enumerar los pasos que tomé que me resolvieron.
Básicamente, necesita instalar php desde las fuentes, y esto plantea un problema si necesita soporte para openssl (--with-openssl), porque las versiones antiguas de PHP (<7.0) no admiten openssl> = 1.1.0, que es el valor predeterminado en debian 9. Por lo tanto, debe crear una versión anterior de openssl (tomé 1.0.1u).
Pero primero instalemos algunas dependencias.
Entonces construiremos openssl.
Como reacción en cadena, tendrá que compilar libcurl y libc-client (para soporte de imap) con su openssl recién construido. Comenzaremos con libcurl.
Entonces, libc-client. De hecho, utilicé las fuentes de Debian 8, ya que incluía algunos parches. La compilación en sí falló, pero todavía produjo c-client.a, que es todo lo que necesitaba.
Con esto, tenía todo lo que necesitaba para construir PHP5.4. Tenga en cuenta que tuve una advertencia para los enlaces postgresql en la compilación (debido a la falta de coincidencia de la versión de OpenSL local con el sistema), por lo que creo que tendrá que construir su propia libpq si desea utilizarlos.
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).
fuente
/usr/local/imap-2007f/ipopd/ipop2d.c
Una semana después logré hacerlo funcionar pero de una manera diferente. Dejé de jugar con el anfitrión y comencé a aprender cómo Docker puede salvarme la vida.
Esta publicación me dio la clave: Docker: ejecutar Apache en el host y el contenedor para diferentes sitios web
Mi lectura inicial sobre Docker fue esta: Desarrollo web PHP con Docker
En resumen, 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 maneja todo. Entonces puedo tener un contenedor con apache 2.2 + PHP 5.3 como lo estarí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 estiramiento y así sucesivamente. Todos trabajando al mismo tiempo y sirviendo diferentes dominios. Para lograr esto último, haga que apache / nginx en el host funcione como proxy inverso que redirige 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 acoplamiento es tener cada (micro) servicio en un contenedor, para que pueda tener mariaDB en otro contenedor, etc.
Mis pasos (resumidos): ( No puedo publicar más que en enlaces, cuando tenga suficiente reputación los editaré y los agregaré )
0 - Lea sobre Docker (cuanto más mejor): cómo construir imágenes con el Dockerfile , mejores prácticas , redes dentro de Docker, ...
1 - Instalar Docker: siga siempre la guía oficial .
2 - Cree un directorio con su futuro nombre de imagen (/ home / user / docker / images / apache22php53 eg), dentro cree su Dockerfile y configs (virtualhost conf en este caso) mi Dockerfile fue:
Dentro del directorio, coloque su archivo conf virtualhost dentro de la ruta: conf / apache / virtualhosts /
3 - construye la imagen con (cd anterior dentro del directorio):
4 - inicie el contenedor con:
Docker asignará (-p) el puerto de host 2253 al puerto de 80 contenedores. Estamos montando (-v) también nuestra raíz del documento host (/ var / www / html) en la raíz del documento apache-container (en compresión es / var / www). También están configurando el nombre del contenedor (--name).
5 - ssh al contenedor con:
e inicie apache si es necesario (como en mi caso). "salir" para volver al host cli.
6 - navegue a ... yourvhostdomain.com:2253 y debería ver su apache ejecutándose con PHP5.3 cargado.
Esto es lo básico. 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 acopladores), 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.
fuente