One place for hosting & domains

      varias

      Como executar várias versões do PHP em um servidor usando o Apache e o PHP-FPM no Debian 10


      O autor selecionou a COVID-19 Relief Fund​​​​​ para receber uma doação como parte do programa Write for DOnations.

      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

      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:

      • sudo apt-get install curl wget gnupg2 ca-certificates lsb-release apt-transport-https -y

      Os pacotes acima permitirão, de maneira segura, o seu acesso ao repositório sury php. O sury php é um repositório de terceiros ou um PPA (arquivo de pacote pessoal). Ele oferece o PHP nas versões 7.4, 7.3, 7.2, 7.1 e 7.0 para o sistema operacional Debian. Este repositório também oferece versões mais recentes do PHP do que aquelas encontradas nos repositórios oficiais do Debian 10, e permitirá que você instale várias versões do PHP no mesmo sistema.

      Em seguida, importe a chave do pacote:

      • wget https://packages.sury.org/php/apt.gpg
      • sudo apt-key add apt.gpg

      Agora, adicione o repositório sury php ao seu sistema:

      • echo "deb https://packages.sury.org/php/ $(lsb_release -sc) main" | sudo tee /etc/apt/sources.list.d/php7.list

      Atualize o repositório:

      Em seguida, instale o php7.0, o php7.0-fpm, o php7.0-mysql, o libapache2-mod-php7.0 e o libapache2-mod-fcgid com os comandos a seguir:

      • sudo apt-get install php7.0 php7.0-fpm php7.0-mysql libapache2-mod-php7.0 libapache2-mod-fcgid -y
      • O php7.0 é um metapacote que pode ser utilizado para executar aplicativos PHP.
      • O php7.0-fpm fornece o interpretador do gerenciador de processos rápidos que funciona como um daemon e recebe solicitações do Fast/CGI.
      • O php7.0-mysql conecta o PHP ao banco de dados MySQL.
      • O libapache2-mod-php7.0 fornece o módulo PHP para o servidor Web do Apache.
      • O libapache2-mod-fcgid contém um mod_fcgid que inicia uma série de instâncias do programa CGI para tratar solicitações simultâneas.

      Agora, repita o processo para a versão PHP 7.2. Instale o php7.2, o php7.2-fpm, o php7.2-mysql e o libapache2-mod-php7.2.

      • sudo apt-get install php7.2 php7.2-fpm php7.2-mysql libapache2-mod-php7.2 -y

      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

      Você verá o seguinte resultado:

      Output

      ● 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:

      • sudo systemctl status php7.2-fpm

      Você verá o seguinte resultado:

      Output

      ● 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 actions sã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 ao mod_cgi, que inicia um número suficiente de instâncias do programa CGI para processar solicitações simultâneas.

      • O alias dá suporte ao mapeamento de diferentes partes do sistema de arquivos do host na árvore de documentos e ao redirecionamento da URL.

      • O proxy_fcgi permite 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:

      • sudo nano /var/www/site1.your_domain/info.php

      Adicione a linha a seguir:

      /var/www/site1.your_domain/info.php

      <?php phpinfo(); ?>
      

      Salve e feche o arquivo. Agora, copie o arquivo info.php que você criou para o site2:

      • sudo cp /var/www/site1.your_domain/info.php /var/www/site2.your_domain/info.php

      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:

      • sudo nano /etc/apache2/sites-available/site1.your_domain.conf

      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:

      /etc/apache2/sites-available/site1.your_domain.conf

      
      <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:

      • sudo nano /etc/apache2/sites-available/site2.your_domain.conf

      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:

      /etc/apache2/sites-available/site2.your_domain.conf

      <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:

      • sudo apachectl configtest

      Você verá o seguinte resultado:

      Output

      Syntax OK

      Agora, habilite ambos os arquivos de configuração de host virtual:

      • sudo a2ensite site1.your_domain
      • sudo a2ensite site2.your_domain

      Você não precisará do site padrão. Desabilite-o:

      • sudo a2dissite 000-default.conf

      Finalmente, reinicie o serviço do Apache para implementar suas alterações:

      • sudo systemctl restart apache2

      Após configurar o Apache para atender a cada site, você os testará para garantir que as versões apropriadas do PHP estejam funcionando corretamente.

      Passo 4 — Testando os sites

      Até aqui, você já configurou dois sites para executar duas versões diferentes do PHP. Agora, teste os resultados.

      Abra seu navegador Web e visite os dois sites http://site1.your_domain e http://site2.your_domain. Você verá duas páginas parecidas com estas:

      Página de informações do PHP 7.0Página de informações do PHP 7.2

      Observe os títulos. A primeira página indica que o site1.your_domain implantou o PHP 7.0. A segunda indica que o site2.your_domain implantou o PHP 7.2.

      Agora que você testou seus sites, remova os arquivos info.php. Como eles contêm informações confidenciais sobre seu servidor e estão acessíveis a usuários não autorizados, eles representam uma ameaça à segurança. Para remover os dois arquivos, execute os comandos a seguir:

      • sudo rm -rf /var/www/site1.your_domain/info.php
      • sudo rm -rf /var/www/site2.your_domain/info.php

      Agora, você tem um único servidor Debian 10 cuidando de dois sites, com duas versões diferentes do PHP. No entanto, o PHP-FPM não está limitado a este aplicativo.

      Conclusão

      Você combinou os hosts virtuais e o PHP-FPM para atender vários sites e várias versões do PHP em um único servidor. O único limite prático sobre o número de sites PHP e de versões do PHP que o seu serviço do Apache pode gerenciar é a capacidade de processamento de sua instância.

      A partir daqui, considere explorar recursos mais avançados do PHP-FPM, como sua geração de processos adaptáveis ou a maneira como ele pode acessar o sdtout e o stderr. Como uma alternativa, você pode agora proteger seus sites. Para fazer isso, você pode seguir nosso tutorial sobre como proteger seus sites com certificados TLS/SSL gratuitos do Let’s Encrypt.



      Source link

      Como executar várias versões do PHP em um servidor usando o Apache e o PHP-FPM no Ubuntu 18.04


      O autor selecionou a COVID-19 Relief Fund​​​​​ para receber uma doação como parte do programa Write for DOnations.

      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

      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 realizar isso, primeiro você precisará adicionar o repositório Ondrej PHP ao seu sistema.

      Execute o comando apt-get para instalar o software-properties-common:

      • sudo apt-get install software-properties-common -y

      O pacote software-properties-common fornece o utilitário de linha de comando apt-add-repository, o qual você utilizará para adicionar o repositório PPA(arquivo de pacote pessoal) ondrej/php.

      Agora, adicione o repositório ondrej/php ao seu sistema. O PPA ondrej/php terá versões mais recentes do PHP do que as encontradas nos repositórios oficiais do Ubuntu. Ele também permitirá que instale várias versões do PHP no mesmo sistema:

      • sudo add-apt-repository ppa:ondrej/php

      Atualize o repositório:

      Em seguida, instale o php7.0, o php7.0-fpm, o php7.0-mysql, o libapache2-mod-php7.0 e o libapache2-mod-fcgid com os comandos a seguir:

      • sudo apt-get install php7.0 php7.0-fpm php7.0-mysql libapache2-mod-php7.0 libapache2-mod-fcgid -y
      • O php7.0 é um metapacote utilizado para executar aplicativos PHP.
      • O php7.0-fpm fornece o interpretador do gerenciador de processos rápidos que funciona como um daemon e recebe solicitações do Fast/CGI.
      • O php7.0-mysql conecta o PHP ao banco de dados MySQL.
      • O libapache2-mod-php7.0 fornece o módulo PHP para o servidor Web do Apache.
      • O libapache2-mod-fcgid contém um mod_fcgid que inicia uma série de instâncias do programa CGI para tratar solicitações simultâneas.

      Agora, repita o processo para a versão PHP 7.2. Instale o php7.2, o php7.2-fpm, o php7.2-mysql e o libapache2-mod-php7.2:

      • sudo apt-get install php7.2 php7.2-fpm php7.2-mysql libapache2-mod-php7.2 -y

      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

      Você verá o seguinte resultado:

      Output

      ● 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 Sun 2020-03-29 12:53:23 UTC; 15s ago Docs: man:php-fpm7.0(8) Process: 20961 ExecStopPost=/usr/lib/php/php-fpm-socket-helper remove /run/php/php-fpm.sock /etc/php/7.0/fpm/pool.d/www.conf 70 (code=exited, Process: 20979 ExecStartPost=/usr/lib/php/php-fpm-socket-helper install /run/php/php-fpm.sock /etc/php/7.0/fpm/pool.d/www.conf 70 (code=exite Main PID: 20963 (php-fpm7.0) Status: "Processes active: 0, idle: 2, Requests: 0, slow: 0, Traffic: 0req/sec" Tasks: 3 (limit: 1150) CGroup: /system.slice/php7.0-fpm.service ├─20963 php-fpm: master process (/etc/php/7.0/fpm/php-fpm.conf) ├─20977 php-fpm: pool www └─20978 php-fpm: pool www

      Repetindo esse processo, agora inicie o serviço php7.2-fpm:

      • sudo systemctl start php7.2-fpm

      E verifique o status do serviço php7.2-fpm:

      • sudo systemctl status php7.2-fpm

      Você verá o seguinte resultado:

      Output

      ● 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 Sun 2020-03-29 12:53:22 UTC; 45s ago Docs: man:php-fpm7.2(8) Main PID: 20897 (php-fpm7.2) Status: "Processes active: 0, idle: 2, Requests: 0, slow: 0, Traffic: 0req/sec" Tasks: 3 (limit: 1150) CGroup: /system.slice/php7.2-fpm.service ├─20897 php-fpm: master process (/etc/php/7.2/fpm/php-fpm.conf) ├─20909 php-fpm: pool www └─20910 php-fpm: pool www

      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 actions sã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 ao mod_cgi, que inicia um número suficiente de instâncias do programa CGI para processar solicitações simultâneas.

      • O alias dá suporte ao mapeamento de diferentes partes do sistema de arquivos do host na árvore de documentos e ao redirecionamento da URL.

      • O proxy_fcgi permite 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:

      • sudo nano /var/www/site1.your_domain/info.php

      Adicione a linha a seguir:

      /var/www/site1.your_domain/info.php

      <?php phpinfo(); ?>
      

      Salve e feche o arquivo. Agora, copie o arquivo info.php que você criou para o site2:

      • sudo cp /var/www/site1.your_domain/info.php /var/www/site2.your_domain/info.php

      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:

      • sudo nano /etc/apache2/sites-available/site1.your_domain.conf

      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:

      /etc/apache2/sites-available/site1.your_domain.conf

      
      <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:

      • sudo nano /etc/apache2/sites-available/site2.your_domain.conf

      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:

      /etc/apache2/sites-available/site2.your_domain.conf

      <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:

      • sudo apachectl configtest

      Você verá o seguinte resultado:

      Output

      Syntax OK

      Agora, habilite ambos os arquivos de configuração de host virtual:

      • sudo a2ensite site1.your_domain
      • sudo a2ensite site2.your_domain

      Você não precisará do site padrão. Desabilite-o:

      • sudo a2dissite 000-default.conf

      Finalmente, reinicie o serviço do Apache para implementar suas alterações:

      • sudo systemctl restart apache2

      Após configurar o Apache para atender a cada site, você os testará para garantir que as versões apropriadas do PHP estejam funcionando corretamente.

      Passo 4 — Testando os sites

      Até aqui, você já configurou dois sites para executar duas versões diferentes do PHP. Agora, teste os resultados.

      Abra seu navegador Web e visite os dois sites http://site1.your_domain e http://site2.your_domain. Você verá duas páginas parecidas com estas:

      Página de informações do PHP 7.0Página de informações do PHP 7.2

      Observe os títulos. A primeira página indica que o site1.your_domain implantou o PHP 7.0. A segunda indica que o site2.your_domain implantou o PHP 7.2.

      Agora que você testou seus sites, remova os arquivos info.php. Como eles contêm informações confidenciais sobre seu servidor e estão acessíveis a usuários não autorizados, eles representam uma ameaça à segurança. Para remover os dois arquivos, execute os comandos a seguir:

      • sudo rm -rf /var/www/site1.your_domain/info.php
      • sudo rm -rf /var/www/site2.your_domain/info.php

      Agora, você tem um único servidor Ubuntu 18.04 lidando com dois sites, com duas versões diferentes do PHP. No entanto, o PHP-FPM não está limitado a este aplicativo.

      Conclusão

      Você combinou os hosts virtuais e o PHP-FPM para atender vários sites e várias versões do PHP em um único servidor. O único limite prático sobre o número de sites PHP e de versões do PHP que o seu serviço do Apache pode gerenciar é a capacidade de processamento de sua instância.

      A partir daqui, considere explorar recursos mais avançados do PHP-FPM, como sua geração de processos adaptáveis ou a maneira como ele pode acessar o sdtout e o stderr. Como uma alternativa, você pode agora proteger seus sites. Para fazer isso, você pode seguir nosso tutorial sobre como proteger seus sites com certificados TLS/SSL gratuitos do Let’s Encrypt.



      Source link

      Cómo ejecutar varias versiones de PHP en un servidor usando Apache y PHP-FPM en Ubuntu 18.04


      El autor seleccionó COVID-19 Relief Fund para que reciba una donación como parte del programa Write for DOnations.

      Introducción

      El servidor web Apache usa hosts virtuales para gestionar varios dominios en una sola instancia. De forma similar, PHP-FPM usa un demonio para gestionar varias versiones de PHP en una sola instancia. Puede usar Apache y PHP-FPM en conjunto para alojar varias aplicaciones web PHP, cada una con una versión distinta de PHP, en un mismo servidor al mismo tiempo. Esto es útil porque diversas aplicaciones pueden requerir distintas versiones de PHP, pero algunas pilas de servidores, como una pila LAMP configurada periódicamente, solo pueden gestionar una. La combinación de Apache con PHP-FPM también es una solución más rentable que alojar cada aplicación en su propia instancia.

      PHP-FPM también ofrece opciones de configuración para los registros stderr y stdout, reinicios de emergencia y creación de procesos adaptativos, lo que es útil para sitios muy cargados. De hecho, la combinación de Apache y PHP-FPM es una de las mejores pilas para alojar aplicaciones PHP, especialmente, en cuanto al rendimiento.

      En este tutorial, establecerá dos sitios PHP en una sola instancia. Cada sitio usará su propio dominio, y cada dominio implementará su propia versión de PHP. El primero, site1.your_domain, implementará PHP 7.0. El segundo, site2.your_domain, implementará PHP 7.2.

      Requisitos previos

      Paso 1: Instalar las versiones 7.0 y 7.2 de PHP con PHP-FPM

      Ahora, con los requisitos previos completos, instalará las versiones 7.0 y 7.2 de PHP, así como PHP-FPM y varias extensiones adicionales. Pero, para poder hacerlo, primero, deberá añadir el repositorio Ondrej PHP a su sistema.

      Ejecute el comando apt-get para instalar software-properties-common:

      • sudo apt-get install software-properties-common -y

      El paquete software-properties-common proporciona la utilidad de línea de comandos apt-add-repository, que usará para añadir el repositorio de PPA (archivo de paquete personal) ondrej/php.

      Ahora, añada el repositorio ondrej/php a su sistema. El PPA ondrej/php tendrá versiones más actualizadas de PHP que los repositorios oficiales de Ubuntu y también le permitirá instalar varias versiones de PHP en el mismo sistema:

      • sudo add-apt-repository ppa:ondrej/php

      Actualice el repositorio:

      A continuación, instale php7.0, php7.0-fpm, php7.0-mysql, libapache2-mod-php7.0, y libapache2-mod-fcgid con los siguientes comandos:

      • sudo apt-get install php7.0 php7.0-fpm php7.0-mysql libapache2-mod-php7.0 libapache2-mod-fcgid -y
      • php7.0 es una metapaquete que se usa para ejecutar aplicaciones de PHP.
      • php7.0-fpm ofrece el intérprete de Fast Process Manager, que se ejecuta como demonio y recibe solicitudes de Fast/CGI.
      • php7.0-mysql conecta PHP con la base de datos de MySQL.
      • libapache2-mod-php7.0 ofrece el módulo PHP para el servidor web de Apache.
      • libapache2-mod-fcgid contiene un mod_fcgid que inicia varias instancias de programas de CGI para gestionar solicitudes simultáneas.

      Ahora, repita el proceso para la versión 7.2 de PHP. Instale php7.2, php7.2-fpm, php7.2-mysql y libapache2-mod-php7.2:

      • sudo apt-get install php7.2 php7.2-fpm php7.2-mysql libapache2-mod-php7.2 -y

      Después de instalar las dos versiones de PHP, inicie el servicio php7.0-fpm:

      • sudo systemctl start php7.0-fpm

      A continuación, verifique el estado del servicio php7.0-fpm:

      • sudo systemctl status php7.0-fpm

      Verá el siguiente resultado:

      Output

      ● 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 Sun 2020-03-29 12:53:23 UTC; 15s ago Docs: man:php-fpm7.0(8) Process: 20961 ExecStopPost=/usr/lib/php/php-fpm-socket-helper remove /run/php/php-fpm.sock /etc/php/7.0/fpm/pool.d/www.conf 70 (code=exited, Process: 20979 ExecStartPost=/usr/lib/php/php-fpm-socket-helper install /run/php/php-fpm.sock /etc/php/7.0/fpm/pool.d/www.conf 70 (code=exite Main PID: 20963 (php-fpm7.0) Status: "Processes active: 0, idle: 2, Requests: 0, slow: 0, Traffic: 0req/sec" Tasks: 3 (limit: 1150) CGroup: /system.slice/php7.0-fpm.service ├─20963 php-fpm: master process (/etc/php/7.0/fpm/php-fpm.conf) ├─20977 php-fpm: pool www └─20978 php-fpm: pool www

      Ahora, repitiendo el proceso, inicie el servicio php7.2-fpm:

      • sudo systemctl start php7.2-fpm

      Verifique el estado del servicio php7.2-fpm:

      • sudo systemctl status php7.2-fpm

      Verá el siguiente resultado:

      Output

      ● 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 Sun 2020-03-29 12:53:22 UTC; 45s ago Docs: man:php-fpm7.2(8) Main PID: 20897 (php-fpm7.2) Status: "Processes active: 0, idle: 2, Requests: 0, slow: 0, Traffic: 0req/sec" Tasks: 3 (limit: 1150) CGroup: /system.slice/php7.2-fpm.service ├─20897 php-fpm: master process (/etc/php/7.2/fpm/php-fpm.conf) ├─20909 php-fpm: pool www └─20910 php-fpm: pool www

      Por último, debe habilitar varios módulos para que su servicio de Apache2 pueda funcionar con varias versiones de PHP:

      • sudo a2enmod actions fcgid alias proxy_fcgi
      • actions se utiliza para ejecutar secuencias de comandos de CGI en función del tipo de medio o el método de solicitud.

      • fcgid es una alternativa de alto rendimiento a mod_cgi que inicia una cantidad suficiente de instancias del programa CGI para gestionar las solicitudes simultáneas.

      • alias proporciona la asignación de las distintas partes del sistema de archivos del host en el árbol de documentos y la redirección de URL.

      • proxy_fcgi le permite a Apache reenviar solicitudes a PHP-FPM.

      Ahora, reinicie el servicio de Apache para aplicar los cambios:

      • sudo systemctl restart apache2

      En este punto, instaló dos versiones de PHP en su servidor. A continuación, creará una estructura de directorios para cada sitio web que desee implementar.

      Paso 2: Crear estructuras de directorios para los dos sitios web

      En esta sección, creará un directorio root de documentos y una página de índice para cada uno de sus dos sitios web.

      Primero, cree directorios root de documentos para site1.your_domain y site2.your_domain:

      • sudo mkdir /var/www/site1.your_domain
      • sudo mkdir /var/www/site2.your_domain

      De manera predeterminada, el servidor web Apache se ejecuta como usuario www-data y grupo www-data. Para asegurarse de tener la propiedad y los permisos correctos de sus directorios root del sitio web, ejecute los siguientes comandos:

      • 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

      A continuación, creará un archivo info.php en el directorio root de cada sitio web. Esto mostrará la información de la versión de PHP de cada sitio web. Comience con site1:

      • sudo nano /var/www/site1.your_domain/info.php

      Añada la siguiente línea:

      /var/www/site1.your_domain/info.php

      <?php phpinfo(); ?>
      

      Guarde y cierre el archivo. Ahora, copie el archivo info.php que creó a site2:

      • sudo cp /var/www/site1.your_domain/info.php /var/www/site2.your_domain/info.php

      Ahora, su servidor web debería tener los directorios root de documentos que cada sitio requiere para presentar datos a los visitantes. A continuación, configurará su servidor web Apache para que funcione con dos versiones de PHP distintas.

      Paso 3: Configurar Apache en los dos sitios web

      En esta sección, creará dos archivos de configuración de host virtual. Esto permitirá que sus dos sitios web funcionen en simultáneo con dos versiones de PHP distintas.

      Para que Apache proporcione este contenido, es necesario crear un archivo de host virtual con las directivas correctas. En vez de modificar el archivo de configuración predeterminado ubicado en /etc/apache2/sites-available/000-default.conf, creará dos archivos nuevos en el directorio /etc/apache2/sites-available/.

      Primero, cree un nuevo archivo de configuración de host virtual para el sitio web site1.your_domain. Aquí, le indicará a Apache que represente contenido usando php7.0:

      • sudo nano /etc/apache2/sites-available/site1.your_domain.conf

      Añada el siguiente contenido: Asegúrese de que la ruta del directorio del sitio web, el nombre del servidor y la versión de PHP concuerden con su configuración:

      /etc/apache2/sites-available/site1.your_domain.conf

      
      <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>
      

      En este archivo, actualizó DocumentRoot a su nuevo directorio y ServerAdmin a un correo electrónico al que puede acceder el administrador del sitio your_domain. También actualizó ServerName, que establece el dominio base para esta configuración de host virtual, y añadió una directiva SetHandler para ejecutar PHP como servidor de procesos fastCGI.

      Guarde y cierre el archivo.

      A continuación, cree un nuevo archivo de configuración de host virtual para el sitio web site2.your_domain. Le indicará a este subdominio que implemente php7.2:

      • sudo nano /etc/apache2/sites-available/site2.your_domain.conf

      Añada el siguiente contenido: Nuevamente, asegúrese de que la ruta del directorio del sitio web, el nombre del servidor y la versión de PHP concuerden con su información única:

      /etc/apache2/sites-available/site2.your_domain.conf

      <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>
      

      Guarde y cierre el archivo cuando termine. Luego, compruebe que no haya errores de sintaxis en el archivo de configuración de Apache:

      • sudo apachectl configtest

      Verá el siguiente resultado:

      Output

      Syntax OK

      A continuación, habilite los dos archivos de configuración de host virtual:

      • sudo a2ensite site1.your_domain
      • sudo a2ensite site2.your_domain

      Ahora, deshabilite el sitio predeterminado, dado que no lo necesitará:

      • sudo a2dissite 000-default.conf

      Por último, reinicie el servicio de Apache para implementar los cambios:

      • sudo systemctl restart apache2

      Ahora que configuró Apache para que sirva cada sitio, los probará para asegurarse de que se estén ejecutando las versiones de PHP correspondientes.

      Paso 4: Probar los dos sitios web

      En este punto, configuró dos sitios web para que ejecuten dos versiones distintas de PHP. Ahora, pruebe los resultados.

      Abra su navegador web y visite los dos sitios http://site1.your_domain y http://site2.your_domain. Verá dos páginas como las siguientes:

      Página de información de PHP 7.0Página de información de PHP 7.2

      Observe los títulos. La primera página indica que site1.your_domain implementó la versión 7.0. La segunda indica que site2.your_domain implementó la versión 7.2.

      Ahora que probó sus sitios, elimine los archivos info.php. Plantean una amenaza de seguridad, dado que contienen información confidencial sobre su servidor y usuarios no autorizados pueden acceder a ellos. Para eliminar los dos archivos, ejecute los siguientes comandos:

      • sudo rm -rf /var/www/site1.your_domain/info.php
      • sudo rm -rf /var/www/site2.your_domain/info.php

      Ahora, tiene un único servidor de Ubuntu 18.04 que gestiona dos sitios web con dos versiones de PHP distintas. Sin embargo, PHP no se limita a este único uso.

      Conclusión

      Ahora, tiene hosts virtuales y PHP-FPM combinados para servir varios sitios web y varias versiones de PHP en un único servidor. Lo único que limita la cantidad de sitios y versiones de PHP que su servicio de Apache puede gestionar es la potencia de procesamiento de su instancia.

      Ahora, podría considerar explorar funciones más avanzadas de PHP-FPM, como su proceso de generación adaptativa o su capacidad de registro de sdtout y stderr. Alternativamente, ahora, podría proteger sus sitios web. Para hacerlo, puede seguir nuestro tutorial Cómo proteger sus sitios con certificados TLS y SSL gratuitos de Let´s Encrypt.



      Source link