Site icon AranaCorp

Configuração de um servidor Apache2 no Raspberry Pi

O Raspberry Pi pode ser facilmente ligado a uma rede Wifi, por isso pode ser uma boa ideia criar um servidor Apache2 para criar uma interface web para gerir o seu Raspberry Pi. Um servidor web permite-lhe enviar e receber comandos web, desenvolver um site local ou global ou criar uma interface web para configurar ou controlar o seu Raspberry Pi remotamente a partir de um computador ou smartphone.

Neste tutorial, veremos como configurar um servidor Web Apache2 no Raspberry Pi e como criar uma interface HTML acessível localmente.

Hardware

Recuperar o endereço IP e o nome do anfitrião do Raspberry Pi

Quando se trabalha num sistema de rede, é importante conhecer o identificador dos dispositivos que se está a utilizar. No caso de um servidor Apache2, precisamos do endereço IP e do nome do anfitrião.

Para obter o endereço IP, introduza o comando:

ifconfig

O endereço IP (inet) está localizado em wlan0 se o Raspberry Pi estiver ligado à rede através de Wifi e em eth0 se estiver ligado por cabo. Aqui o endereço IP é 192.168.1.9

Para obter o nome do anfitrião, introduza o seguinte comando num terminal:

hostname

Por predefinição, o Raspberry Pi devolve “raspberrypi”. Pode alterar esta definição no assistente de configuração raspi-config.

Nota: Recomendamos vivamente que altere o nome do anfitrião se estiver a utilizar vários Raspberry Pi na mesma rede.

Instalar o Apache2

Para instalar o pacote Apache, basta introduzir o seguinte comando num terminal

sudo apt-get install apache2 -y

N.B: a opção -y aceita automaticamente a instalação.

Para desinstalar o pacote, introduza o comando

sudo apt-get remove apache2 --purge

Nesta fase, pode verificar se o Apache está ativado introduzindo o seguinte na barra de tarefas de um navegador

raspberrypi.local

ou

192.168.1.9

Nota: actualize com o nome de anfitrião e o endereço IP correspondentes ao seu dispositivo. Se o endereço .local não funcionar, é necessário instalar e ativar o serviço avahi.

sudo apt-get install avahi-daemon

Alteração dos direitos

Antes de continuar, é necessário dar ao servidor e a si próprio direitos de acesso de leitura e escrita. Poderemos então modificar os ficheiros sem ter de passar pelo superutilizador root.

Primeiro, adicionamos o utilizador ao grupo www-data (o grupo predefinido do Apache)

sudo usermod -a -G www-data pi

De seguida, atribuímos a propriedade da pasta ao grupo www-data

sudo chown -R -f www-data:www-data /var/www/html

Resultado com ls -l para ver os direitos de acesso

pi@raspberrypi:~ $ ls -l /var/www/
total 4
drwxr-xr-x 2 www-data www-data 4096 mai   16 17:33 html

Finalmente, introduza esta linha de código para criar e modificar ficheiros facilmente

sudo chmod -R 775 /var/www/html/

Instalar o PHP

Para tornar a página Web dinâmica, é necessário utilizar o interpretador PHP

Para instalar os pacotes necessários para usar o PHP, digite o seguinte comando

sudo apt-get install php7.3 php7.3-mbstring php7.3-mysql php7.3-curl php7.3-gd php7.3-zip -y

N.B: a versão 7.3 é a última versão disponível no repositório Raspbian. Você pode instalar versões mais recentes do php compilando os fontes você mesmo.

Se o PHP não funcionar. Pode tentar estas duas linhas de código.

sudo a2dismod mpm_event
sudo a2enmod php7.3
sudo systemctl restart apache2

O primeiro desactiva o mpm_event, que entra em conflito com o mpm_prefork, e o segundo ativa o php, que depende do mpm_prefork.

Criar uma página Web

Para testar a instalação, vamos criar uma página Web simples que apresenta algumas informações sobre o Raspberry Pi. Para o fazer, vamos executar comandos shell utilizando PHP e a função exec().

<!DOCTYPE html>
<html>
  <head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
    <title>MyRPi Webpage</title>
    
    <style>
	
	div{
	    display:block;
	    margin:auto;
	}
	label{
	    display: inline-block;
	    width:80px;
	}
	input[type=text]{
	    width:200px;
	}
	table, th, td {
	  border: 1px solid black;
	  border-collapse: collapse;
	  padding:5px;
	}
    </style>
    </head>
    
    <body>
	<div style="width:90%;margin:auto;">
	<div id="icon" style="border-bottom: 3px solid #3aaa35; ">
	    <img src="https://i0.wp.com/www.aranacorp.com/wp-content/uploads/logo-100.png"/>
	    
	</div>
	<div>
	    <h1>RPi Info</h1>
		<p><?php echo "Date ".date('Y-m-d H:i:s') ; ?></p>
		<table>
		   <tr>
		      <th>Info</th>
		      <th>Command</th>
		      <th>Value</th>
		   </tr>
		   <!-- hardware and os info -->
		   <tr>
		      <td>Hardware</td>
		      <td>cat /sys/firmware/devicetree/base/model</td>
		      <td>
			  <?php echo shell_exec('cat /sys/firmware/devicetree/base/model'); ?>
			  </td>
		   </tr>
		   <tr>
		      <td>OS</td>
		      <td>uname -o</td>
		      <td>
			  <?php echo shell_exec('uname -o'); ?>
			  </td>
		   </tr> 
		   <tr>
		      <td>Architecture</td>
		      <td>uname -m</td>
		      <td>
			  <?php echo shell_exec('uname -m'); ?>
			  </td>
		   </tr>    
		   <tr>
		      <td>OS version</td>
		      <td>. /etc/os-release; echo $PRETTY_NAME</td>
		      <td>
			  <?php echo shell_exec('. /etc/os-release; echo $PRETTY_NAME'); ?>
			  </td>
		   </tr> 
		    <!-- hostname info -->
		    <tr>
		      <td>Hostname</td>
		      <td>hostname</td>
		      <td>
			  <?php echo shell_exec('hostname'); ?>
			  </td>
		   </tr>
		     <tr>
		      <td>IP Address</td>
		      <td>hostname -I</td>
		      <td>
			  <?php echo shell_exec('hostname -I'); ?>
			  </td>
		   </tr> 
		   
		    <!-- GPU/CPU info -->
		   <tr>
		      <td>GPU temperature</td>
		      <td>vcgencmd measure_temp</td>
		      <td>
			  <?php $output=exec('vcgencmd measure_temp'); 
			  $output = str_replace('temp=','',$output);
			  $output = str_replace('\'C','',$output);
			  echo $output;?>
			  </td>
		   </tr>
		  <tr>
		      <td>ARM CPU temperature</td>
		      <td>cat /sys/class/thermal/thermal_zone0/temp</td>
		      <td>
			  <?php $output=exec('cat /sys/class/thermal/thermal_zone0/temp'); 
			  echo $output/1000; ?>
			  </td>
		   </tr>
		  <tr>
		      <td>ARM Clock</td>
		      <td>vcgencmd measure_clock arm</td>
		      <td>
			  <?php $output=exec('vcgencmd measure_clock arm'); 
			  echo $output; ?>
			  </td>
		   </tr>
		</table>		
	</div>
	</div>
    </body>
    </html>

Resultados

Introduzindo o URL raspberry.local

Resolução de problemas comuns

Se o Apache2 tiver problemas para reiniciar

verificar se o Nginx não está a ser executado ao mesmo tempo

sudo systemctl stop nginx

Também pode desinstalá-lo se não precisar dele

sudo apt-get purge nginx

Se os comandos do Linux não forem iniciados pelo PHP

como o vcgencmd, pode adicionar www-data ao grupo de vídeo e depois reiniciar

sudo usermod -G video www-data

Sources

Exit mobile version