Como executar vários sites com diferentes versões de PHP no Nginx
Às vezes, os desenvolvedores de PHP desejam construir e executar diferentes sites/aplicativos usando diferentes versões de PHP no mesmo servidor web. Como administrador de sistema Linux, você deve configurar um ambiente onde possa executar vários sites usando diferentes versões de PHP em um único servidor web, ou seja, Nginx.
Neste tutorial, explicaremos como instalar múltiplas versões do PHP e configurar o servidor web Nginx para trabalhar com elas através dos blocos de servidor (hosts virtuais no Apache) em Distribuições CentOS/RHEL 7 usando pilha LEMP.
Leia também: Pyenv – Instale várias versões do Python para um projeto específico
Nginx usa PHP-FPM (significa FastCGI Process Manager), que é uma implementação alternativa do PHP FastCGI com alguns recursos extras úteis para sites muito carregados.
Testando a configuração do ambiente
- Um servidor CentOS 7 ou RHEL 7 com instalação mínima.
- Servidor HTTP Nginx.
- PHP 7.1 (para ser usado como versão padrão) e 5.6.
- Servidor de banco de dados MariaDB.
- Endereço IP do servidor: 192.168.56.10.
- Sites: example1.com e example2.com.
Etapa 1: Instalando e ativando o repositório EPEL e Remi
1. Primeiro comece instalando e habilitando o repositório EPEL e Remi, que oferece as versões mais recentes do PHP pilha em distribuições CentOS/RHEL 7.
yum install https://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm
yum install http://rpms.remirepo.net/enterprise/remi-release-7.rpm
2. Em seguida, instale o pacote yum-utils, que estende as funcionalidades nativas do yum e fornece o comando yum-config-manager, que é usado para ativar ou desative os repositórios Yum no sistema.
yum install yum-utils
Nota: No RHEL 7 você pode habilitar o canal opcional para algumas dependências usando o seguinte comando.
subscription-manager repos --enable=rhel-7-server-optional-rpms
Etapa 2: Instalando o servidor Web Nginx
3. Para instalar a versão mais recente do Nginx, precisamos adicionar o repositório oficial do Nginx, criar um arquivo chamado /etc/yum.repos.d/nginx.repo.
vi /etc/yum.repos.d/nginx.repo
Adicione as seguintes linhas ao arquivo de acordo com sua distribuição.
--------------- On CentOS 7 ---------------
[nginx]
name=nginx repo
baseurl=http://nginx.org/packages/centos/7/$basearch/
gpgcheck=0
enabled=1
--------------- On RHEL 7 ---------------
[nginx]
name=nginx repo
baseurl=http://nginx.org/packages/rhel/7.x/$basearch/
gpgcheck=0
enabled=1
4. Depois que o repositório nginx for adicionado, você pode instalar o Nginx usando a ferramenta de gerenciamento de pacotes yum, conforme mostrado.
yum install nginx
Etapa 3: Instalando o servidor de banco de dados MariaDB
5. Para instalar a versão mais recente do MariaDB, precisamos adicionar o repositório oficial do MariaDB, criar um arquivo chamado /etc/yum.repos.d/mariadb.repo.
vi /etc/yum.repos.d/mariadb.repo
Adicione as seguintes linhas ao arquivo de acordo com sua distribuição.
--------------- On CentOS 7 ---------------
[mariadb]
name = MariaDB
baseurl = http://yum.mariadb.org/10.2/centos7-amd64
gpgkey=https://yum.mariadb.org/RPM-GPG-KEY-MariaDB
gpgcheck=1
--------------- On RHEL 7 ---------------
[mariadb]
name = MariaDB
baseurl = http://yum.mariadb.org/10.2/rhel7-amd64
gpgkey=https://yum.mariadb.org/RPM-GPG-KEY-MariaDB
gpgcheck=1
6. Depois que o repositório MariaDB for adicionado, você poderá instalar o MariaDB usando a ferramenta de gerenciamento de pacotes yum, conforme mostrado.
yum install MariaDB-client MariaDB-server
7. Depois, proteja a instalação do servidor de banco de dados usando o script abaixo. Defina uma senha root e responda y
e pressione [Enter] para o restante das perguntas subsequentes para desabilitar o login de usuário root remoto, remover contas de usuários anônimos e testar o banco de dados que por default pode ser acessado por todos os usuários, até mesmo usuários anônimos.
mysql_secure_installation
Leia também: 12 práticas recomendadas de segurança MySQL/MariaDB para Linux
Passo 4: Instalando Múltiplas Versões de PHP
8. Para instalar diferentes versões do PHP para seus projetos, use o comando yum-config-manager para instalar múltiplas versões do PHP junto com a maioria dos módulos necessários, conforme mostrado.
Instale a versão PHP 7.1
yum-config-manager --enable remi-php71 [Default]
yum install php php-common php-fpm
yum install php-mysql php-pecl-memcache php-pecl-memcached php-gd php-mbstring php-mcrypt php-xml php-pecl-apc php-cli php-pear php-pdo
Instale a versão PHP 5.6
yum install php56 php56-php-common php56-php-fpm
yum install php56-php-mysql php56-php-pecl-memcache php56-php-pecl-memcached php56-php-gd php56-php-mbstring php56-php-mcrypt php56-php-xml php56-php-pecl-apc php56-php-cli php56-php-pear php56-php-pdo
9. Uma vez instalado o PHP, você pode usar o seguinte comando para verificar a versão padrão do PHP usada em seu servidor.
php -v
Etapa 5: Configurando PHP-FPM e PHP56-PHP-FPM
10. Esta é a parte mais interessante deste tutorial, ela explica como você pode realmente executar múltiplas versões do PHP em seu servidor. Aqui você configurará as diferentes versões do php-fpm com as quais o Nginx irá trabalhar. Você deve definir o usuário/grupo dos processos FastCGI, bem como as portas nas quais eles irão escutar.
Estes são os dois arquivos de configuração a seguir que você irá editar.
- php-fpm (padrão 7.1) – /etc/php-fpm.d/www.conf
- php56-php-fpm – /opt/remi/php56/root/etc/php-fpm.d/www.conf
Abra os arquivos acima, defina o usuário/grupo de processos FastCGI.
vi /etc/php-fpm.d/www.conf [PHP 7.1]
vi /opt/remi/php56/root/etc/php-fpm.d/www.conf [PHP 5.6]
Os valores padrão devem ser apache, altere-os para nginx conforme mostrado.
user = nginx
group = nginx
11. Em seguida, encontre os parâmetros de escuta e defina o address:port no qual as solicitações FastCGI serão recebidas.
listen = 127.0.0.1:9000 [php-fpm]
listen = 127.0.0.1:9001 [php56-php-fpm]
12. Depois de concluída toda a configuração acima, você precisa iniciar e habilitar Nginx, MariaDB e PHP-FPM para iniciar automaticamente na inicialização do sistema.
systemctl enable nginx
systemctl start nginx
systemctl enable mariadb
systemctl start mariadb
---------------- PHP 7.1 ----------------
systemctl enable php-fpm
systemctl start php-fpm
---------------- PHP 5.6 ----------------
systemctl enable php56-php-fpm
systemctl start php56-php-fpm
Atenção: Caso você receba algum erro ao iniciar a segunda instância do PHP, php56-php-fpm, uma política do SELinux pode estar bloqueando desde o início. Se o SELinux estiver no modo de aplicação, configure-o para o modo permissivo e tente iniciar o serviço novamente.
getenforce
setenforce 0
Etapa 6: configurar sites com permissões
13. Neste ponto, você pode criar os diretórios necessários para seus sites em /var/www/html/. Você também precisa criar diretórios para armazenar logs da seguinte forma:
---------------- Website 1 ----------------
mkdir -p /var/www/html/example1.com/
mkdir -p /var/log/nginx/example1.com/
---------------- Website 2 ----------------
mkdir -p /var/www/html/example2.com/
mkdir -p /var/log/nginx/example2.com/
14. Defina as permissões de propriedade apropriadas em todos os diretórios.
---------------- Website 1 ----------------
chown -R root:nginx /var/www/html/example1.com/
chmod -R 755 /var/www/html/example1.com/
chown -R root:nginx /var/log/nginx/example1.com/
chmod -R 660 /var/log/nginx/example1.com/
---------------- Website 2 ----------------
chown -R root:nginx /var/www/html/example2.com/
chmod -R 755 /var/www/html/example2.com/
chown -R root:nginx /var/log/nginx/example2.com/
chmod -R 660 /var/log/nginx/example2.com/
Etapa 7: configurar blocos de servidor Nginx para sites
15. Agora configure como o Nginx processará as solicitações para seus sites usando os arquivos de configuração do bloco do servidor que devem estar localizados em /etc/nginx/conf.d/.
Crie os arquivos de configuração para seus sites que terminam com a extensão .conf
.
vi /etc/nginx/conf.d/example1.com.conf
vi /etc/nginx/conf.d/example2.com.conf
Em seguida, cole as seguintes configurações de bloco de servidor nos respectivos arquivos.
Site 1
server {
listen 80;
server_name example1.com www.example1.com;
root /var/www/html/example1.com/;
index index.php index.html index.htm;
#charset koi8-r;
access_log /var/log/nginx/example1.com/example1_access_log;
error_log /var/log/nginx/example1.com/example1_error_log error;
location / {
try_files $uri $uri/ /index.php?$query_string;
}
# pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
location ~ \.php$ {
root /var/www/html/example1.com/;
fastcgi_pass 127.0.0.1:9000; #set port for php-fpm to listen on
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
include /etc/nginx/fastcgi_params;
}
}
Site 2
server {
listen 80;
server_name example2.com www.example2.com;
root /var/www/html/example2.com/;
index index.php index.html index.htm;
#charset koi8-r;
access_log /var/log/nginx/example2.com/example2_access_log;
error_log /var/log/nginx/example2.com/example2_error_log error;
location / {
try_files $uri $uri/ /index.php?$query_string;
}
# pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
location ~ \.php$ {
root /var/www/html/example2.com/;
fastcgi_pass 127.0.0.1:9001; #set port for php56-php-fpm to listen on
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
include /etc/nginx/fastcgi_params;
}
}
16. Certifique-se de ter a seguinte linha na parte final do bloco http em /etc/nginx/nginx.conf. Ajuda incluir todos os arquivos de configuração dentro do diretório /etc/nginx/conf.d/ quando o Nginx está em execução.
include /etc/nginx/conf.d/*.conf;
Etapa 8: testando diferentes versões de PHP
17. Finalmente, você precisa testar se seu servidor está usando as duas versões do PHP. Você pode criar um script info.php muito básico nos diretórios raiz dos documentos de seus sites, conforme mostrado.
echo "<?php phpinfo(); ?>" > /var/www/html/example1.com/info.php
echo "<?php phpinfo(); ?>" > /var/www/html/example2.com/info.php
18. Para aplicar todas as alterações feitas acima, você precisa reiniciar o Nginx, php-fpm e php56-php- fpm. Mas você pode primeiro verificar se há erros de sintaxe nos arquivos de configuração do Nginx antes de fazer isso.
nginx -t
systemctl restart nginx php-fpm php56-php-fpm
19. Há mais uma última coisa a fazer, especialmente se você estiver executando seu servidor localmente, você precisa configurar o DNS local usando o arquivo /etc/hosts conforme mostrado na captura de tela abaixo.
192.168.56.10 example1.com example1
192.168.56.10 example2.com example2
20. Por fim, abra um navegador da web e digite os seguintes endereços para verificar as versões do PHP instaladas no sistema.
http://example1.com/index.php
http://example2.com/index.php
É isso! Agora você pode implantar arquivos e testar sites com diferentes versões de PHP. Se você tiver alguma adição a fazer ou perguntas a colocar, use o formulário de comentários abaixo.