Uma versão anterior deste tutorial foi escrita por Brennan Bearnes.

Introduction

Uma pilha “LAMP” é um grupo de software de código aberto que é normalmente instalado em conjunto para permitir que um servidor hospede websites dinâmicos e aplicações web. Este termo é na verdade um acrônimo que representa o sistema operacional Linux, com o servidor web Apache. Os dados do site são armazenados em um banco de dados MySQL, e o conteúdo dinâmico é processado pelo PHP.

Neste guia, instalaremos uma pilha LAMP em um servidor Ubuntu 18.04.

Prerequisites

Para completar este tutorial, você precisará ter um servidor Ubuntu 18.04 com uma conta de usuário não-root sudo habilitada e um firewall básico. Isto pode ser configurado usando nosso guia de configuração inicial do servidor para o Ubuntu 18.04.

Passo 1 – Instalando o Apache e Atualizando o Firewall

O servidor web Apache está entre os servidores web mais populares do mundo. Ele está bem documentado e tem sido amplamente utilizado durante grande parte da história da web, o que o torna uma ótima escolha padrão para hospedar um site.

Instalar o Apache usando o gerenciador de pacotes do Ubuntu, apt:

  • sudo apt update
  • sudo apt install apache2

Desde que este é um comando sudo, estas operações são executadas com privilégios de root. Ele lhe pedirá a senha do usuário regular para verificar suas intenções.

Após você ter inserido sua senha, apt lhe dirá quais pacotes ele planeja instalar e quanto espaço extra em disco eles irão ocupar. Pressione Y e pressione ENTER para continuar, e a instalação prosseguirá.

Ajustar o Firewall para Permitir o Tráfego Web

Próximo, assumindo que você seguiu as instruções iniciais de configuração do servidor e ativou o firewall UFW, certifique-se de que seu firewall permite o tráfego HTTP e HTTPS. Você pode verificar se o UFW tem um perfil de aplicativo para o Apache assim:

  • sudo ufw app list
Output
Available applications: Apache Apache Full Apache Secure OpenSSH

Se você olhar para o perfil Apache Full, ele deve mostrar que permite o tráfego para as portas 80 e 443:

  • sudo ufw app info "Apache Full"
Output
Profile: Apache FullTitle: Web Server (HTTP,HTTPS)Description: Apache v2 is the next generation of the omnipresent Apache webserver.Ports: 80,443/tcp

Permitir tráfego HTTP e HTTPS de entrada para este perfil:

  • sudo ufw allow in "Apache Full"

Pode verificar imediatamente se tudo correu como planeado visitando o endereço IP público do seu servidor no seu navegador web (veja a nota no próximo cabeçalho para saber qual é o seu endereço IP público se ainda não tiver esta informação):

http://your_server_ip

Vai ver o Ubuntu 18 por defeito.04 Página web Apache, que está lá para fins informativos e de teste. Deve se parecer com isto:

Ubuntu 18.04 Apache padrão

Se você vir esta página, então o seu servidor web agora está corretamente instalado e acessível através do seu firewall.

Como encontrar o endereço IP público do seu servidor

Se você não sabe qual é o endereço IP público do seu servidor, há uma série de maneiras de encontrá-lo. Normalmente, este é o endereço que você usa para se conectar ao seu servidor através de SSH.

Existem algumas maneiras diferentes de fazer isso a partir da linha de comando. Primeiro, você pode usar as ferramentas iproute2 para obter seu endereço IP digitando isto:

  • ip addr show eth0 | grep inet | awk '{ print ; }' | sed 's/\/.*$//'

Isto lhe dará duas ou três linhas de volta. Todos eles são endereços corretos, mas seu computador pode ser capaz de usar apenas um deles, então sinta-se livre para tentar cada um.

Um método alternativo é usar o utilitário curl para contatar uma parte externa para lhe dizer como ele vê o seu servidor. Isto é feito perguntando a um servidor específico qual é o seu endereço IP:

  • sudo apt install curl
  • curl http://icanhazip.com

Independentemente do método que você usa para obter seu endereço IP, digite-o na barra de endereços do seu navegador web para ver a página padrão do Apache.

Passo 2 – Instalando o MySQL

Agora que você tenha seu servidor web funcionando, é hora de instalar o MySQL. O MySQL é um sistema de gerenciamento de banco de dados. Basicamente, ele irá organizar e fornecer acesso a bancos de dados onde seu site pode armazenar informações.

Again, use apt para adquirir e instalar este software:

  • sudo apt install mysql-server

Note: Neste caso, você não precisa executar sudo apt update antes do comando. Isto é porque você o executou recentemente nos comandos acima para instalar o Apache. O índice de pacotes em seu computador já deve estar atualizado.

Este comando também mostrará uma lista dos pacotes que serão instalados, juntamente com a quantidade de espaço em disco que eles irão ocupar. Digite Y para continuar.

Quando a instalação estiver completa, execute um script de segurança simples que vem pré-instalado com o MySQL que removerá algumas configurações padrão perigosas e bloqueará o acesso ao seu sistema de banco de dados. Inicie o script interativo executando:

  • sudo mysql_secure_installation

Isto irá perguntar se você deseja configurar o script interativo em VALIDATE PASSWORD PLUGIN.

Note: Habilitar este recurso é algo como uma chamada de julgamento. Se ativada, senhas que não correspondem aos critérios especificados serão rejeitadas pelo MySQL com um erro. Isso causará problemas se você usar uma senha fraca em conjunto com software que configura automaticamente as credenciais de usuário do MySQL, como os pacotes Ubuntu para o phpMyAdmin. É seguro deixar a validação desabilitada, mas você deve sempre usar senhas fortes e únicas para credenciais de banco de dados.

Resposta Y para sim, ou qualquer outra coisa para continuar sem habilitar.

VALIDATE PASSWORD PLUGIN can be used to test passwordsand improve security. It checks the strength of passwordand allows the users to set only those passwords which aresecure enough. Would you like to setup VALIDATE PASSWORD plugin?Press y|Y for Yes, any other key for No:

Se você responder “sim”, você será solicitado a selecionar um nível de validação de senha. Tenha em mente que se você digitar 2 para o nível mais forte, você receberá erros ao tentar definir qualquer senha que não contenha números, letras maiúsculas e minúsculas, e caracteres especiais, ou que seja baseada em palavras comuns do dicionário.

There are three levels of password validation policy:LOW Length >= 8MEDIUM Length >= 8, numeric, mixed case, and special charactersSTRONG Length >= 8, numeric, mixed case, special characters and dictionary filePlease enter 0 = LOW, 1 = MEDIUM and 2 = STRONG: 1

Independentemente de você ter escolhido configurar o VALIDATE PASSWORD PLUGIN, seu servidor irá em seguida pedir-lhe para selecionar e confirmar uma senha para o usuário root do MySQL. Esta é uma conta administrativa no MySQL que tem privilégios aumentados. Pense nisso como sendo similar à conta root do próprio servidor (embora a que você está configurando agora seja uma conta específica para o MySQL). Certifique-se de que esta é uma senha forte e única, e não a deixe em branco.

Se você ativou a validação da senha, será mostrada a força da senha para a senha root que você acabou de digitar e seu servidor irá perguntar se você quer mudar essa senha. Se você estiver satisfeito com sua senha atual, digite N para “não” no prompt:

Using existing password for root.Estimated strength of the password: 100Change the password for root ? ((Press y|Y for Yes, any other key for No) : n

Para o resto das perguntas, pressione Y e pressione a tecla ENTER em cada prompt. Isso removerá alguns usuários anônimos e o banco de dados de teste, desabilitará logins de root remoto e carregará essas novas regras para que o MySQL respeite imediatamente as mudanças que você fez.

Note que em sistemas Ubuntu rodando MySQL 5.7 (e versões posteriores), o usuário root do MySQL está configurado para autenticar usando o plugin auth_socket por padrão ao invés de com uma senha. Isto permite alguma maior segurança e usabilidade em muitos casos, mas também pode complicar as coisas quando você precisa permitir que um programa externo (por exemplo, phpMyAdmin) acesse o usuário.

Se você preferir usar uma senha ao se conectar ao MySQL como root, você precisará mudar seu método de autenticação de auth_socket para mysql_native_password. Para fazer isso, abra o prompt MySQL do seu terminal:

  • sudo mysql

Next, verifique qual método de autenticação cada uma de suas contas de usuário MySQL usa com o seguinte comando:

  • SELECT user,authentication_string,plugin,host FROM mysql.user;
Output
+------------------+-------------------------------------------+-----------------------+-----------+| user | authentication_string | plugin | host |+------------------+-------------------------------------------+-----------------------+-----------+| root | | auth_socket | localhost || mysql.session | *THISISNOTAVALIDPASSWORDTHATCANBEUSEDHERE | mysql_native_password | localhost || mysql.sys | *THISISNOTAVALIDPASSWORDTHATCANBEUSEDHERE | mysql_native_password | localhost || debian-sys-maint | *CC744277A401A7D25BE1CA89AFF17BF607F876FF | mysql_native_password | localhost |+------------------+-------------------------------------------+-----------------------+-----------+4 rows in set (0.00 sec)

Neste exemplo, você pode ver que o usuário root de fato se autentica usando o plugin auth_socket. Para configurar a conta root para autenticar com uma senha, execute o seguinte comando ALTER USER. Certifique-se de alterar password para uma senha forte da sua escolha:

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

Em seguida, execute FLUSH PRIVILEGES o que diz ao servidor para recarregar as tabelas de concessões e colocar suas novas alterações em vigor:

  • FLUSH PRIVILEGES;

Cheque os métodos de autenticação empregados por cada um de seus usuários novamente para confirmar que o root não se autentica mais usando o plugin:auth_socket

  • SELECT user,authentication_string,plugin,host FROM mysql.user;
Output
+------------------+-------------------------------------------+-----------------------+-----------+| user | authentication_string | plugin | host |+------------------+-------------------------------------------+-----------------------+-----------+| root | *3636DACC8616D997782ADD0839F92C1571D6D78F | mysql_native_password | localhost || mysql.session | *THISISNOTAVALIDPASSWORDTHATCANBEUSEDHERE | mysql_native_password | localhost || mysql.sys | *THISISNOTAVALIDPASSWORDTHATCANBEUSEDHERE | mysql_native_password | localhost || debian-sys-maint | *CC744277A401A7D25BE1CA89AFF17BF607F876FF | mysql_native_password | localhost |+------------------+-------------------------------------------+-----------------------+-----------+4 rows in set (0.00 sec)

Você pode ver neste exemplo de saída que o usuário root do MySQL agora se autentica usando uma senha. Assim que você confirmar isso em seu próprio servidor, você pode sair do MySQL shell:

  • exit

Neste ponto, seu sistema de banco de dados está agora configurado e você pode passar para a instalação do PHP, o componente final da pilha LAMP.

Passo 3 – Instalando PHP

PHP é o componente da sua configuração que irá processar o código para exibir conteúdo dinâmico. Ele pode executar scripts, conectar-se às suas bases de dados MySQL para obter informações e entregar o conteúdo processado ao seu servidor web para exibir.

Apois novamente, aproveite o sistema apt para instalar o PHP. Além disso, inclua alguns pacotes de ajuda desta vez para que o código PHP possa ser executado sob o servidor Apache e fale com seu banco de dados MySQL:

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

Isso deve instalar o PHP sem nenhum problema. Vamos testar isso em um momento.

Na maioria dos casos, você vai querer modificar a forma como o Apache serve os arquivos quando um diretório é solicitado. Atualmente, se um usuário solicita um diretório do servidor, o Apache procurará primeiro por um arquivo chamado index.html. Nós queremos dizer ao servidor web para preferir arquivos PHP a outros, então faça o Apache procurar por um arquivo index.php primeiro.

Para fazer isso, digite este comando para abrir o arquivo dir.conf em um editor de texto com privilégios de root:

  • sudo nano /etc/apache2/mods-enabled/dir.conf

Ficará assim:

/etc/apache2/mods-enabled/dir.conf
<IfModule mod_dir.c> DirectoryIndex index.html index.cgi index.pl index.php index.xhtml index.htm</IfModule>

Move o arquivo de índice PHP (destacado acima) para a primeira posição após a especificação DirectoryIndex, assim:

/etc/apache2/mods-enabled/dir.conf
<IfModule mod_dir.c> DirectoryIndex index.php index.html index.cgi index.pl index.xhtml index.htm</IfModule>

Quando terminar, salve e feche o arquivo pressionando CTRL+X. Confirme o salvamento digitando Y e depois aperte ENTER para verificar a localização do arquivo salvo.

Após isso, reinicie o servidor web Apache para que suas alterações sejam reconhecidas. Faça isso digitando isto:

  • sudo systemctl restart apache2

Você também pode verificar o status do serviço apache2 usando systemctl:

  • sudo systemctl status apache2
Sample Output
● apache2.service - LSB: Apache2 web server Loaded: loaded (/etc/init.d/apache2; bad; vendor preset: enabled) Drop-In: /lib/systemd/system/apache2.service.d └─apache2-systemd.conf Active: active (running) since Tue 2018-04-23 14:28:43 EDT; 45s ago Docs: man:systemd-sysv-generator(8) Process: 13581 ExecStop=/etc/init.d/apache2 stop (code=exited, status=0/SUCCESS) Process: 13605 ExecStart=/etc/init.d/apache2 start (code=exited, status=0/SUCCESS) Tasks: 6 (limit: 512) CGroup: /system.slice/apache2.service ├─13623 /usr/sbin/apache2 -k start ├─13626 /usr/sbin/apache2 -k start ├─13627 /usr/sbin/apache2 -k start ├─13628 /usr/sbin/apache2 -k start ├─13629 /usr/sbin/apache2 -k start └─13630 /usr/sbin/apache2 -k start

Pressione Q para sair desta saída de status.

Para melhorar a funcionalidade do PHP, você tem a opção de instalar alguns módulos adicionais. Para ver as opções disponíveis para módulos e bibliotecas PHP, pipe os resultados de apt search para less, um pager que lhe permite percorrer a saída de outros comandos:

  • apt search php- | less

Utilize as teclas de seta para percorrer para cima e para baixo, e pressione Q para sair.

Os resultados são todos componentes opcionais que você pode instalar. Ele lhe dará uma breve descrição para cada:

bandwidthd-pgsql/bionic 2.0.1+cvs20090917-10ubuntu1 amd64 Tracks usage of TCP/IP and builds html files with graphsbluefish/bionic 2.2.10-1 amd64 advanced Gtk+ text editor for web and software developmentcacti/bionic 1.1.38+ds1-1 all web interface for graphing of monitoring systemsganglia-webfrontend/bionic 3.6.1-3 all cluster monitoring toolkit - web front-endgolang-github-unknwon-cae-dev/bionic 0.0~git20160715.0.c6aac99-4 all PHP-like Compression and Archive Extensions in Gohaserl/bionic 0.9.35-2 amd64 CGI scripting program for embedded environmentskdevelop-php-docs/bionic 5.2.1-1ubuntu2 all transitional package for kdevelop-phpkdevelop-php-docs-l10n/bionic 5.2.1-1ubuntu2 all transitional package for kdevelop-php-l10n…:

Para saber mais sobre o que cada módulo faz, você pode pesquisar na internet para mais informações sobre eles. Alternativamente, veja a descrição longa do pacote digitando:

  • apt show package_name

Haverá muitas saídas, com um campo chamado Description que terá uma explicação mais longa da funcionalidade que o módulo fornece.

Por exemplo, para descobrir o que o módulo php-cli faz, você pode digitar isto:

  • apt show php-cli

Enquanto houver uma grande quantidade de outras informações, você encontrará algo parecido com isto:

Output
…Description: command-line interpreter for the PHP scripting language (default) This package provides the /usr/bin/php command interpreter, useful for testing PHP scripts from a shell or performing general shell scripting tasks. . PHP (recursive acronym for PHP: Hypertext Preprocessor) is a widely-used open source general-purpose scripting language that is especially suited for web development and can be embedded into HTML. . This package is a dependency package, which depends on Ubuntu's default PHP version (currently 7.2).…

Se, após pesquisar, você decidir que gostaria de instalar um pacote, você pode fazê-lo usando o comando apt install como você tem feito para o outro software.

Se você decidiu que php-cli é algo que você precisa, você poderia digitar:

  • sudo apt install php-cli

Se você quiser instalar mais de um módulo, você pode fazer isso listando cada um, separado por um espaço, seguindo o comando apt install, assim:

  • sudo apt install package1 package2 ...

Neste ponto, sua pilha LAMP é instalada e configurada. Antes de fazer qualquer outra coisa, recomendamos que você configure um host virtual Apache onde você possa armazenar os detalhes de configuração do seu servidor.

Passo 4 – Configuração de hosts virtuais (Recomendado)

Quando usar o servidor web Apache, você pode usar hosts virtuais (similares a blocos de servidores no Nginx) para encapsular os detalhes de configuração e hospedar mais de um domínio a partir de um único servidor. Nós iremos configurar um domínio chamado seu_domínio, mas você deve substituí-lo pelo seu próprio nome de domínio. Para saber mais sobre como configurar um nome de domínio com DigitalOcean, consulte nossa Introdução ao DNS DigitalOcean.

Apache no Ubuntu 18.04 tem um bloco de servidor ativado por padrão que está configurado para servir documentos do diretório /var/www/html. Embora isso funcione bem para um único site, pode se tornar complicado se você estiver hospedando vários sites. Em vez de modificar /var/www/html, vamos criar uma estrutura de diretório dentro de /var/www para o nosso site_domain, deixando /var/www/html no lugar como o diretório padrão a ser servido se um pedido de cliente não corresponder a nenhum outro site.

Crie o directório para o seu_domínio da seguinte forma:

sudo mkdir /var/www/your_domain

Próximo, atribua a propriedade do directório com a variável de ambiente $USER:

  • sudo chown -R $USER:$USER /var/www/your_domain

As permissões das suas raízes web devem estar correctas se não tiver modificado o seu valor unmask, mas pode ter a certeza, digitando:

  • sudo chmod -R 755 /var/www/your_domain

Próximo, crie um exemplo index.html página usando nano ou o seu editor favorito:

  • nano /var/www/your_domain/index.html

Inside, adicione o seguinte exemplo HTML:

/var/wwww/your_domain/index.html
<html> <head> <title>Welcome to Your_domain!</title> </head> <body> <h1>Success! The your_domain server block is working!</h1> </body></html>

Guardar e fechar o ficheiro quando estiver terminado.

Para que o Apache possa servir este conteúdo, é necessário criar um ficheiro host virtual com as directrizes correctas. Ao invés de modificar o arquivo de configuração padrão localizado em /etc/apache2/sites-available/000-default.conf diretamente, vamos fazer um novo arquivo em /etc/apache2/sites-available/your_domain.conf:

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

Colar no seguinte bloco de configuração, que é similar ao padrão, mas atualizado para nosso novo diretório e nome de domínio:

/etc/apache2/sites-available/your_domain.conf
<VirtualHost *:80> ServerAdmin webmaster@localhost ServerName your_domain ServerAlias www.your_domain DocumentRoot /var/www/your_domain ErrorLog ${APACHE_LOG_DIR}/error.log CustomLog ${APACHE_LOG_DIR}/access.log combined</VirtualHost>

Notificação de que atualizamos o DocumentRoot para nosso novo diretório e ServerAdmin para um e-mail que o administrador do seu_domínio do site pode acessar. Nós também adicionamos duas diretivas: ServerName, que estabelece o domínio base que deve corresponder para esta definição de host virtual, e ServerAlias, que define outros nomes que devem corresponder como se fossem o nome base.

Guardar e fechar o ficheiro quando terminar.

Vamos activar o ficheiro com a ferramenta a2ensite:

  • sudo a2ensite your_domain.conf

Desabilite o site padrão definido em 000-default.conf:

  • sudo a2dissite 000-default.conf

Próximo, vamos testar os erros de configuração:

  • sudo apache2ctl configtest

Você deve ver a seguinte saída:

Output
Syntax OK

Reinicie o Apache para implementar suas alterações:

  • sudo systemctl restart apache2

O Apache deve agora estar servindo o seu nome de domínio. Você pode testar isso navegando para http://your_domain, onde você deve ver algo como isto:

Anfitrião virtual Apache exemplo

Com isso, seu anfitrião virtual está totalmente configurado. Antes de fazer mais mudanças ou implantar uma aplicação, no entanto, seria útil testar proativamente sua configuração PHP caso haja algum problema que deva ser resolvido.

Passo 5 – Testando o Processamento PHP no seu Servidor Web

Para testar se o seu sistema está configurado corretamente para PHP, crie um script PHP muito básico chamado info.php. Para que o Apache encontre este arquivo e o sirva corretamente, ele deve ser salvo em seu diretório raiz da web.

Criar o arquivo na raiz da web que você criou no passo anterior executando:

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

Isso abrirá um arquivo em branco. Adicione o seguinte texto, que é código PHP válido, dentro do arquivo:

info.php
<?phpphpinfo();?>

Quando você terminar, salve e feche o arquivo.

Agora você pode testar se o seu servidor web é capaz de exibir corretamente o conteúdo gerado por este script PHP. Para experimentar isto, visite esta página no seu navegador web. Você vai precisar do endereço IP público do seu servidor novamente.

O endereço que você vai querer visitar é:

http://your_domain/info.php

A página em que você deve se parecer com esta:

Ubuntu 18.04 default PHP info

Esta página fornece algumas informações básicas sobre o seu servidor a partir da perspectiva do PHP. É útil para depuração e para assegurar que suas configurações estão sendo aplicadas corretamente.

Se você pode ver esta página em seu navegador, então seu PHP está funcionando como esperado.

Você provavelmente quer remover este arquivo após este teste porque ele poderia realmente dar informações sobre seu servidor para usuários não autorizados. Para fazer isso, execute o seguinte comando:

  • sudo rm /var/www/your_domain/info.php

Você sempre pode recriar esta página se precisar acessar a informação novamente mais tarde.

Conclusion

Agora que você tenha uma pilha LAMP instalada, você tem muitas opções para o que fazer a seguir. Basicamente, você instalou uma plataforma que lhe permitirá instalar a maioria dos tipos de websites e software web no seu servidor.

Como um próximo passo imediato, você deve garantir que as conexões ao seu servidor web estejam seguras, servindo-as via HTTPS. A opção mais fácil aqui é usar Let’s Encrypt para proteger seu site com um certificado TLS/SSL gratuito.

Some outras opções populares são:

  • Instale o WordPress o sistema de gerenciamento de conteúdo mais popular na internet.
  • Configure o PHPMyAdmin para ajudar a gerenciar suas bases de dados MySQL a partir do navegador web.
  • Aprenda como usar SFTP para transferir arquivos de e para seu servidor.