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
- Raspberry Pi avec distribution raspbian
- Ordinateur avec accès distant ou Ecran+clavier+souris
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