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

10

Eu quero experimentar o php 7 e fazer o meu site funcionar no php 7 ao mesmo tempo, mantendo outros sites trabalhando no php 5 para o caso. para que a partir da configuração do host virtual do domínio eu possa decidir qual php executar.

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

    
por Dreaded semicolon 23.03.2016 / 07:31

1 resposta

12

Primeiramente, você precisa instalar php5-fpm e php7.0-fpm do PPA de Ondřej Surý para php5 co-instalável e php7.0. :

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

Nós, então, com nginx , sugerimos usar os pacotes do FPM. Então, instale os pacotes de acordo:

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 sobre o "Como instalar o PHP 7?" pergunta e comentários personalizados e modificações de mim mesmo.

Em segundo lugar, nginx . nginx só pode ser tão bom quanto suas configurações. É bem provável que você tenha um bloco de manipulação de PHP em seu (s) bloco (s) de servidor nginx similar (a partir da configuração de exemplo 'default'):

# 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;
}

Esta configuração passará apenas para php5-fpm . Na verdade, isso será aplicado a todo o seu bloco de servidores. A maneira mais fácil de fazer isso é ter um segundo bloco de servidor (por exemplo, test.domain.tld ) e fornecer, em vez disso, o destino do PHP 7.0 fastcgi_pass . No php7.0 no Xenial, isso vai acabar 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 então não posso dar detalhes exatos lá (confira /etc/php7.0/fpm/pool.d/www.conf ou similar para determinar onde está escutando):

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

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

Você terá que fazer algo semelhante para o seu bloco php5 , para validar que php5.6 sockets são usados em vez do soquete php5 (que acabamos de remover).

Em seguida, use o segundo domínio de teste para executar o teste php7.0 . Certifique-se, no entanto, 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 com php7.0 , você possa simplesmente "alternar" sobre 'sem problema.

Não há, infelizmente, uma maneira fácil de fazer com que php5 e php7.0 trabalhem no mesmo bloco de servidores, não sem alterar seus caminhos para seu site, aplicativos, etc., para um por php5 e um para %código%; tal 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.0 migration e uma para php7.0 em produção.

    
por Thomas Ward 23.03.2016 / 13:24

Tags