Skip to content

Instantly share code, notes, and snippets.

@amokan
Last active August 29, 2015 14:20
Show Gist options
  • Save amokan/3e8223615d64c4ed807c to your computer and use it in GitHub Desktop.
Save amokan/3e8223615d64c4ed807c to your computer and use it in GitHub Desktop.
Vagrantfile that runs NSQ in a vagrant VM under docker
# -*- mode: ruby -*-
# vi: set ft=ruby :
BOX_NAME = ENV['BOX_NAME'] || 'phusion-open-ubuntu-14.04-amd64'
BOX_URI = ENV['BOX_URI'] || 'https://oss-binaries.phusionpassenger.com/vagrant/boxes/latest/ubuntu-14.04-amd64-vbox.box'
VMWARE_BOX_URI = ENV['BOX_URI'] || 'https://oss-binaries.phusionpassenger.com/vagrant/boxes/latest/ubuntu-14.04-amd64-vmwarefusion.box'
AWS_REGION = ENV['AWS_REGION']
AWS_AMI = ENV['AWS_AMI']
APPS = '/mnt/apps'
# Not sure if this changes. Setup as a variable just in case.
DOCKER_IP = '172.17.42.1'
VAGRANTFILE_API_VERSION = '2'
Vagrant.configure(VAGRANTFILE_API_VERSION) do |config|
# Setup virtual machine box. This VM configuration code is always executed.
config.vm.box = BOX_NAME
config.vm.box_url = BOX_URI
# aws provider
config.vm.provider :aws do |aws, override|
aws.access_key_id = ENV['AWS_ACCESS_KEY_ID']
aws.secret_access_key = ENV['AWS_SECRET_ACCESS_KEY']
aws.keypair_name = ENV['AWS_KEYPAIR_NAME']
override.ssh.private_key_path = ENV['AWS_SSH_PRIVKEY']
override.ssh.username = 'ubuntu'
aws.region = AWS_REGION
aws.ami = AWS_AMI
aws.instance_type = 'm1.xlarge'
end
# vmware fusion provider
config.vm.provider :vmware_fusion do |f, override|
override.vm.box = BOX_NAME
override.vm.box_url = VMWARE_BOX_URI
f.vmx['displayName'] = 'docker_playground'
end
# virtualbox provider
config.vm.provider :virtualbox do |vb|
config.vm.box = BOX_NAME
config.vm.box_url = BOX_URI
#memory
vb.customize ['modifyvm', :id, '--memory', '4096']
end
### Port Forwarding ###
# Docker UI
config.vm.network 'forwarded_port', guest: 9000, host: 9000
# nsqlookupd
config.vm.network 'forwarded_port', guest: 4160, host: 4160
config.vm.network 'forwarded_port', guest: 4161, host: 4161
# nsqd
config.vm.network 'forwarded_port', guest: 4150, host: 4150
config.vm.network 'forwarded_port', guest: 4151, host: 4151
# nsqadmin
config.vm.network 'forwarded_port', guest: 4171, host: 4171
### Shell Provisioning ###
# install docker and configure vagrant user
if Dir.glob("#{File.dirname(__FILE__)}/.vagrant/machines/default/*/id").empty?
# Install Docker
pkg_cmd = 'wget -q -O - https://get.docker.io/gpg | apt-key add -;' \
'echo deb http://get.docker.io/ubuntu docker main > /etc/apt/sources.list.d/docker.list;' \
'apt-get update -qq; apt-get install -q -y --force-yes lxc-docker; '
# Add vagrant user to the docker group
pkg_cmd << 'usermod -a -G docker vagrant; '
config.vm.provision :shell, :inline => pkg_cmd
end
# setup shared directories for docker containers
config.vm.provision 'shell' do |s|
s.inline = "mkdir -p #{APPS}"
s.inline = "mkdir -p #{APPS}/nsqd/data"
end
### Docker Container Provisioning ###
config.vm.provision 'docker' do |d|
d.run 'nsqlookupd', image: 'nsqio/nsq', daemonize: true, cmd: "/nsqlookupd -broadcast-address='#{DOCKER_IP}'", args: "-p 4160:4160 -p 4161:4161"
d.run 'nsqd', image: 'nsqio/nsq', daemonize: true, cmd: "/nsqd -broadcast-address='#{DOCKER_IP}' -lookupd-tcp-address='#{DOCKER_IP}:4160' -data-path='/data'", args: "-p 4150:4150 -p 4151:4151 -v '#{APPS}/nsqd/data:/data'"
d.run 'nsqadmin', image: 'nsqio/nsq', daemonize: true, cmd: "/nsqadmin -lookupd-http-address='#{DOCKER_IP}:4160' -http-address='0.0.0.0:4171'", args: "-p 4171:4171"
d.run 'dockerui', image: 'crosbymichael/dockerui', daemonize: true, args: '-p 9000:9000 -v /var/run/docker.sock:/docker.sock crosbymichael/dockerui -e /docker.sock'
end
end
@amokan
Copy link
Author

amokan commented May 6, 2015

Note: I have only attempted to run this using the vagrant VMware plugin. It should work fine with VBox or on EC2, but you may need to adjust the file a bit.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment