Vamos criar um servidor Web com o Raspberry PI?

Vamos aprender a configurar um servidor web num Raspberry Pi para a nossa aplicação do Laravel

67095
0
Share:
raspberry pi

Neste tutorial, iremos implementar uma aplicação Laravel simples configurada como ambiente de produção , o que requer algum tempo para finalizar com sucesso. Para começar, as aplicações Laravel devem usar uma base de dados dedicada com acesso limitado apenas á base de dados necessária para aquela aplicação. As permissões dos arquivos devem garantir que apenas as directorias e arquivos necessários sejam graváveis. As configurações da aplicação devem ser levadas em consideração para garantir que nenhuma informação de depuração (debug) seja exibida para o utilizador final, o que pode expor os detalhes da configuração da aplicação.

Vamos publicar uma aplicação já existente do Laravel no nosso Raspberry PI. Se ainda não viram, aconselho vivamente a visualizar o tutorial de como instalar o Laravel no vosso PC para o desenvolvimento de uma aplicação web, com estes dois tutorias conseguiremos desenvolver no nosso computador e rapidamente copiando os arquivos apenas , conseguimos ter a nossa aplicação acessível a partir do nosso mini PC .

Pré-requesitos para o Servidor Web com o Raspberry PI:

  • IP estático no Raspberry PI
  • Sistema Operativo (Raspbian , Ubuntu Core …)

Passo 1 – IP Estático

Para colocar um IP estático no Raspberry PI temos de alterar o ficheiro dhcpd.conf.

sudo nano /etc/dhcpcd.conf

O ficheiro terá que ficar mais ao menos assim.

Raspberry Pi

Static ip_address : IP que queremos dar ao nosso Raspberry , importante esse ip tem de estar dentro da gama de ip’s da nossa rede . Por exemplo a minha rede vai de : 10.1.1.1 até 10.1.1.180 , portanto posso escolher um ip dentro dessa gama. Contudo se houver algo problema na atribuição de ip’s teremos de ir ao nosso router e reservar também esse ip para essa máquina.

Static routers : Aqui colocamos o ip do nosso router.

Static domain_name_servers : Nesta parte podemos adicionar os servidores dns que queremos, no meu caso coloquei o meu router mas poderíamos colocar o endereço da google (8.8.8.8 ou 8.8.4.4).

Passo 2 – Instalação de Packages

A pilha de software LEMP é um grupo de softwares que pode ser utilizado para servir páginas web dinâmicas e aplicações web. Esse é um acrônimo que descreve um sistema operacional Linux, com um servidor web Nginx. Os dados de retaguarda ou backend são armazenados numa base de dados MySQL e o processamento dinâmico é tratado pelo PHP.

Vamos proceder á instalação do LEMP.

sudo apt-get install mysql-server mysql-client nginx php5-fpm php5-cli php5-mcrypt git php5-mysql php5-curl php5-gd php-pear php5-imagick php5-mcrypt php5-memcache php5-mhash php5-sqlite php5-xmlrpc php5-xsl php5-json php5-dev libpcre3-dev nginx

Passo 3 – Configuração do MySQL

O Laravel suporta a uma grande variedade de servidores de base de dados mas para a nossa solução iremos utilizar o MySQL visto ser gratuito e ter uma enorme potencialidade.

Primeiro iremos fazer o login como root .

mysql -u root -p

Será pedido uma password anteriormente colocada na instalação do MySQL.

Agora passamos á criação da base de dados laravel , esta base de dados vai servir apenas para testar a funcionalidade do servidor web. No desenrolar do projeto iremos nós criar a nossa base de dados com todos os parâmetros necessários para o bom funcionamento do mesmo.

CREATE DATABASE laravel DEFAULT CHARACTER SET utf8 COLLATE utf8_unicode_ci;

Criamos um utilizador e atribuímos-lhe o acesso a base de dados criada. Aqui nós iremos utilizar o utilizador leakuser , mas é possível usar outro nome de utilizador, fica ao vosso critério. Temos também de inserir a password, aconselho uma password bastante segura visto que se for corrompida a segurança na base de dados podemos perder todos os dados da BD .

GRANT ALL ON laravel.* TO 'leakuser'@'localhost' IDENTIFIED BY 'passwordaqui';

Agora vamos dar flush dos privilégios para o MySQL saber das alterações que efetuamos anteriormente.

FLUSH PRIVILEGES;

Por fim saímos do MySQL.

EXIT;

Passo 4 – Instalação e configuração de uma aplicação demo

O aplicativo de demonstração, distribuído pelo Laravel no GitHub, é uma lista de tarefas muito simplista. Essa lista permite que se adicione e remova itens de certas tarefas e as armazene na base de dados MySQL.

Primeiro teremos de criar uma diretoria para guardar o projeto, visto que a aplicação demo se chama quickstart, então iremos usar /var/www/quickstart .

sudo mkdir -p /var/www/html/quickstart

Agora vamos alterar o dono da directoria que neste caso irá passar a ser o utilizador “pi” visto ser o utilizador default do Raspberry Pi, é possível usar outro utilizador.

sudo chown pi:pi /var/www/html/quickstart

Vamos para a pasta criada e vamos clonar o projeto através do Git

cd /var/www/html/quickstart
git clone https://github.com/laravel/quickstart-basic .

Passamos para a instalação das dependências do projeto . É importante referir que o Laravel usa o Composer para tratar da gestão das dependências, facilitando assim a sua utilização.

composer install

A aplicação em si está instalada, agora necessitamos de passar para a configuração da aplicação e seus derivados.

Passo 5 –  Configuração da Aplicação

Nesta secção teremos de configurar o ambiente da aplicação, preparar a conexão da base de dados e ter em atenção alguns pontos de segurança.

Abrimos o ficheiro de configuração do Laravel .env

sudo nano /var/www/html/quickstart/.env

As alterações a efetuar serão :

APP_ENV=production
APP_DEBUG=false
APP_KEY=b809vCwvtawRbsG0BmP1tWgnlXQypSKf
APP_URL=http://10.1.1.10

DB_HOST=127.0.0.1
DB_DATABASE=laravel
DB_USERNAME=leakluser
DB_PASSWORD=passwordaqui

. . .

Agora basta guardar o ficheiro e sair.

Na seção de configuração do aplicativo:

  • A variável APP_ENV denota o ambiente do sistema no qual o aplicativo é executado. O valor padrão é local, que é usado para ambientes de desenvolvimento local. Para a implementação da produção, ele deve ser alterado para a production, como fizemos aqui. Alterar esta variável controla a verbosidade de log, configurações de cache e como os erros são exibidos (dependendo da aplicação). Com as configurações locais, ele é configurado para facilitar o desenvolvimento e depuração, o que é conveniente ao trabalhar numa aplicação, mas não deve ser usado numa configuração de produção.
  • A variável APP_DEBUG complementa APP_ENV e habilita ou desabilita explicitamente informações de depuração e exibição de erro detalhada. Nas configurações de produção, esse valor deve ser definido como falso para evitar que as informações de depuração sejam exibidas para os utilizadores.
  • A variável APP_URL especifica o endereço IP ou o nome de domínio sob o qual o site deve estar acessível. Nós usamos o endereço 10.1.1.10 aqui, mas deve ser alterado pelo seu próprio domínio com o qual o site deve ser acedido ou pelo ip do Raspberry PI.

A secção da base de dados é um pouco mais compreensível:

  • DB_DATABASE  é o nome da base de dados.
  • DB_USERNAME é o nome de utilizador que a aplicação deve usar.
  • DB_PASSWORD é a password da base de dados daquele utilizador.

Para finalizar esta parte procedemos ás migrações da base de dados, estas migrações servem para criar as  tabelas necessárias na base de dados para que a aplicação fique funcional.

php artisan migrate

Teremos algo parecido com isto:

         Artisan output
**************************************
*     Application In Production!     *
**************************************

 Do you really wish to run this command? [y/N] (yes/no) [no]:
 > y

Migration table created successfully.
Migrated: 2014_10_12_000000_create_users_table
Migrated: 2014_10_12_100000_create_password_resets_table
Migrated: 2015_10_27_141258_create_tasks_table

Agora temos o Laravel instalado e configurado no nosso Raspberry PI.

Passo 6 – Configuração do Nginx

A directoria do aplicativo é da propriedade do nosso utilizador do sistema, pi, tem permissão de leitura, mas não tem permissão de escrita pelo servidor web. Isto é correto para a maioria dos ficheiros da nossa aplicação, mas existem poucas directorias que necessitam de um tratamento especial. Especificamente, onde quer que o Laravel guarde os ficheiros de mídia e os dados armazenados em cache, o servidor web deve poder não só acessá-los, mas também tem de puder gravar ficheiros nesses mesmo locais.

Vamos mudar o grupo dono da directoria storage e bootstrap/cache para o grupo www-data.

sudo chgrp -R www-data storage bootstrap/cache

Recursivamente vamos garantir todas as permissões para esse grupo.

sudo chmod -R ug+rwx storage bootstrap/cache

Agora que temos a nossa aplicação demo no sitio certo e as suas permissões apropriadas, vamos passar á alteração do ficheiro de configuração do Nginx .

Vamos criar o nosso ficheiro de configuração a partir do ficheiro default do Nginx já existente

sudo cp /etc/nginx/sites-available/default /etc/nginx/sites-available/10.1.1.10

Eu neste caso optei por dar o nome do meu ip visto ser o meu endereço onde irei aceder ao Raspberry, pois não tenho configurado nenhum endereço de dominio. Mas caso tenham, poderia ficar /etc/nginx/sistes-available/exemplo.com onde o “exemplo.com” seria o vosso domínio.

Abrimos o ficheiro anteriormente criado

sudo nano /etc/nginx/sites-enabled/10.1.1.10

O ficheiro modificado ficará mais ao menos assim :

server {
    listen 80;
    listen [::]:80;

    . . .

    root /var/www/html/quickstart/public;
    index index.php index.html index.htm index.nginx-debian.html;

    server_name 10.1.1.10;

    location / {
        try_files $uri $uri/ /index.php?$query_string;
    }

    . . .
}

É importante especificar que a aplicação de Laravel é armazenada na directoria /var/www/html/quickstart mas apenas a subdiretora “public” deve ser exposta para o exterior por questões de segurança. Para cumprir as boas práticas definimos a directoria /var/www/html/quickstart/public.

A parte server_name especifica a lista de nomes de domínio ao qual o servidor irá responder. Usamos 10.1.1.10 mas poderíamos usar  www.examplo.com ou www.leak.pt etc… Pode substituir este nome de domínio pelo que necessitar, é importante estar configurado no Raspberry PI. Para a nossa solução final do projeto SmartHome, basta só o IP visto que seremos as únicas pessoas a aceder ao mesmo e não queremos que seja acedido exteriormente.

Quando efetuar as alterações, guarde e feche o ficheiro. Temos agora de ativar o novo ficheiro de configuração, criando um symbolic-link deste ficheiro para a directoria sites-enabled.

sudo ln -s /etc/nginx/sites-available/10.1.1.10 /etc/nginx/sites-enabled/

Finalmente basta reiniciar o Nginx para que todas as nossas alterações surjam efeito.

sudo systemctl reload nginx

Agora o Nginx está configurado para servir a nossa aplicação demo, todos os componentes encontram-se devidamente configurados. Para ter a certeza que tudo está operacional basta visitar a página http://10.1.1.10 no vosso browser . Irão ter acesso a uma aplicação que adiciona tarefas, e essas tarefas são automaticamente gravadas na base de dados. Para o nosso projeto de IoT, basta desenvolver a aplicação no nosso computador pessoal e copiar os ficheiro dentro do projeto laravel para este servidor web (pasta que criamos neste artigo “quickstart”). É preciso ter atenção, se tivermos uma base de dados no nosso projeto teremos de adicionar essa mesma base de dados no Raspberry PI.

Servidor Web

No próximo artigo já iremos mexer com Arduino, sensores/atuadores !!!

Qualquer dúvida deixem nos comentários, até ao próximo artigo 😉

Share:
Pedro Magalhães

Dê a sua opinião