Pesquisa de site

Como instalar a pilha Linux, Apache, MariaDB, PHP (LAMP) no Debian 10


Introdução

Uma pilha LAMP é um grupo de software de código aberto normalmente instalado em conjunto para permitir que um servidor hospede sites dinâmicos e aplicativos da web. Este termo é uma sigla que representa o sistema operacional Linux, com o servidor web Apache. Os dados do site são armazenados em um banco de dados MariaDB e o conteúdo dinâmico é processado pelo PHP.

Embora essa pilha de software normalmente inclua o MySQL como sistema de gerenciamento de banco de dados, algumas distribuições do Linux - incluindo o Debian - usam o MariaDB como um substituto para o MySQL.

Neste guia, você instalará uma pilha LAMP em um servidor Debian 10, usando o MariaDB como sistema de gerenciamento de banco de dados.

Pré-requisitos

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

Passo 1 — Instalando o Apache e atualizando o firewall

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

Comece atualizando o cache do gerenciador de pacotes. Se esta for a primeira vez que você está usando sudo nesta sessão, você será solicitado a fornecer sua senha de usuário para confirmar que possui os privilégios corretos para gerenciar pacotes do sistema com apt:

  1. sudo apt update

Em seguida, instale o Apache com o seguinte:

  1. sudo apt install apache2

Este comando solicita que você confirme a instalação do Apache. Confirme pressionando Y, depois ENTER. Quando a instalação estiver concluída, você precisará ajustar as configurações do firewall. Supondo que você seguiu as instruções iniciais de configuração do servidor para instalar e habilitar o firewall UFW, certifique-se de que seu firewall permita o tráfego HTTP e HTTPS.

No Debian 10, o UFW vem carregado com perfis de aplicativos que você pode usar para ajustar suas configurações de firewall. Veja a lista completa de perfis de aplicativos executando:

  1. sudo ufw app list

Os perfis WWW são usados para gerenciar portas usadas por servidores web:

Output
Available applications: . . . WWW WWW Cache WWW Full WWW Secure . . .

Se você inspecionar o perfil WWW Full, ele mostra que permite o tráfego para as portas 80 e 443:

  1. sudo ufw app info "WWW Full"
Output
Profile: WWW Full Title: Web Server (HTTP,HTTPS) Description: Web Server (HTTP,HTTPS) Ports: 80,443/tcp

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

  1. sudo ufw allow in "WWW Full"

Você pode verificar se tudo correu conforme o planejado visitando o endereço IP público do seu servidor em seu navegador:

http://your_server_ip

Isso retornará a página da Web padrão do Debian 10 Apache, que existe para fins informativos e de teste:

Se o seu navegador retornar esta página, então o seu servidor web agora está instalado corretamente 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á várias maneiras de encontrá-lo. Normalmente, este é o endereço que você usa para se conectar ao seu servidor por meio do SSH.

Existem algumas maneiras diferentes de fazer isso na linha de comando. Primeiro, você pode usar as ferramentas iproute2 para obter seu endereço IP executando:

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

Isso retornará duas ou três linhas de volta. Eles são todos endereços corretos, mas seu computador pode ser capaz de usar apenas um, portanto, sinta-se à vontade para experimentar cada um deles.

Um método alternativo é usar o utilitário curl para entrar em contato com uma parte externa para informar como ele vê seu servidor. Você pode executar o seguinte comando e perguntar a um servidor específico qual é o seu endereço IP:

Como o Debian 10 não tem curl como padrão, você precisará instalá-lo primeiro:

  1. sudo apt install curl

Em seguida, execute o seguinte comando e pergunte a um servidor específico qual é o seu endereço IP:

  1. curl http://icanhazip.com

Independentemente do método, escreva seu endereço IP em seu navegador da Web para verificar se seu servidor está executando a página Apache padrão.

Passo 2 — Instalando o MariaDB

Agora que você tem um servidor web funcionando, você precisa instalar o sistema de banco de dados para poder armazenar e gerenciar os dados do seu site.

No Debian 10, o metapacote mysql-server, que era tradicionalmente usado para instalar o servidor MySQL, foi substituído por default-mysql-server. Este metapacote faz referência ao MariaDB, um fork da comunidade do servidor MySQL original da Oracle, e atualmente é o servidor de banco de dados compatível com MySQL padrão disponível em repositórios gerenciadores de pacotes baseados em Debian.

Para compatibilidade de longo prazo, no entanto, é recomendável que, em vez de usar o metapacote, você instale o MariaDB usando o pacote real do programa, mariadb-server.

Para instalar o software MariaDB, execute:

  1. sudo apt install mariadb-server

Quando a instalação estiver concluída, é recomendável executar um script de segurança que vem pré-instalado com o MariaDB. Este script removerá algumas configurações padrão inseguras e bloqueará o acesso ao seu sistema de banco de dados. Inicie o script interativo executando:

  1. sudo mysql_secure_installation

Este script o guiará por uma série de prompts onde você poderá fazer algumas alterações na configuração do MariaDB. O primeiro prompt solicitará que você insira a senha raiz do banco de dados atual. Isso não deve ser confundido com a raiz do sistema. O usuário raiz do banco de dados é um usuário administrativo com privilégios totais sobre o sistema de banco de dados. Como você instalou recentemente o MariaDB e ainda não fez nenhuma alteração na configuração, esta senha estará em branco, então pressione ENTER no prompt.

O próximo prompt pergunta se você deseja configurar uma senha raiz do banco de dados. Como o MariaDB usa um método de autenticação especial para o usuário root que normalmente é mais seguro do que usar uma senha, você não precisa definir isso agora. Pressione N e então ENTER.

A partir daí, você pode pressionar Y e então ENTER para aceitar os padrões para todas as perguntas subseqüentes. Isso removerá usuários anônimos e o banco de dados de teste, desativará o login root remoto e carregará essas novas regras para que o MariaDB respeite imediatamente as alterações feitas.

Quando terminar, faça login no console do MariaDB:

  1. sudo mariadb

Isso conectará ao servidor MariaDB como o usuário raiz do banco de dados administrativo, que é inferido pelo uso de sudo ao executar este comando. Você deve receber a seguinte saída:

Output
Welcome to the MariaDB monitor. Commands end with ; or \g. Your MariaDB connection id is 42 Server version: 10.3.36-MariaDB-0+deb10u2 Debian 10 Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others. Type 'help;' or '\h' for help. Type '\c' to clear the current input statement. MariaDB [(none)]>

Observe que você não precisou fornecer uma senha para se conectar como usuário root. Isso funciona porque o método de autenticação padrão para o usuário administrativo do MariaDB é unix_socket em vez de password. Embora isso possa parecer uma preocupação de segurança a princípio, torna o servidor de banco de dados mais seguro porque os únicos usuários com permissão para efetuar login como usuário root do MariaDB são os usuários do sistema com privilégios sudo conectando-se a partir do console ou por meio de um aplicativo em execução com os mesmos privilégios. Em termos práticos, isso significa que você não poderá usar o usuário raiz do banco de dados administrativo para se conectar a partir de seu aplicativo PHP.

Para aumentar a segurança, é melhor ter contas de usuário dedicadas com privilégios menos expansivos configurados para cada banco de dados, especialmente se você planeja ter vários bancos de dados hospedados em seu servidor.

Você pode sair do console do MariaDB com o seguinte:

  1. exit

Seu servidor MariaDB agora está instalado e protegido. Em seguida, você instalará o PHP, o componente final da pilha LAMP.

Passo 3 — Instalando o PHP

Você tem o Apache instalado para servir seu conteúdo e o MariaDB instalado para armazenar e gerenciar seus dados. O PHP é o componente de sua configuração que processará o código para exibir o conteúdo dinâmico ao usuário final. Ele pode executar scripts, conectar-se aos seus bancos de dados MariaDB para obter informações e entregar o conteúdo processado ao seu servidor da Web para exibição.

Além do pacote php, você precisará do php-mysql, um módulo PHP que permite que o PHP se comunique com bancos de dados baseados em MySQL, como o MariaDEB. Você também precisará de libapache2-mod-php para permitir que o Apache manipule arquivos PHP. Os pacotes principais do PHP serão instalados automaticamente como dependências.

Para instalar esses pacotes, execute o seguinte comando:

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

Quando a instalação estiver concluída, você pode verificar sua versão do PHP com o seguinte comando:

  1. php -v
Output
PHP 7.3.31-1~deb10u2 (cli) (built: Dec 15 2022 09:39:10) ( NTS ) Copyright (c) 1997-2018 The PHP Group Zend Engine v3.3.31, Copyright (c) 1998-2018 Zend Technologies with Zend OPcache v7.3.31-1~deb10u2, Copyright (c) 1999-2018, by Zend Technologies

Na maioria dos casos, você desejará modificar a maneira como o Apache serve os arquivos. Atualmente, se um usuário solicitar um diretório do servidor, o Apache primeiro procurará por um arquivo chamado index.html. Para instruir o servidor web a preferir arquivos PHP em detrimento de outros, você pode configurar o Apache para procurar um arquivo index.php primeiro.

Para fazer isso, execute o seguinte comando para abrir o arquivo dir.conf em seu editor de texto preferido com privilégios de root. Neste exemplo, estamos usando nano:

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

O conteúdo será o seguinte:

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

Mova o arquivo de índice PHP para a primeira posição após a especificação DirectoryIndex, como no seguinte:

<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. Se estiver usando nano, você pode fazer isso pressionando CTRL+X, depois Y e ENTER para confirme.

Agora recarregue a configuração do Apache:

  1. sudo systemctl reload apache2

Você pode verificar o status do serviço apache2 com systemctl status:

  1. sudo systemctl status apache2
Sample Output
● apache2.service - The Apache HTTP Server Loaded: loaded (/lib/systemd/system/apache2.service; enabled; vendor preset: Active: active (running) since Fri 2023-01-20 22:21:24 UTC; 2min 12s ago Docs: https://httpd.apache.org/docs/2.4/ Process: 13076 ExecStart=/usr/sbin/apachectl start (code=exited, status=0/SUCC Process: 13097 ExecReload=/usr/sbin/apachectl graceful (code=exited, status=0/ Main PID: 13080 (apache2) Tasks: 6 (limit: 4915) Memory: 13.7M CGroup: /system.slice/apache2.service ├─13080 /usr/sbin/apache2 -k start ├─13101 /usr/sbin/apache2 -k start ├─13102 /usr/sbin/apache2 -k start ├─13103 /usr/sbin/apache2 -k start ├─13104 /usr/sbin/apache2 -k start └─13105 /usr/sbin/apache2 -k start

Neste ponto, sua pilha LAMP está totalmente operacional, mas antes de testar sua configuração com um script PHP, é melhor configurar um host virtual Apache adequado para armazenar os arquivos e pastas do seu site. Você configurará isso na próxima etapa.

Etapa 4 — Criando um host virtual para o seu site

Ao usar o servidor web Apache, você pode criar hosts virtuais (semelhantes aos blocos de servidor no Nginx) para encapsular detalhes de configuração e hospedar mais de um domínio de um único servidor. Nesta seção, você configurará um domínio chamado your_domain, mas deverá substituí-lo por seu próprio nome de domínio.

Observação: caso você esteja usando a DigitalOcean como provedor de DNS, verifique a documentação do produto para obter instruções detalhadas sobre como configurar um novo nome de domínio e apontá-lo para o seu servidor

Por padrão, o Apache serve seu conteúdo de um diretório localizado em /var/www/html, usando a configuração contida em /etc/apache2/sites-available/000-default.conf. Em vez de modificar o arquivo de configuração do site padrão, você criará um novo host virtual para testar seu ambiente PHP. Os hosts virtuais permitem que você mantenha vários sites hospedados em um único servidor Apache. Você também criará uma estrutura de diretório dentro de /var/www para o site your_domain, deixando /var/www/html como o diretório padrão a ser servido se um cliente a solicitação não corresponde a nenhum outro site.

Comece criando o diretório da web raiz para your_domain da seguinte maneira:

  1. sudo mkdir /var/www/your_domain

Em seguida, atribua a propriedade do diretório com a variável de ambiente $USER, que fará referência ao usuário atual do sistema:

  1. sudo chown -R $USER:$USER /var/www/your_domain

Em seguida, abra um novo arquivo de configuração no diretório sites-available do Apache usando seu editor de texto preferido. nano é usado no seguinte exemplo:

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

Isso cria um novo arquivo em branco. Adicione a seguinte configuração básica com seu próprio nome de domínio:

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

Com esta configuração VirtualHost, você está dizendo ao Apache para servir seu_domínio usando /var/www/seu_domínio como o diretório raiz da web. Se quiser testar o Apache sem um nome de domínio, você pode remover ou comentar as opções ServerName e ServerAlias adicionando um sinal de libra (#) no início das linhas de cada opção.

Salve e feche o arquivo quando terminar.

Agora use a2ensite para ativar este host virtual:

  1. sudo a2ensite your_domain

Você pode querer desabilitar o site padrão que vem instalado com o Apache. Isso é necessário se você não estiver usando um nome de domínio personalizado, porque, nesse caso, a configuração padrão do Apache substituiria seu host virtual. Para desativar o site padrão do Apache, execute:

  1. sudo a2dissite 000-default

Para garantir que seu arquivo de configuração não contenha erros de sintaxe, você pode executar:

  1. sudo apache2ctl configtest

Por fim, recarregue o Apache para que essas alterações entrem em vigor:

  1. sudo systemctl reload apache2

Em seguida, você criará um script PHP para testar se o PHP está instalado e configurado corretamente em seu servidor.

Etapa 5 — Testando o processamento PHP em seu servidor Web

Agora que você tem um local personalizado para hospedar os arquivos e pastas do seu site, crie um script de teste PHP para confirmar se o Apache é capaz de manipular e processar solicitações de arquivos PHP.

Comece criando um novo arquivo chamado info.php dentro de sua pasta raiz web personalizada:

  1. nano /var/www/your_domain/info.php

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

<?php
phpinfo();

Quando terminar, salve e feche o arquivo.

Para testar o script, acesse seu navegador e acesse o nome de domínio ou endereço IP do seu servidor, seguido do nome do script, que neste caso é info.php:

http://your_domain/info.php

Aqui está um exemplo da página web PHP padrão:

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

Se você receber esta página em seu navegador, a instalação do PHP está funcionando conforme o esperado.

Depois de verificar as informações relevantes sobre seu servidor PHP nessa página, é melhor remover o arquivo que você criou, pois contém informações confidenciais sobre seu ambiente PHP e seu servidor Debian. Você pode usar rm para fazer isso:

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

Você sempre pode recriar esta página se precisar acessar as informações novamente mais tarde.

Etapa 6 — Testando a conexão do banco de dados do PHP (opcional)

Se você deseja testar se o PHP é capaz de se conectar ao MariaDB e executar consultas ao banco de dados, você pode criar uma tabela de teste com dados de teste e consultar seu conteúdo a partir de um script PHP. Antes de fazer isso, você precisa criar um banco de dados e um novo usuário MariaDB devidamente configurado para acessá-lo.

Primeiro, conecte-se ao console do MariaDB usando a conta root:

  1. sudo mariadb

Para criar um novo banco de dados, execute o seguinte comando no console do MariaDB:

  1. CREATE DATABASE example_database;

Agora crie um novo usuário e conceda a ele privilégios totais no banco de dados personalizado que você criou.

O comando a seguir cria um novo usuário chamado example_user que é autenticado com uma senha. Estamos definindo a senha desse usuário como password, mas você deve substituir esse valor por uma senha segura de sua escolha:

  1. CREATE USER 'example_user'@'%' IDENTIFIED BY 'password';

Em seguida, dê permissão a esse usuário sobre o banco de dados example_database:

  1. GRANT ALL ON example_database.* TO 'example_user'@'%';

Isso dará ao usuário example_user privilégios totais sobre o banco de dados example_database, evitando que esse usuário crie ou modifique outros bancos de dados em seu servidor.

Em seguida, libere os privilégios para garantir que eles sejam salvos e disponíveis na sessão atual:

  1. FLUSH PRIVILEGES;

Depois disso, saia do shell MariaDB:

  1. exit

Você pode testar se o novo usuário tem as permissões adequadas fazendo login no console do MariaDB novamente, desta vez usando as credenciais de usuário personalizadas:

  1. mariadb -u example_user -p

Observe o sinalizador -p neste comando, que solicitará a senha usada ao criar o exemplo_usuário. Depois de fazer login no console do MariaDB, confirme se você tem acesso ao example_database:

  1. SHOW DATABASES;

Isso lhe dará a seguinte saída:

Output
+--------------------+ | Database | +--------------------+ | example_database | | information_schema | +--------------------+ 2 rows in set (0.000 sec)

Em seguida, crie uma tabela de teste chamada todo_list. No console do MariaDB, execute a seguinte instrução:

  1. CREATE TABLE example_database.todo_list (
  2. item_id INT AUTO_INCREMENT,
  3. content VARCHAR(255),
  4. PRIMARY KEY(item_id)
  5. );

Insira algumas linhas de conteúdo na tabela de teste. Repita o próximo comando algumas vezes, usando valores diferentes para preencher sua tabela de teste:

  1. INSERT INTO example_database.todo_list (content) VALUES ("My first important item");

Para confirmar que os dados foram salvos com sucesso em sua tabela, execute:

  1. SELECT * FROM example_database.todo_list;

Você receberá a seguinte saída:

Output
+---------+--------------------------+ | item_id | content | +---------+--------------------------+ | 1 | My first important item | | 2 | My second important item | | 3 | My third important item | | 4 | and this one more thing | +---------+--------------------------+ 4 rows in set (0.000 sec)

Depois de confirmar que você possui dados válidos em sua tabela de teste, você pode sair do console do MariaDB:

  1. exit

Agora você pode criar o script PHP que se conectará ao MariaDB e consultará seu conteúdo. Crie um novo arquivo PHP em seu diretório raiz da Web personalizado usando seu editor preferido. nano é usado neste exemplo:

  1. nano /var/www/your_domain/todo_list.php

O script PHP a seguir se conecta ao banco de dados MariaDB e consulta o conteúdo da tabela todo_list, exibindo os resultados em uma lista. Se houver um problema com a conexão do banco de dados, ele lançará uma exceção.

Adicione este conteúdo em seu script todo_list.php, lembrando de substituir example_user e password values com os seus próprios:

<?php
$user = "example_user";
$password = "password";
$database = "example_database";
$table = "todo_list";

try {
  $db = new PDO("mysql:host=localhost;dbname=$database", $user, $password);
  echo "<h2>TODO</h2><ol>"; 
  foreach($db->query("SELECT content FROM $table") as $row) {
    echo "<li>" . $row['content'] . "</li>";
  }
  echo "</ol>";
} catch (PDOException $e) {
    print "Error!: " . $e->getMessage() . "<br/>";
    die();
}

Salve e feche o arquivo quando terminar de editar.

Agora você pode acessar esta página em seu navegador da Web visitando o nome de domínio ou endereço IP público do seu site, seguido por /todo_list.php:

http://your_domain/todo_list.php

Esta página da web revelará o conteúdo que você inseriu em sua tabela de teste para o visitante:

Isso significa que seu ambiente PHP está pronto para se conectar e interagir com seu servidor MariaDB.

Conclusão

Neste guia, você construiu uma base flexível para servir sites e aplicativos PHP para seus visitantes, usando o Apache como um servidor web e o MariaDB como o sistema de banco de dados.

Como próxima etapa imediata, você deve garantir que as conexões com seu servidor da Web sejam seguras, servindo-as via HTTPS. Para conseguir isso, você pode usar How to Install and Use Composer para dependência e gerenciamento de pacotes em PHP.