Instalar e configurar o MongoDB no Raspberry Pi
Avalie esse Tutorial
Sou um grande fã do Raspberry Pi desde que a primeira versão foi lançada em 2012. As gerações mais recentes são maravilhosos computadores de automação residencial e prototipagem de IoT, com WiFi integrado, e as versões mais recentes (o Pi 3 e Pi 4) são de 64 bits. Isso significa que eles podem executar o servidor MongoDB, mongod, localmente! O MongoDB ainda fornece uma versão pré-compilada para o processador Raspberry Pi, por isso é relativamente simples instalá-lo.
Atualmente, estou criando um serviço de automação residencial em um Raspberry Pi 4. Seu trabalho é executar tarefas em segundo plano, como solicitar dados periodicamente da Internet e, em seguida, fornecer os dados a vários dispositivos pequenos em minha casa, como alguns monitores inteligentes e, bem, meu moedor de café.
O serviço não tem requisitos de armazenamento de dados supercomplexos e eu poderia ter usado um banco de dados incorporado, como o SQLite. Mas me tornei resistente a modelar tabelas e junções em um banco de dados relacional e trabalhar com linhas planas. A capacidade de armazenar estruturas de dados ricas em um único MongoDB database é um recurso fundamental para mim.
Você precisará de:
- Um Raspberry Pi 3 ou 4
- Um cartão Micro SD de tamanho adequado (usei um cartão de 16 Gb)
- Um computador e um leitor de cartão SD para gravar a imagem do cartão SD. (Pode ser outro Raspberry Pi, mas estou usando meu desktop)
Este tutorial mostrará como:
- Instale a versão de 64 bits do servidor Ubuntu em seu Raspberry Pi.
- Configure-o para se conectar ao seu Wi-Fi.
- Instalar corretamente o MongoDB no seu Pi.
- Adicione uma conta de usuário para expor o MongoDB com segurança em sua rede doméstica.
Quando terminar, você terá uma instância segura do MongoDB disponível em sua rede doméstica.
Antes de chegarmos muito longe nisso, tenha em mente que você não deseja executar um banco de dados de produção em escala web em um Raspberry Pi. Apesar das melhorias no processador no Pi 4, ele ainda é uma máquina de potência relativamente baixa, com uma quantidade relativamente baixa de RAM para um servidor de banco de dados. Ainda! Para uma instância local e offline do MongoDB, com a facilidade de desenvolvimento que o MongoDB oferece, um Raspberry Pi é uma ótima solução de baixo custo. Se você deseja servir seus dados na Internet, você definitivamente deveria conferir o Atlas, a solução de hospedagem em nuvem do MongoDB. O MongoDB hospedará seu banco de dados e o serviço tem um nível gratuito generoso (e permanente)!
Não execute
apt install mongodb
em seu Raspberry Pi ou, de fato, em qualquer computador com Linux! As versões do MongoDB fornecidas com as distribuições Linux estão muito desatualizadas. Elas não funcionarão tão bem e algumas delas são tão antigas que não têm mais suporte.O MongoDB Server fornece versões do banco de dados, pré-pacote para muitos sistemas operacionais diferentes, e o Ubuntu no Raspberry Pi é um deles.
Execute o rastreamento Raspberry Pi e selecione o servidor Ubuntu 20.04, 64-bit para Raspberry Pi 3/4.
Certifique-se de não selecionar acidentalmente o Ubuntu Core ou uma versão de 32bits.
Insira seu cartão Micro SD em seu computador e selecione-o na janela Raspberry Pi Imager.
Clique em Write e aguarde até que a imagem seja gravada no cartão SD. Isso pode levar algum tempo! Quando terminar, feche o Raspberry Pi Imager. Em seguida, remova o cartão Micro SD do computador e insira-o novamente.
A imagem Ubuntu para Raspberry Pi usa cloud-init para configurar o sistema no momento da inicialização. Isso significa que, no volume
system-boot
do seu cartão SD, deve haver um arquivo YAML chamado network-config
. Abra este arquivo no VS Code (ou em seu editor de texto favorito).Edite para que fique assim. O recuo é importante e é a seção ‘wifis’ que você está editando para corresponder à sua configuração wifi. Substitua 'YOUR-WIFI-SSD' pelo nome do seu WiFi e 'YOUR-WIFI-PASSWORD' pela sua senha WiFi.
1 version: 2 2 ethernets: 3 eth0: 4 dhcp4: true 5 optional: true 6 wifis: 7 wlan0: 8 dhcp4: true 9 optional: true 10 access-points: 11 "YOUR-WIFI-SSID": 12 password: "YOUR-WIFI-PASSWORD"
Agora ejete o cartão SD (com segurança! ) do seu computador, insira-o no Pi e ligue-o! Pode levar alguns minutos para iniciar, pelo menos na primeira vez. Você precisará monitorar sua rede para aguardar a conexão do Pi. Quando isso acontecer, ssh no Pi com
ssh ubuntu@<raspberry-pi-ip-address>
. A senha também é ubuntu
.Você será solicitado a alterar sua senha para algo secreto.
Depois de definir sua senha, atualize o sistema operacional executando os seguintes comandos:
1 sudo apt update 2 sudo apt upgrade
Agora vamos instalar o MongoDB. Isso é feito da seguinte forma:
1 # Install the MongoDB 4.4 GPG key: 2 wget -qO - https://www.mongodb.org/static/pgp/server-4.4.asc | sudo apt-key add - 3 4 # Add the source location for the MongoDB packages: 5 echo "deb [ arch=amd64,arm64 ] https://repo.mongodb.org/apt/ubuntu focal/mongodb-org/4.4 multiverse" | sudo tee /etc/apt/sources.list.d/mongodb-org-4.4.list 6 7 # Download the package details for the MongoDB packages: 8 sudo apt-get update 9 10 # Install MongoDB: 11 sudo apt-get install -y mongodb-org
As instruções acima foram retiradas principalmente de Instale o MongoDB Community Edition no Ubuntu
O Ubuntu 20.04 usa o Systemd para executar serviços em segundo plano, portanto, para configurar o mongod para ser executado em segundo plano, você precisa habilitar e iniciar o serviço:
1 # Ensure mongod config is picked up: 2 sudo systemctl daemon-reload 3 4 # Tell systemd to run mongod on reboot: 5 sudo systemctl enable mongod 6 7 # Start up mongod! 8 sudo systemctl start mongod
Agora, você pode verificar se o serviço está sendo executado corretamente executando o comando a seguir. Você deve ver algo como a saída abaixo dele:
1 $ sudo systemctl status mongod 2 3 ● mongod.service - MongoDB Database Server 4 Loaded: loaded (/lib/systemd/system/mongod.service; enabled; vendor preset: enabled) 5 Active: active (running) since Tue 2020-08-09 08:09:07 UTC; 4s ago 6 Docs: https://docs.mongodb.org/manual 7 Main PID: 2366 (mongod) 8 CGroup: /system.slice/mongod.service 9 └─2366 /usr/bin/mongod --config /etc/mongod.conf
Se o serviço estiver sendo executado corretamente, você poderá executar o cliente MongoDB,
mongo
, a partir da linha de comando para se conectar:1 # Connect to the local mongod, on the default port: 2 $ mongo 3 MongoDB shell version v4.4.0 4 connecting to: mongodb://127.0.0.1:27017/?compressors=disabled&gssapiServiceName=mongodb 5 Implicit session: session { "id" : UUID("576ec12b-6c1a-4382-8fae-8b6140e76d51") } 6 MongoDB server version: 4.4.0 7 --- 8 The server generated these startup warnings when booting: 9 2020-08-09T08:09:08.697+00:00: Using the XFS filesystem is strongly recommended with the WiredTiger storage engine. See http://dochub.mongodb.org/core/prodnotes-filesystem 10 2020-08-09T08:09:10.712+00:00: Access control is not enabled for the database. Read and write access to data and configuration is unrestricted 11 --- 12 --- 13 Enable MongoDB's free cloud-based monitoring service, which will then receive and display 14 metrics about your deployment (disk utilization, CPU, operation statistics, etc). 15 16 The monitoring data will be available on a MongoDB website with a unique URL accessible to you 17 and anyone you share the URL with. MongoDB may use this information to make product 18 improvements and to suggest MongoDB products and deployment options to you. 19 20 To enable free monitoring, run the following command: db.enableFreeMonitoring() 21 To permanently disable this reminder, run the following command: db.disableFreeMonitoring() 22 ---
Primeiro, verifique os avisos. Você pode ignorar a recomendações de executar o sistema de arquivos XFS, pois esta é apenas uma pequena instalação local. No entanto, o aviso sobre o controle de acesso que não está ativado para o banco de dados é importante! Você corrigirá isso na próxima seção. Nesse ponto, se você quiser, pode ativar o monitoramento gratuito que o MongoDB oferece, executando
db.enableFreeMonitoring()
dentro do shell do mongo.Aqui estão as próximas etapas essenciais, que outros tutoriais não abordam, por algum motivo. Versões recentes do mongod não se conectarão à rede a menos que a autenticação do usuário tenha sido configurada. Por causa disso, no momento, seu banco de dados só está acessível a partir do próprio Raspberry Pi. Isso pode ser bom se, como eu, os serviços que você estiver executando com o MongoDB estiverem sendo executados no mesmo dispositivo. Ainda é uma boa ideia definir um nome de usuário e uma senha no banco de dados.
Veja como fazer isso, dentro de
mongo
(substitua SUPERSECRETPASSWORD por uma senha real!):1 use admin 2 db.createUser( { user: "admin", 3 pwd: "SUPERSECRETPASSWORD", 4 roles: [ "userAdminAnyDatabase", 5 "dbAdminAnyDatabase", 6 "readWriteAnyDatabase"] } ) 7 exit
Agora você precisa reconfigurar o mongod para rodar com a autenticação habilitada, adicionando algumas linhas a
/etc/mongod.conf
. Se você se sentir confortável com um editor de texto de terminal, como vi ou emacs, use um deles. Usei nano, porque é um pouco mais simples, com sudo nano /etc/mongod.conf
. Adicione as duas linhas a seguir em algum lugar do arquivo. Assim como o arquivo network-config
que você editou anteriormente, é um arquivo YAML, portanto o recuo é importante!1 # These two lines must be uncommented and in the file together: 2 security: 3 authorization: enabled
E, por fim, reinicie o mongod:
1 sudo systemctl restart mongod
Certifique-se de que a autenticação seja aplicada conectando
mongo
sem autenticação:1 $ mongo 2 MongoDB shell version v4.4.0 3 connecting to: mongodb://127.0.0.1:27017/?compressors=disabled&gssapiServiceName=mongodb 4 Implicit session: session { "id" : UUID("4002052b-1a39-4158-8a99-234cfd818e30") } 5 MongoDB server version: 4.4.0 6 > db.adminCommand({listDatabases: 1}) 7 { 8 "ok" : 0, 9 "errmsg" : "command listDatabases requires authentication", 10 "code" : 13, 11 "codeName" : "Unauthorized" 12 } 13 > exit
Certifique-se de ter saído de
mongo
e agora teste se é possível se conectar e autenticar com os detalhes do usuário que você criou:1 $ mongo -u "admin" -p "SUPERSECRETPASSWORD" 2 MongoDB shell version v4.4.0 3 connecting to: mongodb://127.0.0.1:27017/?compressors=disabled&gssapiServiceName=mongodb 4 Implicit session: session { "id" : UUID("3dee8ec3-6e7f-4203-a6ad-976b55ea3020") } 5 MongoDB server version: 4.4.0 6 > db.adminCommand({listDatabases: 1}) 7 { 8 "databases" : [ 9 { 10 "name" : "admin", 11 "sizeOnDisk" : 151552, 12 "empty" : false 13 }, 14 { 15 "name" : "config", 16 "sizeOnDisk" : 36864, 17 "empty" : false 18 }, 19 { 20 "name" : "local", 21 "sizeOnDisk" : 73728, 22 "empty" : false 23 }, 24 { 25 "name" : "test", 26 "sizeOnDisk" : 8192, 27 "empty" : false 28 } 29 ], 30 "totalSize" : 270336, 31 "ok" : 1 32 } 33 > exit
Esta etapa é opcional! Agora que você configurou a autenticação no servidor, se quiser que o banco de dados esteja disponível para outros computadores na rede, você precisa:
- Vincular o MongoDb ao endereço IP público do Raspberry Pi
- Abra a porta
27017
no firewall do Raspberry Pi.
Se não quiser acessar os dados da sua rede, não siga estas etapas! É sempre melhor deixar as coisas mais seguras, se possível.
Primeiro, edite
/etc/mongod.conf
novamente, da mesma forma que antes. Desta vez, altere o endereço IP para 0.0.0.0:1 # Change the bindIp to '0.0.0.0': 2 net: 3 port: 27017 4 bindIp: 0.0.0.0
E reinicie
mongod
novamente:1 sudo systemctl restart mongod
Abra a porta 27017 no firewall de seu Raspberry Pi:
1 sudo ufw allow 27017/tcp
Agora, em outro computador na sua rede, com o cliente MongoDB instalado, execute o seguinte para garantir que
mongod
esteja disponível em sua rede:1 # Replace YOUR-RPI-IP-ADDRESS with your Raspberry Pi's actual IP address: 2 mongo --host 'YOUR-RPI-IP-ADDRESS'
Se ele se conectar, então você instalou e configurou com sucesso o MongoDB em seu Raspberry Pi!
Essa seção curta é extremamente importante. Não pule isso.
- Nunca abra uma instância do
mongod
para a internet sem autenticação habilitada. - Configure seu firewall para limitar os endereços IP que podem se conectar à sua porta MongoDB. (Seu Raspberry Pi acabou de ser configurado para permitir conexões de qualquer lugar, partindo do pressuposto de que sua rede doméstica tem um firewall bloqueando o acesso de fora.)
- Certifique-se de que a senha do usuário de banco de dados que você criou seja segura!
- Configure diferentes usuários de banco de dados para cada aplicativo que se conecta ao seu servidor de banco de dados, com apenas as permissões exigidas por cada aplicativo.
O MongoDB vem com padrões de segurança adequados. Ele usa TSL, autenticação por senha baseada em SCRAM, e não se vincula à sua porta de rede sem que a autenticação seja configurada. Ainda cabe a você entender como proteger seu Raspberry Pi e quaisquer dados armazenados nele. Leia a Lista de verificação de segurança do MongoDB para obter mais informações sobre como manter seus dados seguros.
Como você pode ver, existem algumas etapas para instalar e configurar adequadamente o MongoDB. Eu não fazia isso há algum tempo e tinha me esquecido de como pode ser complicado! Por isso, você deve considerar usar o MongoDB Atlas, onde muito disso já é resolvido para você. Além do fato de o nível gratuito para sempre ser bastante generoso com pequenos casos de uso, também existem vários serviços extras incluídos, como funções sem servidor, gráficos, pesquisa de texto livre e muito mais!
Você terminou! Vá gravar algum código em sua linguagem de programação favorita, e se você está orgulhoso disso (ou mesmo se está apenas tendo algum problema e gostaria de alguma ajuda) nos avise!. Confira todos os posts legais do blog no MongoDB Developer Hub e certifique-se de marcar a documentação do MongoDB