Installation guide ============= This is the installation guide of the devops server. ## Contents * [Software requirements](#software) * [RHEL-based systems](#rhel) * [Debian-based systems](#debian) * [System users](#users) * [Directories](#directories) * [RVM](#rvm) * [Downloads](#downloads) * [Gems](#gems) * [SSH configuration](#ssh) * [Knife configuration](#knife) * [Devops configuration](#clouds) * [Openstack](#cloud_openstack) * [Ec2](#cloud_ec2) * [Init script](#init) * [Run devops](#run)

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 "" 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] = "" config[:mongo_port] = 27017 config[:mongo_db] = "" config[:mongo_user] = "" config[:mongo_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] = "" config[:openstack_api_key] = "" config[:openstack_auth_url] = "http://:5000/v2.0/tokens" config[:openstack_tenant] = "" config[:openstack_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] = "" config[:aws_secret_access_key] = "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="${pid_file%/?*}" if [ ! -f $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