Como construir um servidor Raspberry Pi para desenvolvimento

Publicados: 2022-03-11

O Raspberry Pi é um pequeno computador que você pode obter por apenas US $ 5 e no qual você pode executar muitos tipos diferentes de software e criar muitos projetos diferentes.

Neste artigo, vou guiá-lo pelo processo de configuração como um servidor de desenvolvimento doméstico e implantação de um aplicativo JavaScript de pilha completa que você pode acessar de fora da sua rede. Isso é ótimo para configurar seu próprio espaço de trabalho digital remoto ou simplesmente para ter controle sobre o hardware que você usa para desenvolvimento.

O que você precisa para este servidor doméstico Raspberry Pi?

Embora este seja agora um tutorial do Raspberry Pi 3 em particular, ele ainda deve funcionar com modelos que remontam à primeira geração - se você tiver um modelo mais antigo ou um Raspberry Pi Zero, informe-nos sua experiência nos comentários abaixo.

Além da própria placa Raspberry Pi, você precisará de:

  • Um carregador micro USB
  • Um cabo Ethernet
  • Um cartão microSD (mínimo de 8 GB e cartões de até 32 GB parecem funcionar bem)

Estes também serão úteis durante a configuração inicial:

  • Um teclado USB
  • Um cabo HDMI e monitor

O sistema operacional Raspberry Pi: Raspbian

Instalar um sistema operacional em um Raspberry Pi é simples. Primeiro, usando seu computador, instale a imagem de inicialização em um cartão microSD. Em seguida, basta inserir o cartão no Raspberry Pi e inicializar a partir daí.

Raspbian é uma distribuição Linux portada do Debian 7.0 ( Wheezy ), e é o sistema operacional oficial do Raspberry Pi otimizado para a arquitetura do dispositivo. Embora existam outras opções para executar seu sistema operacional favorito no Pi, usaremos o Raspbian devido à sua simplicidade.

Este tutorial foi atualizado para funcionar com esta versão (ou posterior) do Raspbian:

 Kernel version : #1 SMP Debian 4.9.110-3+deb9u4 (2018-08-21) Kernel release : 4.9.0-8-amd64

Para instalar o Raspbian, vá para a página de download oficial e baixe o arquivo zip com a versão mais recente do Raspbian.

Em seguida, insira o cartão microSD no slot ou adaptador de cartão SD do seu computador. Dependendo do sistema operacional do seu computador, siga as instruções fornecidas no site da Raspberry para Linux, Mac OS ou Windows.

Quando o processo estiver concluído, ejete o cartão SD do seu computador e insira-o no Raspberry Pi. Conecte o Raspberry Pi ao seu roteador usando o cabo Ethernet e conecte o carregador Micro USB, que iniciará a inicialização do Raspberry Pi.

Para a configuração inicial, existem duas opções:

  • Se você tiver um teclado USB e um monitor HDMI, poderá conectá-los ao Raspberry Pi para a configuração inicial.
    • Seu Pi deve reconhecer esses dispositivos assim que forem conectados.
    • Na primeira vez que o Pi inicializar, ele executará automaticamente o raspi-config . Após a primeira inicialização, você precisará executar sudo raspi-config para configurar o dispositivo.
  • Se você não os tiver, poderá se conectar ao seu Raspberry Pi enquanto estiver usando o SSH:
    • Primeiro, você precisa encontrar o endereço IP do seu Raspberry Pi em sua rede local. Isso pode ser feito conectando-se à página de administração do seu roteador ou usando uma ferramenta de rede como nmap .
    • Depois de ter o endereço IP do dispositivo, conecte-se a ele usando SSH do seu terminal (ou através do Putty, se estiver usando o Windows). O usuário padrão é pi e a senha padrão é raspberry . Assim, por exemplo, se o endereço IP for 192.168.1.16, execute ssh [email protected] e digite a senha quando solicitado.
    • Quando estiver conectado, execute sudo raspi-config .

raspi-config irá guiá-lo através da configuração final. Você pode configurar todas as opções, mas as mais importantes são as duas primeiras: expandir o sistema de arquivos, garantindo que todo o armazenamento do cartão SD esteja disponível para o sistema operacional e alterar a senha do usuário Pi padrão, para que seu servidor seja protegido de intrusos.

Raspi-config

Instale um servidor Web (Nginx) no seu Raspberry Pi

Em seguida, você instalará o servidor web. Prefiro o Nginx porque ele ocupa pouco espaço de memória e porque funciona bem com o Node.js (que você configurará mais tarde). Outros servidores web, como Apache ou lighttpd, também funcionariam, mas usaremos o Nginx para esta demonstração.

Antes de começar a instalar qualquer coisa, você precisa ter certeza de que tudo está atualizado executando estes comandos no Pi:

 sudo apt-get update sudo apt-get upgrade

Então você pode instalar o Nginx usando apt-get :

 sudo apt-get install nginx

Quando a instalação estiver concluída, inicie o servidor executando:

 sudo service nginx start

Se você não precisou descobrir o IP local do seu Raspberry Pi na etapa anterior, é hora de descobrir executando ifconfig . A saída para seu adaptador ethernet estará sob eth0 , e com seu endereço IP local rotulado inet addr .

Depois de saber o endereço IP, você pode apontar o navegador do seu computador para ele, onde deverá ver a mensagem padrão “Bem-vindo ao Nginx”.

Aberto para a Web: Encaminhamento de portas

Você pode pular esta etapa se não planeja acessar seu Raspberry Pi de fora da sua rede local. Mas para aqueles que desejam acessar seu servidor de outros locais, vamos garantir que isso seja possível.

Em uma rede doméstica típica, os dispositivos conectados ao roteador são invisíveis para o mundo exterior. Somente seu roteador pode ser acessado de fora, usando o endereço IP externo da sua rede. Seu roteador é responsável por determinar qual tráfego de entrada é permitido na rede e para qual dispositivo ele deve ser enviado.

Quando um dispositivo na rede local inicia uma conexão (por exemplo, quando você abre um site em seu navegador), o roteador reconhece o tráfego de resposta de entrada como parte dessa conexão e permite sua passagem. No entanto, se o roteador receber tráfego de entrada que não faz parte de uma conexão aberta (por exemplo, quando um dispositivo externo tentar iniciar uma conexão com um dispositivo interno), ele impedirá que o tráfego de entrada entre na rede. Este é um importante recurso de segurança para proteger a rede!

Então, como você pode se conectar ao seu Pi de fora? A resposta é o encaminhamento de porta. O roteador deve ser configurado para permitir que conexões de entrada em portas específicas passem e sejam enviadas para o dispositivo correto. Por padrão, o protocolo HTTP usa a porta 80 e o SSH usa a porta 22, portanto, essas são as duas portas que você precisa abrir em seu roteador para acessar seu aplicativo da Web e permitir conexões seguras para gerenciar seu servidor.

Encaminhamento de porta.

As etapas para configurar seu roteador para abrir e encaminhar as portas podem variar dependendo do seu provedor de internet e da marca do seu roteador, mas em qualquer caso, você deve conseguir fazê-lo através das opções de configuração avançada da página de administração do seu roteador. Basta procurar uma opção com um nome como “Encaminhamento”, “Encaminhamento de porta” ou “Tradução de endereço de rede”.

Você precisa abrir uma porta para conexões HTTP e outra para SSH. A ideia básica consiste em encaminhar os dados endereçados a essas duas portas externas para o seu Raspberry Pi, com o tráfego da web indo para a porta 80 onde o Nginx está escutando e o tráfego SSH indo para a porta 22, onde o servidor SSH aceita conexões de computadores externos. Aqui está um exemplo de como isso pode aparecer na página de configuração do seu roteador:

Tabela de configuração de encaminhamento de porta.

Configuração de encaminhamento de porta se o endereço IP interno do seu Raspberry Pi for 192.168.1.16 . Todo o tráfego de entrada vinculado às portas 80 ou 22 é encaminhado para esse endereço interno.

Você pode determinar o endereço IP externo do seu roteador simplesmente digitando “qual é o meu endereço IP” no Google. Se você sair da rede do seu roteador, poderá testar se o encaminhamento de porta está funcionando abrindo uma conexão SSH com ssh pi@{external IP address} . Da mesma forma, o encaminhamento de porta HTTP pode ser testado inserindo o endereço IP externo na barra de endereços do seu navegador. Lembre-se de que o encaminhamento de porta permite que qualquer pessoa de fora acesse o dispositivo nessas portas se souber o IP externo do seu roteador.

Se você não tiver um IP estático, poderá configurar o DNS dinâmico. É um passo muito simples e fácil. Você pode configurar o DNS dinâmico do seu roteador ou pode configurar seu Raspberry Pi para ele. Não vou abordar aqui como configurar o DDNS, mas o BitPi.co tem um bom tutorial sobre o assunto, se necessário.

Instale o Framework: JavaScript de pilha completa

Você pode executar a maioria dos frameworks da Web em cima do Nginx, mas vamos ver como usar o JavaScript de pilha completa. Para fazer isso, você precisa instalar o Node.js e o MongoDB.

Atualmente, o Node.js é facilmente instalado em um Raspberry Pi com:

 sudo apt-get install nodejs

Depois de concluir a instalação, você pode verificar se está funcionando executando node -v .

Agora você pode instalar o MongoDB apenas digitando:

 sudo apt-get install mongodb

Esteja ciente de que, se você precisar desativar o Raspberry Pi, precisará desligar o serviço primeiro para evitar a corrupção do banco de dados:

 sudo service mongodb stop

Implante seu aplicativo

Você pode desenvolver em sua máquina local e, em seguida, enviar suas alterações para um repositório Git no BitBucket. Como o Raspbian vem com o Git pré-instalado, você pode puxar o código do aplicativo mais recente para o dispositivo e executá-lo.

Montar o projeto

Primeiro vamos configurar algum código de aplicativo e enviá-lo para um repositório Git. Existem muitas maneiras de iniciar um aplicativo, mas um dos meus favoritos é o generator-angular-fullstack, que monta o código do servidor e do cliente.

Instale generator-angular-fullstack no seu computador:

 npm install -g generator-angular-fullstack

Crie um novo diretório para seu aplicativo:

 mkdir my-app cd my-app

E andaime a aplicação:

 yo angular-fullstack my-app

Crie o repositório e envie o código

Agora crie um repositório no BitBucket, conforme descrito aqui. Em seguida, configure seu diretório local:

 git init git remote add origin [email protected]:USER/REPO.git

Então você pode confirmar e enviar o código:

 git add . git commit -m 'Initial commit' git push -u origin master

O gerador vem com o plugin grunt-build-control, que permite que você confirme o código de compilação em uma ramificação específica em seu repositório. Basta adicionar a configuração do BitBucket ao Gruntfile.js no diretório raiz do seu aplicativo:

 buildcontrol: { options: { dir: 'dist', commit: true, push: true, connectCommits: false, message: 'Built %sourceName% from commit %sourceCommit% on branch %sourceBranch%' }, bitbucket: { options: { remote: '[email protected]:USER/REPO.git', branch: 'build' } } }, // ...

Agora execute:

 grunt build

…para criar a pasta de distribuição, seguido por isto:

 grunt buildcontrol:bitbucket

…para confirmar e enviar o código para a ramificação de compilação em seu repositório.

Gerar a chave SSH

Agora você tem seu código hospedado. Antes de implantá-lo no seu Raspberry Pi, você precisa gerar uma chave SSH para o Raspberry Pi e adicioná-lo à sua conta BitBucket. Vamos executar esta etapa rapidamente, mas se você tiver algum problema, siga o guia BitBucket. Então, faça login novamente no seu terminal Raspberry Pi e gere o par de chaves pública/privada:

 ssh-keygen

Em seguida, inicie o agente:

 ssh-agent /bin/bash

E adicione a chave ao agente:

 ssh-add /home/pi/.ssh/id_rsa

Agora você só precisa gerar o conteúdo da chave pública:

 cat /home/pi/.ssh/id_rsa.pub

…para que você possa copiá-lo e colá-lo no BitBucket.

No BitBucket, clique na sua foto de perfil e vá para Gerenciar conta . Em SEGURANÇA , encontre as chaves SSH e clique no botão Adicionar chave .

Clonar o repositório

Não existe uma convenção para onde colocar o código de seus aplicativos, mas você pode criar um diretório /var/www e colocar todos os seus projetos lá.

 cd /var sudo mkdir www

Para evitar o uso de sudo quando você deseja colocar arquivos no webroot, você pode alterar o proprietário para seu usuário Pi e o grupo para www-data , que é usado pelo Nginx:

 sudo chown -R pi:www-data www cd www

Agora, você pode clonar o branch build do seu repositório e instalar as dependências:

 git clone [email protected]:USER/REPO.git --branch build --single-branch cd REPO npm install --production

Quando terminar, você pode iniciar seu aplicativo, definindo o ambiente para produção:

 export NODE_ENV=production; node server/app.js &

Agora, aponte o navegador do seu computador para o endereço IP do dispositivo para verificar se funciona.

Gostaria de ter um servidor de desenvolvimento que pudesse chamar de seu? Você pode, com um #RaspberryPi.
Tweet

Configurar proxy reverso do Nginx

Falta mais uma etapa para tornar seu aplicativo acessível de fora. Embora o Nginx esteja escutando na porta 80, onde receberá solicitações HTTP para seu Pi, o próprio aplicativo Node está escutando em uma porta diferente (por exemplo, porta 8080). Portanto, você precisa configurar o Nginx para atuar como um proxy reverso, reconhecendo as solicitações destinadas ao seu aplicativo e passando-as para o Node.

O Nginx mantém o arquivo de configuração para cada aplicativo que serve na pasta sites-available :

 cd /etc/nginx/sites-available/

Aqui, você pode copiar o arquivo de configuração default e editar conforme sua conveniência:

 sudo cp default my-app sudo nano my-app

O arquivo de configuração final deve ficar assim, com o Nginx atuando como um proxy para o servidor Node.js:

 server { listen 80; root /var/www/my-app/; # identifies the location of the application you are configuring server_name my-app.dev; # identifies the hostname used by this application's traffic location / { proxy_pass http://localhost:8080/; # configures the back-end destination for this traffic } }

Para habilitar esta configuração, você precisa criar um link simbólico na pasta sites-enabled , onde o Nginx procura por configurações ativas durante o tempo de execução:

 sudo ln -s /etc/nginx/sites-available/my-app /etc/nginx/sites-enabled/my-app

E recarregue o serviço para ativar essas alterações:

 sudo service nginx reload

Neste ponto, seu aplicativo está pronto para receber tráfego HTTP destinado ao domínio my-app.dev (graças à diretiva server_name my-app.dev que você configurou acima). A questão final que você precisa resolver é como fazer com que o tráfego que você envia de fora corresponda a esse nome de domínio. Embora você possa comprar um nome de domínio e apontá-lo para o seu IP, o arquivo hosts vem em socorro e torna isso desnecessário.

Na estação de trabalho a partir da qual você acessará o site, basta adicionar o endereço IP externo do seu roteador e combiná-lo com o nome do host my-app.dev . Qualquer tráfego HTTP que você gerar para my-app.dev será então enviado diretamente para o seu roteador, com o nome de host correto no cabeçalho Host HTTP.

No Windows, com privilégios de administrador, você pode editar o arquivo localizado em c:\windows\system32\drivers\etc\hosts com o bloco de notas. No Linux e no Mac, você pode usar o terminal com sudo nano /etc/hosts e sudo nano /private/etc/hosts respectivamente.

 ## # Host Database # # localhost is used to configure the loopback interface # when the system is booting. Do not change this entry. ## 127.0.0.1 localhost 255.255.255.255 broadcasthost ::1 localhost 212.124.126.242 my-app.dev # add your host name to the list

Qual é o próximo?

Agora que tudo está configurado, você pode implantar quantos aplicativos quiser em seu Raspberry Pi e instalar para sempre ou pm2 para manter seus servidores Node.js ativos.

E lembre-se de que, se algo der errado, você pode simplesmente limpar o cartão SD e começar do zero!

Servidor de desenvolvimento Raspberry Pi em ação.

Relacionado: Controle seu clima com este tutorial de termostato Raspberry Pi