Introdução
O servidor Web do Apache usa hosts virtuais para gerenciar vários domínios em uma única instância. De igual modo, o PHP-FPM utiliza um daemon para gerenciar várias versões de PHP em uma única instância. Você pode usar o Apache e o PHP-FPM juntos para hospedar vários aplicativos Web em PHP, cada qual usando uma versão diferente de PHP, porém todas as versões em um mesmo servidor e ao mesmo tempo. Isso é útil, pois diferentes aplicativos exigem diferentes versões de PHP. Porém, algumas pilhas de servidor – como uma pilha LAMP configurada regularmente – podem gerenciar somente uma versão de PHP. A combinação do Apache com o PHP-FPM também é uma solução mais econômica do que hospedar cada aplicativo em sua própria instância.
O PHP-FPM também oferece opções de configuração para o acesso ao stderr e ao stdout, reinicializações de emergência e geração de processos adaptáveis, o que é útil para sites muito carregados. Na verdade, o uso do Apache com o PHP-FPM é uma das melhores pilhas para a hospedagem de aplicativos PHP, especialmente em relação ao desempenho.
Neste tutorial, você configurará dois sites PHP em uma única instância. Cada site usará seu próprio domínio e cada domínio implantará sua própria versão de PHP. O primeiro,site1.your_domain, implantará o PHP 7.0. O segundo, site2.your_domain, implantará o PHP 7.2.
Pré-requisitos
- Um servidor Debian 10 com pelo menos 1 GB de RAM, configurado de acordo com o tutorial de Configuração inicial do servidor com o Debian 10, incluindo um usuário sudo não root e um firewall.
- Um servidor Web do Apache, configurado de acordo com o tutorial Como instalar o servidor Web do Apache no Debian 10.
- Um nome de domínio configurado para apontar para seu servidor do Debian 10. Você pode aprender como apontar domínios para Droplets da DigitalOcean, seguindo o tutorial Como apontar para os nomes de servidores da DigitalOcean a partir dos registradores de domínio comuns. Para este tutorial, usaremos dois subdomínios, cada qual especificado com um registro
Aem nossas configurações de DNS:site1.your_domainesite2.your_domain.
Passo 1 — Instalando as versões 7.0 e 7.2 do PHP com o PHP-FPM
Com os pré-requisitos concluídos, você instalará as versões 7.0 e 7.2 do PHP, além do PHP-FPM e várias extensões adicionais. Mas para isso, primeiro será necessário adicionar o repositório sury php ao seu sistema.
Primeiro, instale os diversos pacotes necessários, entre eles o curl, o wget e o gnupg2:
Após instalar ambas as versões do PHP, inicie o serviço php7.0-fpm:
sudo systemctl start php7.0-fpm
Em seguida, verifique o status do serviço php7.0-fpm:
sudo systemctl status php7.0-fpm
Verá o seguinte resultado:
● php7.0-fpm.service - The PHP 7.0 FastCGI Process Manager
Loaded: loaded (/lib/systemd/system/php7.0-fpm.service; enabled; vendor preset: enabled)
Active: active (running) since Sat 2020-04-04 08:51:47 UTC; 1min 17s ago
Docs: man:php-fpm7.0(8)
Main PID: 13016 (php-fpm7.0)
Status: "Processes active: 0, idle: 2, Requests: 0, slow: 0, Traffic: 0req/sec"
Tasks: 3 (limit: 1149)
Memory: 19.1M
CGroup: /system.slice/php7.0-fpm.service
├─13016 php-fpm: master process (/etc/php/7.0/fpm/php-fpm.conf)
├─13017 php-fpm: pool www
└─13018 php-fpm: pool www
Apr 04 08:51:47 debian10 systemd[1]: Starting The PHP 7.0 FastCGI Process Manager...
Apr 04 08:51:47 debian10 systemd[1]: Started The PHP 7.0 FastCGI Process Manager.
Repetindo esse processo, agora inicie o serviço php7.2-fpm:
sudo systemctl start php7.2-fpm
E, em seguida, verifique o status do serviço php7.2-fpm:
Verá o seguinte resultado:
● php7.2-fpm.service - The PHP 7.2 FastCGI Process Manager
Loaded: loaded (/lib/systemd/system/php7.2-fpm.service; enabled; vendor preset: enabled)
Active: active (running) since Sat 2020-04-04 08:52:52 UTC; 1min 32s ago
Docs: man:php-fpm7.2(8)
Process: 22207 ExecStartPost=/usr/lib/php/php-fpm-socket-helper install /run/php/php-fpm.sock /etc/php/7.2/fpm/pool.d/www.conf 72 (code=exite
Main PID: 22204 (php-fpm7.2)
Status: "Processes active: 0, idle: 2, Requests: 0, slow: 0, Traffic: 0req/sec"
Tasks: 3 (limit: 1149)
Memory: 12.0M
CGroup: /system.slice/php7.2-fpm.service
├─22204 php-fpm: master process (/etc/php/7.2/fpm/php-fpm.conf)
├─22205 php-fpm: pool www
└─22206 php-fpm: pool www
Apr 04 08:52:52 debian10 systemd[1]: Starting The PHP 7.2 FastCGI Process Manager...
Apr 04 08:52:52 debian10 systemd[1]: Started The PHP 7.2 FastCGI Process Manager.
Por fim, você deve habilitar vários módulos para que o seu serviço Apache2 possa funcionar com várias versões do PHP:
sudo a2enmod actions fcgid alias proxy_fcgi
- As
actionssão usadas para executar scripts de CGI baseados no tipo de mídia, ou método de solicitação. - O
fcgidé uma alternativa de alto desempenho aomod_cgi, que inicia um número suficiente de instâncias do programa CGI para processar solicitações simultâneas. - O
aliasdá suporte ao mapeamento de diferentes partes do sistema de arquivos do host na árvore de documentos e ao redirecionamento da URL. - O
proxy_fcgipermite que o Apache encaminhe solicitações para o PHP-FPM.
Agora, reinicie o serviço do Apache para aplicar suas alterações:
sudo systemctl restart apache2
Neste ponto, você instalou duas versões do PHP em seu servidor. Em seguida, você criará uma estrutura de diretório para cada site que deseja implantar.
Passo 2 — Criando estruturas de diretório para ambos os sites
Nesta seção, você criará um diretório para o diretório base e uma página de índice para cada um dos seus dois sites.
Primeiro, crie os diretórios de diretório base para os dois sites, o site1.your_domain e o site2.your_domain:
sudo mkdir /var/www/site1.your_domain sudo mkdir /var/www/site2.your_domain
Por padrão, o servidor Web do Apache funciona como um usuário www-data e um grupo www-data. Para garantir que você tenha a propriedade e as permissões corretas de seus diretórios base de seu site, execute os comandos a seguir:
sudo chown -R www-data:www-data /var/www/site1.your_domain
sudo chown -R www-data:www-data /var/www/site2.your_domain
sudo chmod -R 755 /var/www/site1.your_domain
sudo chmod -R 755 /var/www/site2.your_domain
Em seguida, você criará um arquivo info.php dentro do diretório base de cada site. Isso exibirá as informações da versão do PHP de cada site. Comece com o site1:
Adicione a linha a seguir:
Salve e feche o arquivo. Agora, copie o arquivo info.php que você criou para o site2:
Agora, o seu servidor Web deverá ter os diretórios de documento base que cada site exige para fornecer dados aos visitantes. Em seguida, você configurará seu servidor Web do Apache para funcionar com duas versões diferentes do PHP.
Passo 3 — Configurando o Apache para ambos os sites
Nesta seção, você criará dois arquivos de configuração do host virtual. Isso permitirá que seus dois sites funcionem simultaneamente com duas versões diferentes do PHP.
Para que o Apache distribua esse conteúdo, é necessário criar um arquivo de host virtual com as diretivas corretas. Em vez de modificar o arquivo de configuração padrão, localizado em /etc/apache2/sites-available/000-default.conf, você criará dois novos arquivos dentro do diretório /etc/apache2/sites-available/.
Primeiro,crie um novo arquivo de configuração de host virtual para o site site1.your_domain. Aqui, você direcionará o Apache a renderizar o conteúdo usando o php7.0:
Adicione o conteúdo a seguir: Verifique se o caminho do diretório do site, o nome do servidor e a versão de PHP correspondem à sua configuração:
<VirtualHost *:80>
ServerAdmin admin@site1.your_domain
ServerName site1.your_domain
DocumentRoot /var/www/site1.your_domain
DirectoryIndex info.php
<Directory /var/www/site1.your_domain>
Options Indexes FollowSymLinks MultiViews
AllowOverride All
Order allow,deny
allow from all
</Directory>
<FilesMatch \.php$>
# For Apache version 2.4.10 and above, use SetHandler to run PHP as a fastCGI process server
SetHandler "proxy:unix:/run/php/php7.0-fpm.sock|fcgi://localhost"
</FilesMatch>
ErrorLog ${APACHE_LOG_DIR}/site1.your_domain_error.log
CustomLog ${APACHE_LOG_DIR}/site1.your_domain_access.log combined
</VirtualHost>
Neste arquivo, você atualizou o DocumentRoot para o seu novo diretório e o ServerAdmin para um e-mail que o administrador do site your_domain pode acessar. Você também atualizou o ServerName, o qual estabelece o domínio base dessa configuração do host virtual, bem como adicionou uma diretiva SetHandler para executar o PHP como um servidor de processos fastCGI.
Salve e feche o arquivo.
Em seguida, crie um novo arquivo de configuração de host virtual para o site site2.your_domain. Você especificará este subdomínio para implantar o php7.2:
Adicione o conteúdo a seguir: Novamente, verifique se o caminho do diretório do site, o nome do servidor e a versão PHP correspondem às suas informações únicas:
<VirtualHost *:80>
ServerAdmin admin@site2.your_domain
ServerName site2.your_domain
DocumentRoot /var/www/site2.your_domain
DirectoryIndex info.php
<Directory /var/www/site2.your_domain>
Options Indexes FollowSymLinks MultiViews
AllowOverride All
Order allow,deny
allow from all
</Directory>
<FilesMatch \.php$>
# For Apache version 2.4.10 and above, use SetHandler to run PHP as a fastCGI process server
SetHandler "proxy:unix:/run/php/php7.2-fpm.sock|fcgi://localhost"
</FilesMatch>
ErrorLog ${APACHE_LOG_DIR}/site2.your_domain_error.log
CustomLog ${APACHE_LOG_DIR}/site2.your_domain_access.log combined
</VirtualHost>
Salve e feche o arquivo quando você terminar. Em seguida, verifique se há erros de sintaxe no arquivo de configuração do Apache:
Você verá o seguinte resultado:
Syntax OK
Agora, habilite ambos os arquivos de configuração de host virtual:
