One place for hosting & domains

      Executar

      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

      Como usar o nsh para executar comandos remotos seguros no Ubuntu 18.04


      Introdução

      Muitas vezes é difícil gerenciar várias máquinas em um banco de dados diariamente. Ainda que o Secure Shell (SSH) seja uma boa escolha para o acesso remoto, o protocolo em si possui alguns inconvenientes tanto em conveniência como em segurança.

      Por exemplo, máquinas remotas precisam ter um endereço IP público e uma porta redirecionada para acessá-los, o que os expõe à Internet, ou pelo menos a uma rede maior. Isso é especialmente preocupante caso use uma senha para autenticação em vez de um par de chaves público e privado. Além disso, caso não conheça a chave pública da máquina remota antecipadamente, você fica vulnerável a um ataque “man-in-the-middle”. E muitas máquinas remotas que você vai querer acessar não têm endereço IP público ou têm um endereço IP dinâmico que você não sabe.

      Além disso, o SSH exige uma conexão por sessão remota. Se um usuário precisa executar um único comando em centenas ou mesmo milhares de máquinas, é preciso primeiro estabelecer uma conexão com cada máquina com um handshake TCP, que é menos eficiente.

      O NKN Shell, ou nsh, é uma alternativa ao SSH que fornece uma maneira conveniente e segura de executar comandos remotos. O nsh aproveita a rede pública global do NKN, que fornece transmissão de dados segura e descentralizada. A arquitetura usa endereços únicos que contêm uma chave pública usada tanto para o roteamento quanto para a criptografia end-to-end sem nenhuma infraestrutura de chave pública (PKI). A rede também não exige que o servidor remoto tenha um endereço IP público. O servidor remoto precisa ter acesso à Internet e ser capaz de estabelecer conexões HTTP de saída e de websocket. Como resultado, suas máquinas remotas não são expostas à Internet aberta.

      Neste tutorial, você usará o daemon do NKN shell e o aplicativo Xterm do cliente NKN Shell para executar comandos em uma máquina remota. Para fazer isso, você instalará e configurará o daemon do NKN Shell em uma máquina remota com acesso à internet, gerará um par de chaves e fará sua conexão de um cliente.

      Pré-requisitos

      Para seguir este tutorial, você precisará do seguinte:

      Passo 1 — Instalando o NKN Shell em um servidor remoto

      Primeiro, instale o daemon do NKN shell (nsd) no seu servidor. Esse aplicativo invoca o nkn-multiclient, que se conectará à rede pública do NKN e receberá um endereço para o roteamento. Então, o daemon escutará comandos shell de entrada de clientes autenticados e listados, executará esses comandos e, em seguida, enviará os resultados de volta.

      Comece baixando os binários nshd pré-compilados do GitHub mais recentes:

      • wget https://github.com/nknorg/nkn-shell-daemon/releases/latest/download/linux-amd64.tar.gz

      Descompacte o arquivo:

      • tar -zxvf linux-amd64.tar.gz

      Então, mova os arquivos para o diretório /usr/local/bin, para que eles estejam disponíveis em todo o sistema:

      • sudo mv ./linux-amd64/* /usr/local/bin/

      Em seguida, você configurará isso para ser executado como um processo daemon usando o Systemd, para que ele seja reiniciado caso o servidor seja redefinido.

      Crie um arquivo chamado nshd.service em /etc/systemd/system:

      • sudo nano /etc/systemd/system/nshd.service

      Adicione a seguinte definição de serviço ao arquivo para configurar o serviço:

      /etc/systemd/system/nshd.service

      [Unit]
      Description=NKN Shell Daemon
      After=network.target
      
      [Service]
      Type=simple
      User=root
      Group=root
      Restart=always
      ExecStart=/usr/local/bin/nshd
      
      [Install]
      WantedBy=multi-user.target
      

      Saiba mais sobre arquivos de unidade do Systemd em Entendendo unidades do Systemd e arquivos de unidade.

      Salve o arquivo e saia do editor. Então, habilite e inicie o serviço nshd com os seguintes comandos:

      • sudo systemctl enable nshd.service
      • sudo systemctl start nshd.service

      Execute o seguinte comando para garantir que o serviço esteja ativo e iniciado:

      • sudo systemctl status nshd.service

      Você verá que o status está ativo:

      Output

      ● nshd.service - NKN Shell Daemon Loaded: loaded (/etc/systemd/system/nshd.service; enabled; vendor preset: enabled) Active: active (running) since Wed 2020-02-19 19:16:02 UTC; 7s ago Main PID: 3457 (nshd) Tasks: 10 (limit: 1152) CGroup: /system.slice/nshd.service └─3457 /usr/local/bin/nshd Feb 19 19:16:02 your_hostname systemd[1]: Started NKN Shell Daemon. Feb 19 19:16:03 your_hostname nshd[3457]: Create directory /etc/nshd/ Feb 19 19:16:03 your_hostname nshd[3457]: Create password and save to file /etc/nshd/wallet.pswd Feb 19 19:16:03 your_hostname nshd[3457]: Create wallet and save to file /etc/nshd/wallet.json Feb 19 19:16:03 your_hostname nshd[3457]: Create authorized pubkeys file /etc/nshd/authorized_pubkeys Feb 19 19:16:03 your_hostname nshd[3457]: Listening at d46567b883a3070ee3fe879d9fa2d5dc55a95f79ff2797c42df36c6979e5c4Aba

      Para se conectar ao seu servidor, você precisará obter seu endereço NKN, que pode ser encontrado no resultado do comando anterior. Também é possível executar o seguinte comando para obter o endereço:

      Você verá seu endereço aparecer:

      Output

      e70ca28ede84fc0659f2869255e8a393aef35b4fa5a7e036f29127c7dba75383

      Anote este endereço, uma vez que precisará dele para se conectar ao seu servidor.

      Agora que o daemon está em execução e escutando, é possível configurar o cliente baseado na Web para falar com o servidor.

      Passo 2 — Configurando as permissões para o cliente NKN Shell

      Você precisará de um cliente compatível que possa se conectar à máquina remota. Neste tutorial, você usará o cliente Xterm do NKN Shell, um cliente NKN shell baseado na Web. Há várias maneiras diferentes de executá-lo:

      Neste tutorial, você usará a versão hospedada. Na sua máquina local, abra o navegador Web e navegue até https://nsh.nkn.org. Você verá uma tela de boas vindas:

      O cliente do Shell

      Clique em Generate New Key Pair (Gerar novo par de chaves). Suas chaves serão geradas e exibidas como mostrado na imagem seguinte:

      O par de chaves gerado

      Nota: quando gerar um novo par de chaves, você verá um seed secreto. Mantenha esse seed secreto seguro, assim como você faria com sua chave privada SSH. Qualquer um que tenha esse seed secreto pode usá-lo para regenerar sua chave pública e, em seguida, executar comandos em suas máquinas remotas. Seu navegador se lembrará desse seed, mas você deve copiá-lo em um lugar seguro para que possa usá-lo novamente em uma nova máquina.

      Salve o seed secreto em um lugar seguro. É possível usá-lo mais tarde para regenerar sua chave pública para que você possa se conectar a partir de uma máquina de cliente diferente.

      Como trata-se de um novo par de chaves, é preciso adicionar a chave pública ao arquivo /etc/nshd/authorized_pubkeys no seu servidor.

      O /etc/nshd/authorized_pubkeys tem um papel semelhante ao arquivo ~/authorized_keys, que controla quais chaves públicas SSH podem fazer login. O arquivo authorized_pubkeys especifica qual usuário está associado a uma chave. Para fins de segurança, faça login usando um usuário não raiz neste tutorial, de modo que a chave pública gerada seja associada com seu usuário sammy criado no tutorial pré-requisito deste artigo, Configuração inicial de servidor.

      Para associar um usuário à chave pública, será necessário obter o ID de usuário (UID) e o ID de grupo (GID) deste usuário. Execute o seguinte comando no seu servidor, enquanto logado como o usuário sammy:

      Você verá o UID e o GID do usuário:

      Output

      uid=1000(sammy) gid=1000(sammy) groups=1000(sammy),27(sudo)

      Agora, abra o arquivo authorized_pubkeys no seu editor:

      • sudo nano /etc/nshd/authorized_pubkeys

      Adicione uma linha única que contenha a chave pública, UID e GID, separados por espaços:

      authorized_pubkeys

      5d5367a5730427c205904a4457392051d2045dbce0186518fb6eb24dd9e41ba6 1000 1000
      

      Salve o arquivo.

      Verifique se o arquivo contém o conteúdo correto:

      • cat /etc/nshd/authorized_pubkeys

      Você verá sua chave impressa na tela:

      Output

      5d5367a5730427c205904a4457392051d2045dbce0186518fb6eb24dd9e41ba6 1000 1000

      Então, reinicie o daemon nshd para aplicar as alterações:

      • sudo systemctl restart nshd.service

      Agora, vamos testá-lo. Para isso, conecte-se ao servidor e execute um comando.

      Passo 3 — Enviando um comando para a máquina remota e recebendo uma resposta

      No cliente NKN Shell, digite seu endereço remoto nshd do Passo 1, bem como um identificador de cliente opcional:

      O site nsh com o endereço remoto preenchido

      Clique em Connect (Conectar) para iniciar a conexão.

      Você se conectará à sua máquina remota e será exibido um prompt de terminal dentro do navegador. A partir daqui, use-o da mesma forma que o SSH. Por exemplo, execute o comando a seguir para alternar para o diretório /etc/nshd:

      Então, liste o conteúdo do diretório:

      Você verá o conteúdo dele:

      Output

      authorized_pubkeys wallet.json wallet.pswd

      Desconecte-se digitando exit. Quando precisar se reconectar, visite novamente a interface Web e digite seus detalhes de conexão. Caso gere um novo par de chaves, será necessário adicionar a nova chave pública ao seu servidor.

      Conclusão

      Neste tutorial, você instalou e configurou o nsh para enviar comandos de maneira segura e conveniente para uma máquina remota. O nsh é uma ótima maneira de acessar suas máquinas remotas quando você precisa executar rapidamente um comando para obter o status mais recente de um serviço ou espiar algumas definições de configuração. O aplicativo se baseia na rede pública global da NKN e é gratuito para usar. Dessa forma, você pode incorporá-lo no seu próprio aplicativo ou fluxo de trabalho hoje.

      Também é possível explorar o nkn-tunnel, que é compatível com o SSH ou qualquer outro aplicativo baseado no TCP.



      Source link