Estou migrando um servidor muito antigo (Debian etch) para o Debian Stretch e todos os aplicativos desenvolvidos têm problemas de PHP, era esperado. Alguns podem ser corrigidos, outros não (como vários sites do drupal 6). No futuro, um único aplicativo será veiculado no PHP7.0, mas até esse dia chegar, preciso do PHP5.3.
Eu sei que o Debian Stretch tem algum tipo de suporte "nativo" para versões PHP co-instaláveis, mas todos os exemplos que encontrei são no PHP5.6 (versão de Jessie): https://pehapkari.cz/blog/2017/03/27 / multiple-php-versões-da-maneira-fácil /
Além disso, 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): /superuser/913792 / php-5-3-10-on-debian-jessie
Então, primeiro, eu preciso saber se é possível ter o PHP7.0 e o PHP5.3 trabalhando juntos no apache2 no Debian Stretch.
Segundo, preciso descobrir como isso pode ser feito .
Eu não sou sysadmin, então meu conhecimento do debian está crescendo dia a dia do zero.
Obrigado.
Respostas:
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, presumo que a solução seja semelhante. Vou listar os passos que tomei que resolveram para mim.
Basicamente, você precisa instalar o php a partir das fontes, e isso representa um problema se você precisar do suporte ao openssl (--with-openssl), porque as versões antigas do PHP (<7.0) não suportam o openssl> = 1.1.0, que é o padrão no debian 9. Então você tem que construir uma versão mais antiga do openssl (peguei a 1.0.1u).
Mas vamos instalar algumas dependências primeiro.
Então vamos construir o openssl.
Como uma reação em cadeia, você terá que criar o libcurl e o libc-client (para suporte ao imap) com o seu openssl recém-construído. Vamos começar com libcurl.
Então, libc-client. Na verdade, eu usei os fontes do debian 8, pois ele incluía alguns patches. A compilação em si falhou, mas ainda produziu c-client.a, que é tudo o que eu precisava.
Com isso, eu tinha tudo o que precisava para construir o PHP5.4. Observe que eu recebi um aviso para ligações do postgresql na compilação (por causa da incompatibilidade de versão openssl local x sistema), então acho que você precisará criar sua própria libpq se desejar usá-las.
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 da web (fastcgi no soquete).
fonte
/usr/local/imap-2007f/ipopd/ipop2d.c
Uma semana depois, consegui fazê-lo funcionar, mas de uma maneira diferente. Parei de mexer com o host e comecei a aprender como o Docker pode salvar minha vida.
Esta postagem me deu a chave: Docker - Execute o Apache no host e no contêiner para diferentes sites
Minha leitura inicial sobre docker foi esta: PHP Web Development with Docker
Resumindo, não preciso instalar o apache2.2 e o PHP5.3 no servidor host, posso ter um contêiner isolado onde posso instalar tudo o que preciso (geralmente um serviço) e esquecer possíveis incompatibilidades com a versão do SO host. O Docker gerencia tudo. Então, eu posso ter um contêiner com o apache 2.2 + PHP 5.3, como seria em um sistema operacional squeeze debian. Outro contêiner com o apache 2.2 + PHP 5.4 como seria em um Wheezy, outro com o apache 2.4 + PHP7.0 como no stretch e assim por diante. Todos trabalhando ao 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 apache / nginx no host, ele também pode estar em um contêiner.
A maneira do docker é ter cada (micro) serviço em um contêiner, para que você possa ter o mariaDB em outro contêiner, etc.
Minhas etapas (resumidas): ( não posso postar mais do que links, quando tiver reputação suficiente, vou editá-las e adicioná-las )
0 - Leia sobre o docker (quanto mais, melhor): como criar imagens com o Dockerfile , práticas recomendadas , redes dentro do docker, ...
1 - Instale o Docker: siga sempre o guia oficial .
2 - Crie um diretório com o nome da sua imagem futura (/ home / user / docker / images / apache22php53, por exemplo), por dentro, crie seu Dockerfile e configs (virtualhost conf neste caso) meu Dockerfile foi:
Dentro do diretório, coloque seu arquivo conf virtualhost dentro do caminho: conf / apache / virtualhosts /
3 - construa a imagem com (cd anterior dentro do diretório):
4 - lance o contêiner com:
O Docker mapeará a porta do host (-p) 2253 para a porta do contêiner 80. Também estamos montando (-v) a raiz do documento host (/ var / www / html) na raiz do documento apache-container (no squeeze é / var / www). Também estão definindo o nome do contêiner (--name).
5 - ssh para contêiner com:
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ê verá o seu apache rodando com o PHP5.3 carregado.
Este é o básico. Depois disso, você aprenderá sobre como montar dados do 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 contêineres etc.
fonte