fluke/devops-service/INSTALL.md
2014-06-01 22:17:16 +04:00

5.8 KiB

Installation guide

This is the installation guide of the devops server.

Contents

Software requirements

Before installing devops, you should install system requirements: bash, gcc, make, wget, unzip, libxml2, libxslt

RHEL-based systems

# yum install -y bash gcc make wget unzip gcc-c++ libxml2-devel libxslt-devel

Debian-based systems

# apt-get install bash gcc make wget unzip g++ libxml2-dev libxslt-dev

System users

Create user devops

# useradd -m -d /devops --system -s /bin/bash devops

Directories

Create log directory:

# mkdir -p /var/log/devops
# chown devops: /var/log/devops

Create pid directory:

# mkdir -p /var/run/devops
# chown devops: /var/run/devops

Create devops directory:

# mkdir -p /devops/devops
# chown devops: /devops/devops

Create ssh, chef directories:

# mkdir -p /devops/{.ssh,.chef}
# chown devops: /devops/{.ssh,.chef}

Create bootstrap directory

# mkdir -p /devops/.chef/bootstrap
# chown devops: /devops/.chef/bootstrap

Create devops public directory:

# mkdir -p /devops/devops/public
# chown devops: /devops/devops/public

RVM

You should install rvm with ruby 1.9 or use system ruby

Downloads

Download devops-service-master.zip from https://github.com/ggasoftware/devops-service into /tmp Unzip devops-service-master.zip

# unzip /tmp/devops-service-master.zip -d /tmp/

Copy devops-service

# cp -rf /tmp/devops-service-master/devops-service/* /devops/devops
# chown devops: -R /devops/devops

Create client gem

# cd /tmp/devops-service-master/devops-client/
# rake build
# cp pkg/devops-client*.gem /devops/devops/public/devops-client.gem
# chown devops: /devops/devops/public/devops-client.gem

Gems

Install bundler

# gem install bundler

Then run bundler

# cd /devops/devops && bundle install

SSH configuration

# cat /devops/.ssh/config
StrictHostKeyChecking no
UserKnownHostsFile /dev/null

Knife configuration

# cat /devops/.chef/knife.rb
log_level                :info
log_location             STDOUT
node_name                "devops"
chef_server_url          "<Chef server host>"
validation_client_name   "chef-validator"
client_key               "/devops/.chef/client.pem"
validation_key           "/devops/.chef/validation.pem"

Then you should create client 'devops' with admin privileges on your chef server and copy your client.pem and validation.pem into /devops/.chef

chown devops: /devops/.chef/client.pem
chmod 0600 /devops/.chef/client.pem
chown devops: /devops/.chef/validation.pem
chmod 0600 /devops/.chef/validation.pem

Devops configuration

Devops configuration file is /devops/devops/config.rb

# cat /devops/devops/config.rb
config[:knife_config_file] = "/devops/.chef/knife.rb"
config[:role_separator] = "_"
config[:mongo_host] = "<mongo host>"
config[:mongo_port] = 27017
config[:mongo_db] = "<mongo db name>"
config[:mongo_user] = "<mongo user name>"
config[:mongo_password] = "<mongo user password>"
config[:port] = 7070
config[:client_file] = "/devops/devops/public/devops-client.gem"
config[:public_dir] = "/devops/devops/public"

Openstack

To configure openstack cloud, you should add to /devops/devops/config.rb:

config[:openstack_username]    = "<username>"
config[:openstack_api_key]     = "<password>"
config[:openstack_auth_url]    = "http://<host>:5000/v2.0/tokens"
config[:openstack_tenant]      = "<tenant>"
config[:openstack_ssh_key]     = "<ssh key>"
config[:openstack_certificate] = "/devops/.ssh/openstack.pem"

And copy your openstack certificate 'openstack.pem' into /devops/.ssh/

Ec2

To configure ec2 cloud, you should add to /devops/devops/config.rb:

config[:aws_access_key_id]     = "<access key id>"
config[:aws_secret_access_key] = "<secret access key"
config[:aws_ssh_key]           = "<ssh key>"
config[:aws_certificate]       = "/devops/.ssh/ec2.pem"
config[:aws_availability_zone] = "us-east-1e"

And copy your ec2 certificate 'ec2.pem' into /devops/.ssh/

Init script

# cat /etc/init.d/devops_service
#!/bin/bash
#
# devops_service: Start/Stop devops service
#
# chkconfig: - 80 05
# description: Enable devops service
user=devops
devops_home=/devops/devops
pid_file=/var/run/devops/devops.pid
log_file=/var/log/devops/service.log
port=7070
env=production
start() {
  echo "Starting devops service"
  PIDDIR=`dirname $pid_file`
  if [ ! -d $PIDDIR ]; then
    mkdir -p $PIDDIR
    chown $user $PIDDIR
  fi
  su - $user -c "cd $devops_home && bundle exec thin -R $devops_home/config.ru -e $env -d -p $port -t 600 -u $user --pid $pid_file --log $log_file start"
  return $?
}
stop() {
  echo "Stopping devops service"
  su - $user -c "cd $devops_home && bundle exec thin --pid $pid_file stop"
}
status() {
  if [ -f $pid_file ]; then
    pid=`cat $pid_file`
    echo "Running with pid: $pid"
  else
    echo "Not running"
  fi
  return $?
}
case "$1" in
  start)
    start
    ;;
  stop)
    stop
    ;;
  restart)
    stop
    start
    ;;
  status)
    status
    ;;
  *)
    echo "Usage: $0 (start|stop|restart|status)"
    exit 1
esac
exit $?

Run devops

Before run devops, check or disable iptables

chmod +x /etc/init.d/devops_service
/etc/init.d/devops_service start