Pesquisa de site

Instale Apache, MySQL, PHP (pilha LAMP) no Ubuntu 20.04 LTS


A pilha LAMP é uma plataforma de desenvolvimento web popular e de código aberto que pode ser usada para executar e implantar sites dinâmicos e aplicativos baseados na web. Normalmente, uma pilha LAMP consiste em servidor web Apache, bancos de dados MariaDB/MySQL, linguagens de programação PHP/Python/Perl. LAMP é o acrônimo de Linux, Apache, MariaDB/MYSQL, PHP/Python/Perl. Este tutorial passo a passo descreve como instalar Apache, MySQL, PHP (pilha LAMP) na edição do servidor Ubuntu 20.04 LTS.

Instale Apache, MySQL, PHP (pilha LAMP) no Ubuntu 20.04 LTS

Para os fins deste tutorial, usaremos o seguinte sistema Ubuntu.

  • Sistema operacional: Ubuntu 20.04 LTS Server Edition
  • Endereço IP: 192.168.225.52/24

Primeiro, vamos instalar o servidor Apache.

1. Instale o servidor web Apache no Ubuntu

Primeiro de tudo, atualize o servidor Ubuntu usando comandos:

sudo apt update
sudo apt upgrade

Em seguida, instale o servidor web Apache:

sudo apt install apache2

Verifique se o servidor web Apache está rodando ou não com o comando:

sudo systemctl status apache2

A saída de exemplo seria:

● apache2.service - The Apache HTTP Server
     Loaded: loaded (/lib/systemd/system/apache2.service; enabled; vendor preset: enabl>
     Active: active (running) since Fri 2020-05-29 07:02:26 UTC; 25s ago
       Docs: https://httpd.apache.org/docs/2.4/
   Main PID: 23996 (apache2)
      Tasks: 55 (limit: 2283)
     Memory: 5.1M
     CGroup: /system.slice/apache2.service
             ├─23996 /usr/sbin/apache2 -k start
             ├─23998 /usr/sbin/apache2 -k start
             └─23999 /usr/sbin/apache2 -k start

May 29 07:02:26 ubuntuserver systemd[1]: Starting The Apache HTTP Server...
May 29 07:02:26 ubuntuserver apachectl[23981]: AH00558: apache2: Could not reliably det>
May 29 07:02:26 ubuntuserver systemd[1]: Started The Apache HTTP Server.

Parabéns! O serviço Apache está instalado e funcionando!!

1.1. Permitir servidor web Apache via firewall UFW

UFW, significa Uncomplicated Firewall, é um programa para gerenciar um firewall netfilter projetado para ser fácil de usar. O UFW está disponível por padrão em todas as versões do Ubuntu.

Por padrão, o navegador Apache não pode ser acessado de sistemas remotos se você tiver habilitado o firewall UFW no Ubuntu 20.04 LTS. Você deve permitir as portas http e https seguindo as etapas abaixo.

Primeiro, liste os perfis de aplicativos disponíveis em seu sistema Ubuntu usando o comando:

sudo ufw app list

Exemplo de saída:

Available applications:
  Apache
  Apache Full
  Apache Secure
  OpenSSH

Como você pode ver, os aplicativos Apache e OpenSSH possuem perfis UFW instalados. Você pode listar informações sobre cada perfil e suas regras incluídas usando o comando ufw app info "Profile Name".

Vejamos o perfil “Apache Full ” usando o comando:

sudo ufw app info "Apache Full"

Exemplo de resultado:

Profile: Apache Full
Title: Web Server (HTTP,HTTPS)
Description: Apache v2 is the next generation of the omnipresent Apache web
server.

Ports:
80,443/tcp

Como você pode ver, o perfil "Apache Full" incluiu as regras para permitir o tráfego para as portas 80 e 443.

Agora, execute o seguinte comando para permitir o tráfego de entrada HTTP e HTTPS para este perfil:

sudo ufw allow in "Apache Full"

Você verá uma saída como abaixo:

Rules updated
Rules updated (v6)

Se você não deseja permitir o tráfego https, mas apenas o tráfego http (80), execute:

sudo ufw app info "Apache"

1.2. Teste o servidor Web Apache

Agora, abra seu navegador e acesse a página de teste do Apache navegando para http://localhost/ ou http://IP-Address/.

Se você vir a "página padrão do Apache 2 Ubuntu" conforme mostrado abaixo, você está pronto para prosseguir. O servidor Apache está funcionando!

Teste o servidor Web Apache

2. Instale o MySQL no Ubuntu

Para instalar o MySQL no Ubuntu, execute:

sudo apt install mysql-server

Verifique se o serviço MySQL está rodando ou não usando o comando:

sudo systemctl status mysql

Exemplo de resultado:

● mysql.service - MySQL Community Server
     Loaded: loaded (/lib/systemd/system/mysql.service; enabled; vendor preset: enabled)
     Active: active (running) since Fri 2020-05-29 07:15:22 UTC; 2min 8s ago
   Main PID: 25242 (mysqld)
     Status: "Server is operational"
      Tasks: 38 (limit: 2283)
     Memory: 323.7M
     CGroup: /system.slice/mysql.service
             └─25242 /usr/sbin/mysqld

May 29 07:15:16 ubuntuserver systemd[1]: Starting MySQL Community Server...
May 29 07:15:22 ubuntuserver systemd[1]: Started MySQL Community Server.

Como você pode ver na saída acima, o MySQL está em execução!

2.1. Configure a senha do usuário administrativo do banco de dados (root) para Mysql

Por padrão, a senha do usuário root do MySQL está em branco. Não é recomendado usar senha vazia para conta administrativa do banco de dados. Você precisa proteger seu servidor MySQL executando o seguinte script:

sudo mysql_secure_installation

Você será perguntado se deseja configurar o componente "VALIDATE PASSWORD" ou não. Este componente permite que os usuários configurem uma senha forte para credenciais de banco de dados. Se ativado, ele verificará automaticamente a força da senha e obrigará os usuários a definir apenas as senhas que sejam seguras o suficiente. É seguro deixá-lo desativado. No entanto, você deve usar uma senha forte e exclusiva para credenciais de banco de dados. Caso não queira habilitar este componente, basta pressionar qualquer tecla para pular a parte de validação de senha e continuar o restante das etapas.

Digite y se desejar configurar o componente VALIDATE PASSWORD:

Securing the MySQL server deployment.

Connecting to MySQL using a blank password.

VALIDATE PASSWORD COMPONENT can be used to test passwords
and improve security. It checks the strength of password
and allows the users to set only those passwords which are
secure enough. Would you like to setup VALIDATE PASSWORD component?

Press y|Y for Yes, any other key for No: y

Se sua resposta for Sim, você será solicitado a escolher o nível de validação de senha. As validações de senha disponíveis são baixa, média e forte. Basta inserir o número apropriado (0 para baixa, 1 para média e 2 para senha forte) e pressionar a tecla ENTER.

There are three levels of password validation policy:

LOW Length >= 8
MEDIUM Length >= 8, numeric, mixed case, and special characters
STRONG Length >= 8, numeric, mixed case, special characters and dictionary file

Please enter 0 = LOW, 1 = MEDIUM and 2 = STRONG: 0

Agora, digite a senha do usuário root do MySQL. Lembre-se de que você deve usar a senha do usuário root do MySQL, dependendo da política de senha escolhida na etapa anterior. Se você não habilitou o plugin, basta usar qualquer senha forte e exclusiva de sua escolha.

Please set the password for root here.

New password:

Re-enter new password:

Estimated strength of the password: 100 
Do you wish to continue with the password provided?(Press y|Y for Yes, any other key for No) : y

Depois de inserir a senha duas vezes, você verá a força da senha (no nosso caso é 100). Se estiver tudo bem para você, pressione Y para continuar com a senha fornecida. Se não estiver satisfeito com o tamanho da senha, pressione qualquer outra tecla e defina uma senha forte. Estou bem com minha senha atual, então escolhi y.

Para o restante das perguntas, basta digitar y e pressionar ENTER. Isso removerá o usuário anônimo, impedirá o login do usuário root remotamente e removerá o banco de dados de teste.

Remove anonymous users? (Press y|Y for Yes, any other key for No) : y
Success.

Normally, root should only be allowed to connect from
'localhost'. This ensures that someone cannot guess at
the root password from the network.

Disallow root login remotely? (Press y|Y for Yes, any other key for No) : y
Success.

By default, MySQL comes with a database named 'test' that
anyone can access. This is also intended only for testing,
and should be removed before moving into a production
environment.

Remove test database and access to it? (Press y|Y for Yes, any other key for No) : y
- Dropping test database...
Success.

- Removing privileges on test database...
Success.

Reloading the privilege tables will ensure that all changes
made so far will take effect immediately.

Reload privilege tables now? (Press y|Y for Yes, any other key for No) : y
Success.

All done!

Feito! Definimos a senha do usuário root do MySQL.

2.2. Alterar método de autenticação para usuário root do MySQL

Por padrão, o usuário root do MySQL está configurado para autenticar usando o plugin auth_socket a partir do MySQL 5.7 e versões mais recentes no Ubuntu. Embora aumente a segurança, também complicará as coisas quando você acessar seu servidor de banco de dados usando qualquer programa externo, por exemplo phpMyAdmin. Para corrigir esse problema, você precisa alterar o método de autenticação de auth_socket para caching_sha2_password ou mysql_native_password.

A partir da versão 8.0 do MySQL, o plugin de autenticação preferido e padrão é caching_sha2_password. O plugin de autenticação caching_sha2_password fornece criptografia de senha mais segura do que o plugin mysql_native_password.

Para alterar o plugin de autenticação, faça login no prompt do MySQL usando o comando:

sudo mysql

Ou,

mysql -u root -p

Digite a senha root do MySQL que configuramos na etapa anterior.

Execute o seguinte comando no prompt do MySQL para encontrar o método de autenticação atual para todas as contas de usuário do MySQL:

mysql> SELECT user,authentication_string,plugin,host FROM mysql.user;

Exemplo de resultado:

+------------------+------------------------------------------------------------------------+-----------------------+-----------+
| user             | authentication_string                                                  | plugin                | host      |
+------------------+------------------------------------------------------------------------+-----------------------+-----------+
| debian-sys-maint | $A$005$=s%UO"�o@>.@320vBX9Agb0kvpTpyiqIsh6XlD0UqNXLcl3KLzp46.Le. | caching_sha2_password | localhost |
| mysql.infoschema | $A$005$THISISACOMBINATIONOFINVALIDSALTANDPASSWORDTHATMUSTNEVERBRBEUSED | caching_sha2_password | localhost |
| mysql.session    | $A$005$THISISACOMBINATIONOFINVALIDSALTANDPASSWORDTHATMUSTNEVERBRBEUSED | caching_sha2_password | localhost |
| mysql.sys        | $A$005$THISISACOMBINATIONOFINVALIDSALTANDPASSWORDTHATMUSTNEVERBRBEUSED | caching_sha2_password | localhost |
| root             |                                                                        | auth_socket           | localhost |
+------------------+------------------------------------------------------------------------+-----------------------+-----------+
5 rows in set (0.00 sec)

Encontre o método de autenticação atual para todas as contas de usuário mysql no Ubuntu

Como você pode ver, o usuário root do mysql usa o plugin auth_socket para autenticação.

Para alterar o plugin auth_socket para caching_sha2_password, execute o seguinte comando no prompt do MySQL. Se você ativou o plug-in VALIDATE PASSWORD, certifique-se de ter usado uma senha forte com base nos requisitos da política atual. Um must forte consiste em pelo menos 8 caracteres, incluindo uma letra maiúscula, uma letra minúscula, um número e um caractere especial.

mysql> ALTER USER 'root'@'localhost' IDENTIFIED WITH caching_sha2_password BY 'Password123#@!';

Substitua Password123#@! por uma senha forte e exclusiva de sua escolha no comando acima.

Atualize as alterações usando o comando:

mysql> FLUSH PRIVILEGES;

Agora verifique se o plugin de autenticação atual foi alterado ou não usando o comando:

mysql> SELECT user,authentication_string,plugin,host FROM mysql.user;

Exemplo de resultado:

Verifique o plugin de autenticação atual no mysql

Bom! Agora o usuário root do MySQL pode se autenticar usando uma senha para acessar o shell do MySQL.

Saia do prompt do MySQL:

mysql> exit

Nota:

Embora o plugin caching_sha2_password forneça criptografia segura aprimorada, ele tem alguns problemas de compatibilidade com instalações existentes do MySQL. Para obter detalhes, consulte este link. Se você encontrar algum problema de compatibilidade, será necessário definir o plug-in mysql_native_password como plug-in de autenticação padrão.

Para mudar para o plugin mysql_native_password, execute o seguinte comando no prompt do MySQL.

mysql> ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'password';

Atualize as alterações usando o comando:

mysql> FLUSH PRIVILEGES;

Agora verifique novamente se o método de autenticação foi alterado ou não usando o comando:

mysql> SELECT user,authentication_string,plugin,host FROM mysql.user;

Exemplo de resultado:

Encontre o método de autenticação atual para todas as contas de usuário MySQL

Saia do prompt do mysql:

mysql> exit

3. Instale PHP no Ubuntu

Para instalar o PHP, execute:

sudo apt install php libapache2-mod-php php-mysql

Após instalar o PHP, crie o arquivo info.php na pasta de documentos raiz do Apache. Normalmente, a pasta raiz do documento do Apache será /var/www/html/ ou /var/www/ na maioria das distribuições Linux baseadas em Debian. No Ubuntu 20.04 LTS, é /var/www/html/.

Vamos criar o arquivo info.php na pasta raiz do apache:

sudo vi /var/www/html/info.php

Adicione as seguintes linhas:

<?php
phpinfo();
?>

Pressione a tecla ESC e digite :wq para salvar e sair do arquivo. Reinicie o serviço Apache para que as alterações tenham efeito.

sudo systemctl restart apache2

3.1. Testar PHP

Abra seu navegador e navegue até o URL http://IP-address/info.php.

Você verá as informações do php, como versão, API do servidor e os detalhes de todos os plug-ins php habilitados.

Página de teste PHP

Normalmente, quando um usuário solicita um diretório do servidor web, o Apache primeiro procura por um arquivo chamado index.html. Se você deseja alterar o Apache para servir arquivos php em vez de outros, mova index.php para a primeira posição no dir.conf arquivo conforme mostrado abaixo

sudo vi /etc/apache2/mods-enabled/dir.conf

Aqui está o conteúdo do arquivo acima.

<IfModule mod_dir.c>
DirectoryIndex index.html index.cgi index.pl index.php index.xhtml index.htm
</IfModule>

vim: syntax=apache ts=4 sw=4 sts=4 sr noet

Mova o arquivo index.php para primeiro. Depois de fazer as alterações, seu arquivo dir.conf ficará como abaixo.

<IfModule mod_dir.c>
DirectoryIndex index.php index.html index.cgi index.pl index.xhtml index.htm
</IfModule>

vim: syntax=apache ts=4 sw=4 sts=4 sr noet

Pressione a tecla ESC e digite :wq para salvar e fechar o arquivo. Reinicie o serviço Apache para que as alterações tenham efeito.

sudo systemctl restart apache2

3.2. Instale módulos PHP

Para melhorar a funcionalidade do PHP, você pode instalar alguns módulos PHP adicionais.

Para listar os módulos PHP disponíveis, execute:

sudo apt-cache search php- | less

Exemplo de resultado:

Listar módulos PHP disponíveis no Ubuntu

Use as teclas de seta para ver o resultado. Para sair, digite q.

Para encontrar os detalhes de qualquer módulo php específico, por exemplo php-gd, execute:

sudo apt-cache show php-gd

Para instalar um módulo php, execute:

sudo apt install php-gd

Não se esqueça de reiniciar o serviço Apache após instalar um módulo php. Para verificar se o módulo está carregado ou não, abra o arquivo info.php no seu navegador e verifique se ele está presente.

Parabéns! Como você pode ver, é muito fácil instalar Apache, mysql, php (pilha LAMP) no Ubuntu 20.04 LTS. Agora você pode começar a hospedar seus sites usando a pilha LAMP.

Leia a seguir:

  • Instale o phpMyAdmin com LAMP Stack no Ubuntu 20.04 LTS

Leitura relacionada:

  • Instalar Nginx, MySQL, PHP (pilha LEMP) no Ubuntu 20.04 LTS
  • Instale Apache, MariaDB, PHP (pilha LAMP) no CentOS 8

Artigos relacionados