Tutorial

Como instalar o Linux, o Apache, o MariaDB e a pilha (LAMP) PHP no CentOS 8

ApachePHPLAMP StackMariaDB

Introdução

Uma pilha de software “LAMP” é um grupo de softwares de código aberto que são, normalmente, instalados juntos para permitir que um servidor hospede sites dinâmicos e aplicativos Web escritos em PHP. Este termo é uma sigla que representa o sistema operacional Linux com o servidor Web do Apache. Os dados do back-end são armazenados em um banco de dados MariaDB e o processamento dinâmico é gerenciado pelo PHP.

A camada de banco de dados em uma pilha LAMP é, normalmente, um servidor de banco de dados do MySQL. Porém, antes do lançamento do CentOS 8, o MySQL não estava disponível a partir dos repositórios padrão do CentOS. Por isso, o MariaDB, uma bifurcação da comunidade do MySQL, tornou-se uma alternativa amplamente aceita ao MySQL como o sistema padrão de banco de dados para as pilhas LAMP em máquinas com o CentOS. O MariaDB funciona como uma substituição solta para o servidor original do MySQL. Na prática, isso significa que você pode mudar para o MariaDB sem ter que fazer quaisquer alterações de configuração ou código em seu aplicativo.

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

Pré-requisitos

Para seguir este guia, você precisará de acesso a um servidor CentOS 8 como um usuário não raiz com privilégios sudo, e um firewall ativo instalado no seu servidor. Para configurar isso, você pode seguir nosso Guia de configuração inicial de servidor para o CentOS 8.

Passo 1 — Instalando o servidor Web Apache

Para exibir páginas Web aos visitantes de nosso site, usaremos o Apache, um servidor Web de código aberto popular, que pode ser configurado para auxiliar páginas PHP. Usaremos o gerenciador de pacotes dnf, que é o novo gerenciador de pacotes padrão no CentOS 8, para instalar esse software.

Instale o pacote httpd com:

  • sudo dnf install httpd

Quando solicitado, digite y para confirmar que deseja instalar o Apache.

Após a instalação terminar, execute o seguinte comando para habilitar e iniciar o servidor:

  • sudo systemctl start httpd

Caso tenha habilitado o firewall firewalld, conforme nosso guia de configuração inicial do servidor, será necessário que você permita conexões ao Apache. O comando a seguir irá habilitar permanentemente conexões HTTP, as quais, por padrão, executam na porta 80:

  • sudo firewall-cmd --permanent --add-service=http

Para verificar se a mudança foi aplicada, execute:

  • sudo firewall-cmd --permanent --list-all

Você verá um resultado como este:

Output
public target: default icmp-block-inversion: no interfaces: sources: services: cockpit dhcpv6-client http ssh ports: protocols: masquerade: no forward-ports: source-ports: icmp-blocks: rich rules:

Você precisará recarregar a configuração do firewall para que as alterações vigorem:

  • sudo firewall-cmd --reload

Com a nova regra de firewall adicionada, você poderá testar se o servidor está em funcionamento, acessando o endereço IP público do seu servidor ou nome de domínio do seu navegador Web.

Nota: caso esteja usando a DigitalOcean como provedor de hospedagem DNS, você pode conferir nossos docs de produto para obter instruções detalhadas sobre como configurar um novo nome de domínio e apontá-lo para o seu servidor.

Se você não tiver um nome de domínio apontado para o seu servidor e não sabe o endereço IP público do seu servidor, você pode encontrá-lo, executando o seguinte comando:

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

Isso imprimirá alguns endereços IP. Você pode testar cada um deles em seu navegador Web.

Como uma alternativa, você pode verificar qual endereço IP está acessível, conforme visualizado de outros locais na internet:

  • curl -4 icanhazip.com

No seu navegador Web, digite o endereço que receber, e ele irá levá-lo até a página inicial padrão do Apache:

Página padrão do Apache do CentOS 8

Caso veja essa página, então seu servidor Web está agora corretamente instalado.

Passo 2 — Instalando o MariaDB

Agora que tem um servidor Web em funcionamento, você precisa instalar um sistema de banco de dados, para conseguir armazenar e gerenciar os dados do seu site. Agora, vamos instalar o MariaDB, uma bifurcação - desenvolvida pela comunidade - do servidor MySQL original da Oracle.

Para instalar esse software, execute:

  • sudo dnf install mariadb-server

Quando a instalação terminar, você poderá habilitar e iniciar o MariaDB com:

  • sudo systemctl start mariadb

Para melhorar a segurança do seu servidor de banco de dados, é recomendável que execute um script de segurança que vem pré-instalado com o MariaDB. Esse script removerá algumas configurações padrão inseguras e irá bloquear o acesso ao seu sistema de banco de dados. Inicie o script interativo executando:

  • sudo mysql_secure_installation

Esse script dará a você explicações detalhadas sobre uma série de prompts nos quais você pode fazer algumas alterações na sua instalação do MariaDB. O primeiro prompt pedirá que digite a senha da root do banco de dados atual. Isso não deve ser confundido com o usuário root do sistema. O usuário root do banco de dados é um usuário administrativo com privilégios totais sobre o sistema de banco de dados. Uma vez que você acabou de instalar o MariaDB e ainda não fez nenhuma alteração de configuração, essa senha estará em branco. Dessa forma, basta pressionar a tecla ENTER no prompt.

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

A partir daí, pressione Y e, depois, ENTER para aceitar as configurações padrão para todas as perguntas subsequentes. Isso irá remover alguns usuários anônimos e o banco de dados deteste, desabilitará o login remoto root e carregará essas novas regras para que o servidor respeite imediatamente as alterações que você fez.

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

  • sudo mysql

Isso o conectará ao servidor do MariaDB como a root do usuário administrativo do banco de dados, o que é pressuposto pelo uso do sudo ao executar esse comando. Você deve ver um resultado como este:

Output
Welcome to the MariaDB monitor. Commands end with ; or \g. Your MariaDB connection id is 9 Server version: 10.3.17-MariaDB MariaDB Server 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)]>

Note que você não precisou fornecer uma senha para se conectar como o 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 da password (senha). Embora, num primeiro momento, isso possa parecer um problema de segurança, tal medida torna o servidor do banco de dados mais seguro, uma vez que que os únicos usuários autorizados a fazer login como usuário root do MariaDB são os usuários do sistema com privilégios sudo que se conectam pelo console ou através de um aplicativo executando com os mesmos privilégios. Em termos práticos, isso significa que você não conseguirá usar o usuário root do banco de dados administrativo para se conectar a partir do seu aplicativo PHP.

Para aumentar a segurança, o melhor é configurar contas de usuário dedicadas, com privilégios menos abrangentes em relação a cada banco de dados, especialmente se você planeja ter vários bancos de dados hospedados no seu servidor. Para demonstrar essa configuração, vamos criar um banco de dados chamado example_database e um usuário chamado example_user, mas é possível substituir esses nomes por valores diferentes.

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

  • CREATE DATABASE example_database;

Agora, crie um usuário e lhe conceda privilégios completos sobre o banco de dados personalizado que acabou de criar. O comando a seguir define a senha do usuário como password, mas você deve substituir esse valor por uma senha segura de sua própria escolha:

  • GRANT ALL ON example_database.* TO 'example_user'@'localhost' IDENTIFIED BY 'password' WITH GRANT OPTION;

Isso dará ao usuário example_user privilégios totais sobre o banco de dados example\_database, ao mesmo tempo que impedirá que esse usuário crie ou altere outros bancos de dados no seu servidor.

Recarregue os privilégios para garantir que eles estão salvos e disponíveis na sessão atual:

  • FLUSH PRIVILEGES;

Em seguida, saia do shell do MariaDB:

  • exit

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

  • mysql -u example_user -p

Note o sinalizador -p neste comando, o qual irá solicitar a senha que você escolheu ao criar o usuário example_user. Após fazer login no console do MariaDB, confirme se você tem acesso ao banco de dados example\_database:

  • SHOW DATABASES;

Isso gerará o seguinte resultado:

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

Para sair do shell do MariaDB, digite:

  • exit

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

Passo 3 — Instalando o PHP

Você instalou o Apache para fornecer seu conteúdo e instalou o MariaDB para armazenar e gerenciar seus dados. O PHP é o componente de nossa configuração que processará códigos para a exibição de conteúdo dinâmico para o usuário final. Além do pacote php, você precisará do php-mysqlnd, um módulo PHP que permite que o PHP se comunique com os bancos de dados baseados em MySQL. Os pacotes básicos do PHP serão instalados automaticamente como dependências.

Para instalar os pacotes php e php-mysqlnd usando o gerenciador de pacotes dnf, execute:

sudo dnf install php php-mysqlnd

Após a instalação terminar, será necessário reiniciar o servidor Web do Apache para habilitar o módulo PHP:

sudo systemctl restart httpd

Seu servidor Web agora está totalmente configurado. No próximo passo, vamos criar um script teste em PHP para garantir que tudo funciona como esperado.

Passo 4 — Testando o PHP com o Apache

A instalação padrão do Apache no CentOS 8 criará um documento base localizado em /var/www/html. Não é necessário fazer alterações nas configurações padrão do Apache para que o PHP funcione corretamente em seu servidor Web.

O único ajuste que vamos fazer é alterar as configurações de permissão padrão na pasta do diretório base de seu Apache. Dessa forma, você será capaz de criar e modificar arquivos naquele diretório com seu usuário regular de sistema, sem a necessidade de prefixar cada comando com sudo.

O comando a seguir alterará a propriedade do documento root padrão do Apache para um usuário e grupo chamados sammy. Por este motivo, não esqueça de substituir o nome de usuário e grupo em destaque neste comando, para refletir o nome de usuário e grupo do seu sistema.

  • sudo chown -R sammy.sammy /var/www/html/

Agora, vamos criar uma página teste do PHP para garantir que o servidor Web funciona como esperado.

O editor de texto padrão que vem com o CentOS 8 é o vi. O vi é um editor de texto extremamente eficaz, mas pode ser um pouco tedioso para os usuários sem experiência com ele. Talvez você queira instalar um editor mais fácil de usar, como o nano, para facilitar a edição de arquivos no seu servidor CentOS 8:

  • sudo dnf install nano

Digite y quando for solicitado para confirmar a instalação.

Agora, crie um novo arquivo PHP chamado info.php no diretório /var/www/html:

  • nano /var/www/html/info.php

O código PHP a seguir exibirá informações sobre o ambiente PHP atual em execução no servidor:

/var/www/html/info.php
<?php

phpinfo();

Quando você terminar, salve e feche o arquivo. Caso esteja usando o nano, faça isso digitando CTRL+X e, depois, Y e ENTER para confirmar.

Agora, podemos testar se nosso servidor Web consegue exibir corretamente o conteúdo gerado por um script PHP. Vá até seu navegador e acesse o nome do host ou endereço IP do seu servidor, seguido por /info.php:

http://server_host_or_IP/info.php

Você verá uma página parecida com esta:

Informações do PHP padrão do CentOS 8 do Apache

Após verificar as informações relevantes sobre seu servidor PHP através dessa página, é melhor remover o arquivo que você criou, uma vez que ele contém informações confidenciais sobre seu ambiente PHP e seu servidor CentOS. Use o rm para remover esse arquivo:

  • rm /var/www/html/info.php

Você sempre pode gerar esse arquivo novamente se você precisar dele mais tarde. Em seguida, vamos testar a conexão do banco de dados pelo lado do PHP.

Passo 5 — Testando a conexão do banco de dados pelo PHP (Opcional)

Caso queira 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 fictícios - e fazer uma consulta em seu conteúdo, a partir de um script PHP.

Primeiro, conecte-se ao console do MariaDB com o usuário do banco de dados criado no Passo 2 deste guia:

  • mysql -u example_user -p

Crie uma tabela chamada todo_list. A partir do console do MariaDB, execute a seguinte instrução:

CREATE TABLE example_database.todo_list (
    item_id INT AUTO_INCREMENT,
    content VARCHAR(255),
    PRIMARY KEY(item_id)
);

Agora, insira algumas linhas de conteúdo na tabela de teste. Talvez queira repetir o próximo comando algumas vezes, usando valores diferentes:

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

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

  • SELECT * FROM example_database.todo_list;

Você verá o seguinte resultado:

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)

Após confirmar que tem dados válidos em sua tabela de teste, saia do console do MariaDB:

  • exit

Agora, crie o script PHP que se conectará ao MariaDB e irá consultar seu conteúdo. Crie um arquivo do PHP no seu diretório raiz da Web personalizado, usando seu editor preferido. Usaremos o nano para isso:

  • nano /var/www/html/todo_list.php

Adicione o conteúdo a seguir ao seu script PHP:

/usr/share/nginx/html/todo_list.php
<?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 essa página no seu navegador Web, acessando o nome de host ou endereço IP público do seu servidor, seguido de /todo_list.php:

http://server_host_or_IP/todo_list.php

Você deve ver uma página como esta, mostrando o conteúdo que você inseriu em sua tabela de teste:

Exemplo de todo list do PHP

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

Conclusão

Neste guia, você desenvolveu uma base flexível para exibir sites e aplicativos PHP a seus visitantes usando o Apache como servidor Web. Você configurou o Apache para processar solicitações PHP e configurou um banco de dados MariaDB para armazenar os dados do seu site.

Creative Commons License