MongoDB
Há atualmente na Computação uma onda de adoção de bancos de dados não-relacionais, comumente chamados NoSQL.
O foco principal dos bancos NoSQL atuais é a orientação a documentos, uma variação hash da orientação a objetos e alternativa aos RDBMSs, que dominaram a orientação dos gerenciadores de banco de dados por décadas.
O principal banco NoSQL é o CouchDB, DBMS do Projeto Apache baseado em Erlang, porém há uma alternativa bem mais simples e aparentemente tão poderosa quanto: MongoDB.
MongoDB combina os melhores funcionalidades de orientação a documentos, hashes e RDBMSs. É um banco de dados orientado a documentos, escalável, livre de esquema, de alto desempenho e código aberto escrito em C++.
Este artigo aborda a instalação do servidor em ambiente Slackware e Ubuntu. Para uso veja artigo no Kodumaro.
Obtenção do pacote
No momento em que escrevi este artigo, não havia pacote APT do MongoDB, mas a instalação foi bastante simples e comum a ambos os sistemas em questão.
Primeiro obtenha o binário para sua arquitetura da página de download:
Instalação
Crie a seguinte estrutura de diretórios:
bash$ sudo mkdir -p \
/srv/mongodb/etc /srv/mongodb/sbin \
/srv/mongodb/var/data /srv/mongodb/var/log
Descompate o binário do MongoDB em
/srv/mongodb
:bash$ sudo tar xzvf mongodb-linux-*.tgz -C /srv/mongodb/
Crie o arquivo de configuração do servidor em
/srv/mongodb/etc/mongodb.conf
com o seguinte conteúdo:#auth = true
fork = true
dbpath = /srv/mongodb/var/data
logpath = /srv/mongodb/var/log/mongo.log
logappend = true
bind_ip = 127.0.0.1
port = 27017
Crie o script de inicialização do servidor
/srv/mongodb/sbin/rc.mongodb-server
:#!/bin/bash
MONGO_HOME=/srv/mongodb
MONGOD="$MONGO_HOME/current/bin/mongod"
CONF_FILE="$MONGO_HOME/etc/mongodb.conf"
PID_FILE="$MONGO_HOME/var/log/mongo.pid"
function start_mongo() {
if [[ -e "$PID_FILE" ]]
then
echo "MongoDB daemon seems to be running, PID $(cat $PID_FILE)" >&2
echo "if the daemon is not running, remove the PID file: $PID_FILE" >&2
return 1
fi
echo "$MONGOD -f $CONF_FILE"
"$MONGOD" -f "$CONF_FILE" | head -n1 | cut -d: -f2 > "$PID_FILE"
}
function stop_mongo() {
if [[ ! -e "$PID_FILE" ]]
then
echo "MongoDB daemon seems not to be running, killing it anyway" >&2
fi
pkill -2 mongod && rm -f "$PID_FILE"
}
function status_mongo() {
if [[ -e "$PID_FILE" ]]
then
echo "MongoDB daemon seems to be running with PID $(cat $PID_FILE)"
else
echo "MongoDB daemon seems not to be running"
fi
"$MONGOD" --sysinfo
}
case "$1" in
start)
start_mongo
;;
stop)
stop_mongo
;;
restart)
stop_mongo
sleep 1
start_mongo
;;
status)
status_mongo
;;
*)
echo "options: [start|stop|restart|status]" >&2
;;
esac
E dê permissão de execução ao arquivo:
bash$ sudo chmod +x /srv/mongodb/sbin/rc.mongodb-server
Crie um link simbólico para o diretório do binário do MongoDB:
bash$ cd /srv/mongodb/
bash$ sudo ln -s mongodb-linux-* current
Crie um link simbólico para o script de inicialização para o diretório de rc-scripts. No Ubuntu é assim:
bash$ cd /etc/init.d/
bash$ sudo ln -s /srv/mongodb/sbin/rc.mongodb-server mongodb-server
No Slackware:
bash$ cd /etc/rc.d/
bash$ sudo ln -s /srv/mongodb/sbin/rc.mongodb-server
Para tornar o serviço inicializável é bastante diferente em cada sistema, mas são procedimentos padrão, portanto não vou descrevê-los aqui.
Crie um apelido (alias) para o cliente (a chamada pode ficar em um script executável em
/etc/profile.d/
):bash$ alias mongo='/srv/mongodb/current/bin/mongo'
Usuário alternativo
É possível não usar o superusuário para rodar o MongoDB. Para isso crie um usuário:
bash$ sudo useradd \
-c 'MongoDB Server' \
-d /srv/mongodb \
-g daemon \
-s /usr/bin/false \
-u 29 mongodb
Altere o rc-script para executar os processos como usuário
mongodb
. A linha 18 vira:sudo -u mongodb "$MONGOD" -f "$CONF_FILE" | head -n1 | cut -d: -f2 > "$PID_FILE"
E a linha 27:
sudo -u mongodb pkill -2 mongod && rm -f "$PID_FILE"
Mude as permissões do diretório de dados:
bash$ sudo chown -R mongodb /srv/mongodb/var/data
Configurações iniciais
Inicie o serviço:bash$ sudo /srv/mongodb/sbin/rc.mongodb-server start
Se tudo correr bem, já estará no ar. Precisamos criar um usuário administrador:
bash$ mongo
MongoDB shell version: 1.2.2
url: test
connecting to: test
type "help" for help
> use admin
switched to db admin
> db.addUser('admin', 'ra35EG/dz');
{ "user": "admin", "pwd": "2167016d7d6c88bcc8029ad2b1a7f1ff" }
Saia do prompt e edite o arquivo de configuração
/srv/mongodb/etc/mongodb.conf
, descomente a primeira linha:auth = true
E reinicie o serviço:
bash$ sudo /srv/mongodb/sbin/rc.mongodb-server restart
Agora o banco de dados vai pedir autenticação:
bash$ mongo
MongoDB shell version: 1.2.2
url: test
connecting to: test
type "help" for help
> show dbs
assert: assert failed : listDatabases failed
Sat Feb 27 13:04:51 JS Error: uncaught exception: assert failed : listDatabases failed
> use admin
switched to db admin
> db.auth('admin', 'ra35EG/dz');
1
> show dbs
admin
local
Habilitar o serviço para conexões externas
Caso você queira permitir conexões externas, altere em
/srv/mongodb/etc/mongodb.conf
a linha sobre bind_ip
:bind_ip = 0.0.0.0
E reinicie o serviço.
**
Espero que este artigo tenha sido útil. Para mais informações, continue lendo o artigo no Kodumaro.
[]’s
Cacilhas, La Batalema