How to install Elasticsearch in Linux Ubuntu server
I am currently working on three computers and it is real pain to get everything synchronized. Of course I am using git repositories and cloud but I still have to get rid of apache server, databases, etc. So I decided to create Virtual Machine which I save on USB drive and try to do it this way.
The Linux installation with Apache and MySql is not a problem. But I needed to install Elasticsearch ( which runs on Java ) and make it accessible from my computer ( Linux with Elasticsearch is running in VM ).
Installing Java 8
Add Java repository
Download the required files from Oracle :
sudo add-apt-repository -y ppa:webupd8team/java
Update :
sudo apt-get update
Install Java
sudo apt-get install oracle-java8-installer
Check ( verify ) version after installation :
java -version
On the output you should see something like this :
java version "1.8.0_72"
Java(TM) SE Runtime Environment (build 1.8.0_72-b15)
Java HotSpot(TM) 64-Bit Server VM (build 25.72-b15, mixed mode)
Installing ElasticSearch
Add elastic repository
wget -qO - https://packages.elastic.co/GPG-KEY-elasticsearch | sudo apt-key add -
Create repository list for Elastic
echo "deb http://packages.elastic.co/elasticsearch/1.7/debian stable main" | sudo tee -a /etc/apt/sources.list.d/elasticsearch-1.7.list
Update again :
sudo apt-get update
Install Elastic
sudo apt-get install elasticsearch
Enable Elastic to start automatically
sudo update-rc.d elasticsearch defaults 95 10
Sample output :
Adding system startup for /etc/init.d/elasticsearch …
/etc/rc0.d/K10elasticsearch -> ../init.d/elasticsearch
/etc/rc1.d/K10elasticsearch -> ../init.d/elasticsearch
/etc/rc6.d/K10elasticsearch -> ../init.d/elasticsearch
/etc/rc2.d/S95elasticsearch -> ../init.d/elasticsearch
/etc/rc3.d/S95elasticsearch -> ../init.d/elasticsearch
/etc/rc4.d/S95elasticsearch -> ../init.d/elasticsearch
/etc/rc5.d/S95elasticsearch -> ../init.d/elasticsearch
Configuration
Change network host and allow remote connection
Open Elasticsearch configuration file in your favorite editor, allow and change network.host
to localhost
. And if you want to connect to Elasticsearch from remote machine you need to enable network.bind_host
and set it to 0
.
sudo vi /etc/elasticsearch/elasticsearch.yml
Part of my Elasticsearch configuration file :
############################## Network And HTTP ###############################
# Elasticsearch, by default, binds itself to the 0.0.0.0 address, and listens
# on port [9200-9300] for HTTP traffic and on port [9300-9400] for node-to-node
# communication. (the range means that if the port is busy, it will automatically
# try the next port).
# Set the bind address specifically (IPv4 or IPv6):
#
network.bind_host: 0
# Set the address other nodes will use to communicate with this node. If not
# set, it is automatically derived. It must point to an actual IP address.
#
#network.publish_host: 192.168.0.1
# Set both ‘bind_host’ and ‘publish_host’:
#
network.host: localhost
Restart Elasticsearch service
sudo /etc/init.d/elasticsearch restart
Conclusion
Now, you should be able to connect and get data from Elasticsearch. Test it with command :
curl -X GET 'http://localhost:9200'
Response :
{
"status" : 200,
"name" : "Diablo",
"cluster_name" : "elasticsearch",
"version" : {
"number" : "1.7.5",
"build_hash" : "00f95f4ffca6de89d68b7ccaf80d148f1f70e4d4",
"build_timestamp" : "2016-02-02T09:55:30Z",
"build_snapshot" : false,
"lucene_version" : "4.10.4"
},
"tagline" : "You Know, for Search"
}
Do you like this post? Is it helpful? I am always learning and trying new technologies, processes and approaches. When I struggle with something and finally manage to solve it, I share my experience. If you want to support me, please use button below. If you have any questions or comments, please reach me via email juffalow@juffalow.com.
I am also available as a mentor if you need help with your architecture, engineering team or if you are looking for an experienced person to validate your thoughts.