Standardowo MongoDB nie wspiera SSL-a, więc musimy go w kompilować. Dystrybucja Linuxa z jakiej korzystałem to Debian 7. To co się na pewno przyda to dokumentacja MongoDB, z której korzystałem http://docs.mongodb.org/manual/tutorial/configure-ssl/
1) Kompilacja mongo z SSL-em
apt-get install git-core build-essential scons libssl-dev
git clone git://github.com/mongodb/mongo.git
cd mongo
git tag -l
git checkout r2.4.9
scons --ssl --prefix=/opt/mongo install
Generowanie certyfikatów
cd /etc/ssl/
openssl req -new -x509 -days 365 -nodes -out mongodb-cert.crt -keyout mongodb-cert.key
cat mongodb-cert.key mongodb-cert.crt > mongodb.pem
Zmieniamy konfigurację:
vim /etc/mongodb.conf
replSet=rs0 # nawet jesli to ma byc samodzielna instancja
sslOnNormalPorts = true
sslPEMKeyFile = /etc/ssl/mongodb.pem #ten, który wcześniej zrobiliśmy
Uruchamiamy Mongod
/opt/mongo/bin/mongod --config /etc/mongodb.conf
2) Elasticsearch - należy pamiętać aby pobrać odpowiedniego elasticsearch w raz z wersjami pluginów - np. dla MongoDB 2.4.9 elasticsearch 1.0.0, river 2.0.0 i mapper 2.0.0.RC1
http://www.elasticsearch.org/ - pobieramy i instalujemy według manuala ze strony projektu
https://github.com/richardwilly98/elasticsearch-river-mongodb
https://github.com/elasticsearch/elasticsearch-mapper-attachments
cd /usr/share/elasticsearch/
./bin/plugin -install elasticsearch/elasticsearch-mapper-attachments/2.0.0.RC1
./bin/plugin --install com.github.richardwilly98.elasticsearch/elasticsearch-river-mongodb/2.0.0
/etc/init.d/elasticsearch restart
rsconf='{
_id: "rs0",
members: [{_id: 0, host: "localhost:27017"}]
}'
/opt/mongo/bin/mongo --ssl --eval "rs.initiate( $rsconf )"
/opt/mongo/bin/mongo --ssl --eval 'rs.isMaster().ismaster'
Następnie
curl -s -XGET localhost:9200/_status
jeśli pusto to:
curl -XPUT "localhost:9200/_river/beta/_meta" -d '
{
"type": "mongodb",
"mongodb": {
"servers": [
{ "host": "mongod_ip", "port": mongod_port }
],
"options": { "secondary_read_preference": true },
"credentials": [
{ "db": "admin", "user": "user", "password": "haslo" }
],
"db": "nazwa_bazy",
"collection": "nazwa_kolekcji"
},
"index": {
"name": "nazwa_indexu",
"type": "typ_indexu"
}
}'
Ważne, aby { "db": "admin", "user": "user", "password": "haslo" } użytkownik miał prawa do bazy admin. Jak się okazało było to niezbędne do przeprowadzenia synchronizacji.
/opt/mongo/bin/mongo --ssl
use nazwa_bazy
db.nazwa_kolekcji.insert({pole_1: "cos1", pole2: new Date().toString()})
db.nazwa_kolekcji.insert({pole_1: "cos2", pole2: new Date().toString()})
exit
curl -XPOST http://localhost:9200/nazwa_indexu/typ_indexu/_search?pretty=true
Gdy dostaniemy wynik, to wiemy że wszystko działa :)
{
"took" : 4,
"timed_out" : false,
"_shards" : {
"total" : 5,
"successful" : 5,
"failed" : 0
},
"hits" : {
"total" : 1,
"max_score" : 0.6615001,
"hits" : [ {
"_index" : "nazwa_indexu",
"_type" : "typ_indexu",
"_id" : "5327018e15bd41df438e1d9d",
......
.nasze tajne dane.
......}
} ]
}
}
Brak komentarzy:
Prześlij komentarz
Proszę zostaw swój komentarz w celu dopowiedzenia tego czego ja nie wiedziałem lub wywołania ciekawej dyskusji. Wprowadziłem moderowanie komentarzy ze względu na dużą popularność bloga wśród różnych SEO botów :)