Skip to content

Instantly share code, notes, and snippets.

@bhgraham
Forked from karmi/.gitignore
Last active December 12, 2015 00:48
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 1 You must be signed in to fork a gist
  • Save bhgraham/4686235 to your computer and use it in GitHub Desktop.
Save bhgraham/4686235 to your computer and use it in GitHub Desktop.
.DS_Store
Gemfile.lock
*.pem
node.json
tmp/*
!tmp/.gitignore

This repository contains files tailored for bootstrapping, installing and configuring Elasticsearch with Chef Solo on the Debian GNU/Linux operating system, based on a supplementary material for the Deploying Elasticsearch with Chef Solo tutorial.

After you have downloaded the files from the gist, copy and edit the node configuration:

cp node_ubuntu.json node.json
$EDITOR node.json

Set up the SSH connection according to your environment, eg.:

HOST=<REPLACE WITH YOUR SERVER IP>
KEY=<REPLACE WITH PATH TO YOUR SSH KEY>
USER=ubuntu
PORT=22
SSH_OPTIONS="-o User=$USER -o IdentityFile=$KEY -o Port=$PORT -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null"

And test that it's working:

ssh $SSH_OPTIONS $HOST "date"

Now, copy the files to the machine and execute the bootstrap script:

scp $SSH_OPTIONS bootstrap_ubuntu.sh node.json solo.rb $HOST:/tmp

time ssh -t $SSH_OPTIONS $HOST "sudo bash /tmp/bootstrap_ubuntu.sh"

Execute the Chef Solo run:

time ssh -t $SSH_OPTIONS $HOST "sudo su - root -c 'chef-solo --node-name elasticsearch-test-ubuntu -j /tmp/node.json'"

Check that the installation and configuration succeeded (you may need to wait couple of minutes until Monit starts):

ssh -t $SSH_OPTIONS $HOST "sudo service elasticsearch status -v"

ssh -t $SSH_OPTIONS $HOST "sudo monit reload && sudo monit status -v"

curl http://USERNAME:PASSWORD@$HOST:8080

Now, you can eg. test that Monit is, in fact, working. Kill the Elasticsearch process:

ssh -t $SSH_OPTIONS $HOST "cat '/usr/local/var/run/elasticsearch/elasticsearch_test_ubuntu.pid' | xargs -0 sudo kill -9"

Wait couple of minutes and check the status:

ssh -t $SSH_OPTIONS $HOST "sudo monit reload && sudo monit status -v"

See the original gist for more information.


http://www.elasticsearch.org/tutorials/2012/03/21/deploying-elasticsearch-with-chef-solo.html

echo -e "\nInstalling development dependencies and essential tools..." \
"\n===============================================================================\n"
# Update packages
apt-get update --yes --fix-missing
# Install build tools
apt-get install build-essential --yes --fix-missing
# Install utilities
apt-get install vim screen curl git-core sudo --yes --fix-missing
# Make sure we are running a Bash shell
ln -sf /bin/bash /bin/sh
echo -e "\nInstalling Ruby and Rubygems..." \
"\n===============================================================================\n"
# Install Ruby dependencies
apt-get install bison zlib1g-dev libopenssl-ruby1.9.1 libssl-dev libreadline5-dev libncurses5-dev libyaml-0-2 libxslt-dev libxml2-dev file --yes --fix-missing
# Install Ruby
apt-get install ruby1.9.1 ruby1.9.1-dev --yes --fix-missing
# Install Rubygems - deprecated, included in ruby1.9.1
#apt-get install rubygems1.9.1 --yes --fix-missing
# "Fix Debian"
ln -nfs /usr/bin/ruby1.9.1 /usr/local/bin/ruby
ln -nfs /usr/bin/gem1.9.1 /usr/local/bin/gem
echo "PATH=$PATH:/var/lib/gems/1.9.1/bin/" > /etc/profile.d/rubygems.sh
source /etc/profile.d/rubygems.sh
# Install the JSON gem
gem install json --no-ri --no-rdoc
echo -e "\nInstalling and bootstrapping Chef..." \
"\n===============================================================================\n"
test -d "/opt/chef" || curl -# -L http://www.opscode.com/chef/install.sh | sudo bash -s --
mkdir -p /etc/chef/
mkdir -p /var/chef-solo/site-cookbooks
mkdir -p /var/chef-solo/cookbooks
if test -f /tmp/solo.rb; then mv /tmp/solo.rb /etc/chef/solo.rb; fi
if test -d /tmp/data_bags; then mv /tmp/data_bags /etc/chef/data_bags; fi
echo -e "\nDownloading cookbooks..." \
"\n===============================================================================\n"
test -d /var/chef-solo/site-cookbooks/java || curl -# -L -k http://s3.amazonaws.com/community-files.opscode.com/cookbook_versions/tarballs/2811/original/java.tgz | tar xz -C /var/chef-solo/site-cookbooks/
test -d /var/chef-solo/site-cookbooks/monit || curl -# -L -k http://s3.amazonaws.com/community-files.opscode.com/cookbook_versions/tarballs/915/original/monit.tgz | tar xz -C /var/chef-solo/site-cookbooks/
test -d /var/chef-solo/site-cookbooks/nginx || curl -# -L -k http://s3.amazonaws.com/community-files.opscode.com/cookbook_versions/tarballs/1413/original/nginx.tgz | tar xz -C /var/chef-solo/site-cookbooks
test -d /var/chef-solo/site-cookbooks/ark || curl -# -L -k http://s3.amazonaws.com/community-files.opscode.com/cookbook_versions/tarballs/1631/original/ark.tgz | tar xz -C /var/chef-solo/site-cookbooks
if [ ! -d /var/chef-solo/cookbooks/elasticsearch ]; then
git clone git://github.com/elasticsearch/cookbook-elasticsearch.git /var/chef-solo/cookbooks/elasticsearch
else
cd /var/chef-solo/cookbooks/elasticsearch
git fetch
git reset origin/master --hard
fi
echo -e "\n*******************************************************************************\n" \
"Bootstrap finished" \
"\n*******************************************************************************\n"
{
"run_list": [ "recipe[monit]",
"recipe[java]",
"recipe[nginx]",
"recipe[elasticsearch]",
"recipe[elasticsearch::proxy]",
"recipe[elasticsearch::monit]" ],
"elasticsearch" : {
"cluster_name" : "elasticsearch_test_with_chef",
"mlockall" : false,
"nginx" : {
"user" : "www-data",
"users" : [ { "username" : "USERNAME", "password" : "PASSWORD" } ]
}
},
"monit" : {
"notify_email" : "<REPLACE WITH YOUR E-MAIL>",
"mail_format" : { "from" : "monit@example.com", "subject" : "[monit] $SERVICE $EVENT on $HOST", "message" : "$SERVICE $ACTION: $DESCRIPTION" }
}
}
file_cache_path "/var/chef-solo"
cookbook_path ["/var/chef-solo/site-cookbooks", "/var/chef-solo/cookbooks"]
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment