Como instalar o php 7 para rodar ao lado do php 5 no ubuntu com nginx

9

Eu quero experimentar o php 7 e fazer com que meu site funcione no php 7 ao mesmo tempo, mantendo outros sites trabalhando no php 5 apenas por precaução. para que, a partir da configuração do host virtual do domínio, eu possa decidir qual php será executado.

Eu olhei para o gerenciamento de versões php e vi que é possível executar duas versões, embora as que encontrei pareçam apache. Estou procurando instruções mais claras sobre como fazer isso no nginx. Eu também tenho hhvm rodando caso isso importe.

Ponto e vírgula temido
fonte

Respostas:

11

Primeiramente, você precisa instalar php5-fpme a php7.0-fpmpartir do PPA do Ondřej Surý para o php5 e o php7.0 co-instaláveis. :

sudo apt-get install python-software-properties
sudo LC_ALL=en_US.UTF-8 add-apt-repository ppa:ondrej/php

Em seguida, nginxsugerimos o uso dos pacotes FPM. Portanto, instale os pacotes adequadamente:

sudo apt-get update

# We need to ***remove*** php5 packages, so we can use php5.6 packages
# from the PPA instead
sudo apt-get remove php5-common
sudo apt-get autoremove

# Now we install php5.6 packages.
sudo apt-get install php5.6-fpm

# Now, install php7.0-fpm.  You may need to install separate PHP plugins
# for databases, extensions, etc. later.
sudo apt-get install php7.0-fpm

Fonte: Uma resposta no "Como instalar o php 7?" pergunta e comentários e modificações personalizados.


Em segundo lugar nginx. nginxsó pode ser tão bom quanto suas configurações. É muito provável que você tenha um bloco de manipulação do PHP no (s) bloco (s) do servidor nginx semelhante a este (da configuração de exemplo 'padrão'):

# pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000

location ~ \.php$ {
    include snippets/fastcgi-php.conf;

    # With php5-fpm:
    fastcgi_pass unix:/var/run/php5-fpm.sock;
}

Essa configuração passará apenas para php5-fpm. Com efeito, isso se aplicará a todo o bloco do servidor. A maneira mais fácil de fazer isso é ter um segundo bloco de servidor (por exemplo test.domain.tld) e fornecer o fastcgi_passdestino do PHP 7.0 . No php7.0 no Xenial, isso vai acabar com algo assim (extraído de uma correção recentemente carregada no pacote nginx do Xenial), no entanto, eu não conheço o layout do pacote do Ondrej, por isso não posso fornecer detalhes exatos (verifique /etc/php7.0/fpm/pool.d/www.confou semelhante para determinar onde está ouvindo):

location ~ \.php$ {
    include snippets/fastcgi-php.conf;

    # With php7.0-fpm:
    fastcgi_pass unix:/var/run/php7.0-fpm.sock;
}

Você precisará fazer algo semelhante ao seu php5bloco, para validar que os php5.6soquetes são usados ​​em vez do php5soquete interno (que acabamos de remover).

Em seguida, use o segundo domínio de teste para executar o php7.0teste. Entretanto, certifique-se de fazer uma cópia do seu site, se você quiser fazer isso - provavelmente será necessário ter uma cópia de teste separada para que, assim que terminar de trabalhar php7.0, você possa simplesmente 'alternar' sem questão.

Infelizmente, não há uma maneira fácil de criar php5e php7.0trabalhar no mesmo bloco de servidor, sem alterar os caminhos do site, aplicativos, etc., para ter um para php5e outro para php7.0; esse retrabalho de sites pode ficar desagradável, daí a sugestão de executar duas cópias separadas do código do site, uma para php7.0migração e outra para php5produção.

Thomas Ward
fonte
Se você escolher esse caminho, use os *php5.6*pacotes que o Ondřej fornece e remova os php5pacotes simples .
muru 23/03
@muru provavelmente certo, eu vou escrever isso em #
Thomas Ward
Obrigado! Isso funcionou melhor do que eu esperava. houve problemas com pear e cli no começo, mas acabou sendo um bug no repositório que eu precisava atualizar e funcionou. Meu site funciona muito rápido no php7. é incrível.
Temido ponto-e-vírgula 31/03
A meia fpm também tinha 5,6 no nome.
toster-cx
Desde quase 2018, a configuração do php5.6 para o NGINX é:fastcgi_pass unix:/var/run/php/php5.6-fpm.sock;
Ecksters 28/11