mina-stack 0.0.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (53) hide show
  1. checksums.yaml +7 -0
  2. data/.gitignore +17 -0
  3. data/Gemfile +4 -0
  4. data/LICENSE.txt +22 -0
  5. data/README.md +62 -0
  6. data/Rakefile +1 -0
  7. data/lib/generators/mina/stack/install_generator.rb +43 -0
  8. data/lib/generators/mina/templates/deploy.rb +74 -0
  9. data/lib/generators/mina/templates/production.rb +13 -0
  10. data/lib/mina-stack/base.rb +30 -0
  11. data/lib/mina-stack/defaults.rb +108 -0
  12. data/lib/mina-stack/setup.rb +50 -0
  13. data/lib/mina-stack/version.rb +5 -0
  14. data/lib/mina-stack.rb +9 -0
  15. data/lib/recipes/bower.rb +43 -0
  16. data/lib/recipes/elastic_search.rb +31 -0
  17. data/lib/recipes/imagemagick.rb +11 -0
  18. data/lib/recipes/libs.rb +14 -0
  19. data/lib/recipes/memcached.rb +21 -0
  20. data/lib/recipes/monit.rb +54 -0
  21. data/lib/recipes/nginx.rb +49 -0
  22. data/lib/recipes/node.rb +12 -0
  23. data/lib/recipes/postgresql.rb +58 -0
  24. data/lib/recipes/private_pub.rb +35 -0
  25. data/lib/recipes/puma.rb +31 -0
  26. data/lib/recipes/rails.rb +22 -0
  27. data/lib/recipes/rbenv.rb +28 -0
  28. data/lib/recipes/redis.rb +23 -0
  29. data/lib/recipes/sidekiq.rb +42 -0
  30. data/lib/recipes/unicorn.rb +21 -0
  31. data/lib/templates/application.yml.erb +4 -0
  32. data/lib/templates/database.yml.erb +8 -0
  33. data/lib/templates/memcached.conf.erb +16 -0
  34. data/lib/templates/monit/memcached.erb +8 -0
  35. data/lib/templates/monit/monitrc.erb +21 -0
  36. data/lib/templates/monit/nginx.erb +5 -0
  37. data/lib/templates/monit/postgresql.erb +5 -0
  38. data/lib/templates/monit/private_pub.erb +6 -0
  39. data/lib/templates/monit/puma.erb +7 -0
  40. data/lib/templates/monit/redis.erb +4 -0
  41. data/lib/templates/monit/sidekiq.erb +6 -0
  42. data/lib/templates/monit/unicorn.erb +14 -0
  43. data/lib/templates/nginx.conf.erb +43 -0
  44. data/lib/templates/private_pub.yml.erb +4 -0
  45. data/lib/templates/puma.rb.erb +17 -0
  46. data/lib/templates/sidekiq.yml.erb +9 -0
  47. data/lib/templates/unicorn.rb.erb +41 -0
  48. data/lib/templates/unicorn_init.erb +86 -0
  49. data/lib/templates/upstart/puma.conf.erb +46 -0
  50. data/lib/templates/upstart/sidekiq.conf.erb +44 -0
  51. data/mina-stack.gemspec +25 -0
  52. data/mina-stack.rb +7 -0
  53. metadata +151 -0
checksums.yaml ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: b9cfabc451d42bce86209816a4ce6cd1565b205b
4
+ data.tar.gz: 2e85b5b96ee5ada61b3035a1ba55465851c29b76
5
+ SHA512:
6
+ metadata.gz: ee8e3d2212af909a9fb9fae918ad52d5466e711c8e507d8fba64f58338b4845b8ac50bc7098fd9339e4ecd139328db63028a01a856d15bb462f82dd3d7dd9215
7
+ data.tar.gz: 8c352dec50aa6041ff91fd041f309ac3d8858f8eaaee3cce3975164fe76709f92f229fb35f0e63634ae9c80b22f5d9865d34784b27a6f97c3293b08c59304f0c
data/.gitignore ADDED
@@ -0,0 +1,17 @@
1
+ *.gem
2
+ *.rbc
3
+ .bundle
4
+ .config
5
+ .yardoc
6
+ Gemfile.lock
7
+ InstalledFiles
8
+ _yardoc
9
+ coverage
10
+ doc/
11
+ lib/bundler/man
12
+ pkg
13
+ rdoc
14
+ spec/reports
15
+ test/tmp
16
+ test/version_tmp
17
+ tmp
data/Gemfile ADDED
@@ -0,0 +1,4 @@
1
+ source 'https://rubygems.org'
2
+
3
+ # Specify your gem's dependencies in mina-stack.gemspec
4
+ gemspec
data/LICENSE.txt ADDED
@@ -0,0 +1,22 @@
1
+ Copyright (c) 2013 Igor Davydov
2
+
3
+ MIT License
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining
6
+ a copy of this software and associated documentation files (the
7
+ "Software"), to deal in the Software without restriction, including
8
+ without limitation the rights to use, copy, modify, merge, publish,
9
+ distribute, sublicense, and/or sell copies of the Software, and to
10
+ permit persons to whom the Software is furnished to do so, subject to
11
+ the following conditions:
12
+
13
+ The above copyright notice and this permission notice shall be
14
+ included in all copies or substantial portions of the Software.
15
+
16
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
17
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
18
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
19
+ NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
20
+ LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
21
+ OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
22
+ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
data/README.md ADDED
@@ -0,0 +1,62 @@
1
+ mina-stack
2
+ ===========
3
+
4
+ A compilation of several deploy scripts that I use for my rails apps. The stack I use is pretty standart,
5
+ but it may not suit your needs, so its not for everybody.
6
+ Current stack includes Nginx, Postgres, rbenv, Redis, Unicorn, Puma,
7
+ Sidekiq, Memcached, Imagemagick, ElasticSearch, Bower and Monit.
8
+
9
+ ## Installation
10
+
11
+ ```
12
+ gem 'mina-stack', github: 'div/mina-stack', group: :development
13
+ ```
14
+
15
+ ```
16
+ rails g mina:stack:install
17
+ ```
18
+ to create default deploy.rb and servers/production.rb files
19
+
20
+ ## Configuration
21
+
22
+ In your config/deploy.rb you can configure your stack - you may want to exclude something you may not need e.g. Private Pub,
23
+ and choose app server - unicorn and puma are supported. It is done by setting server_stack array, example config can be found in examples/deploy.rb.
24
+
25
+ All the default settings can be fond in lib/mina-stack/defaults.rb and can be overriden in deploy.rb
26
+
27
+ ## Servers
28
+
29
+ Servers configs live in config/servers - example config is in examples/production.rb
30
+
31
+ ## Monitoring
32
+
33
+ You can also set with services of your stack will be monitored by Monit - just use monitored array.
34
+
35
+ ## Deploy
36
+
37
+ Create user on server
38
+ ```
39
+ sudo adduser deploy
40
+ sudo adduser deploy sudo
41
+ su deploy
42
+ ```
43
+ then copy your ssh keys
44
+ ```
45
+ ssh-copy-id deploy@IPADDRESS
46
+ ```
47
+ Install all the stack to the server
48
+ ```
49
+ bundle exec mina install
50
+ ```
51
+ Create folder structure and copy all configs
52
+ ```
53
+ bundle exec mina setup
54
+ ```
55
+ Create db and set password
56
+ ```
57
+ bundle exec mina postgresql:create_db
58
+ ```
59
+ Deploy
60
+ ```
61
+ bundle exec mina deploy
62
+ ```
data/Rakefile ADDED
@@ -0,0 +1 @@
1
+ require "bundler/gem_tasks"
@@ -0,0 +1,43 @@
1
+ require 'rails/generators/base'
2
+
3
+ module Mina
4
+ module Stack
5
+ module Generators
6
+ class InstallGenerator < Rails::Generators::Base
7
+
8
+ source_root File.expand_path("../../templates", __FILE__)
9
+ desc "Creates an deploy script and server config for your application."
10
+
11
+ def do_all
12
+ create_servers_directory
13
+ copy_server_example
14
+ copy_deploy_script
15
+ message = <<-RUBY
16
+
17
+ Install complete! See the README on Github for instructions on getting your
18
+ deploy running with mina-stack.
19
+
20
+ RUBY
21
+ puts message.strip_heredoc
22
+
23
+ end
24
+
25
+ private
26
+
27
+ def create_servers_directory
28
+ # Creates empty directory if none; doesn't empty the directory
29
+ empty_directory "config/servers"
30
+ end
31
+
32
+ def copy_server_example
33
+ template "production.rb", "config/servers/production.rb"
34
+ end
35
+
36
+ def copy_deploy_script
37
+ template "deploy.rb", "config/deploy.rb"
38
+ end
39
+
40
+ end
41
+ end
42
+ end
43
+ end
@@ -0,0 +1,74 @@
1
+ require 'mina/bundler'
2
+ require 'mina/rails'
3
+ require 'mina/git'
4
+ require 'mina/rbenv'
5
+ require 'mina-stack'
6
+
7
+ set :app, 'example'
8
+ set :server_name, 'example.com'
9
+ set :keep_releases, 9999
10
+ set :default_server, :production
11
+ set :server, ENV['to'] || default_server
12
+ invoke :"env:#{server}"
13
+
14
+ # Allow calling as `mina deploy at=master`
15
+ set :branch, ENV['at'] if ENV['at']
16
+
17
+ set :server_stack, %w(
18
+ nginx
19
+ postgresql
20
+ redis
21
+ rbenv
22
+ puma
23
+ sidekiq
24
+ private_pub
25
+ elastic_search
26
+ imagemagick
27
+ memcached
28
+ monit
29
+ node
30
+ bower
31
+ )
32
+
33
+ set :shared_paths, %w(
34
+ tmp
35
+ log
36
+ config/puma.rb
37
+ config/database.yml
38
+ config/application.yml
39
+ config/sidekiq.yml
40
+ public/uploads
41
+ )
42
+
43
+ set :monitored, %w(
44
+ nginx
45
+ postgresql
46
+ redis
47
+ puma
48
+ sidekiq
49
+ private_pub
50
+ memcached
51
+ )
52
+
53
+ task :environment do
54
+ invoke :'rbenv:load'
55
+ end
56
+
57
+ desc "Deploys the current version to the server."
58
+ task :deploy do
59
+ deploy do
60
+ invoke :'sidekiq:quiet'
61
+ invoke :'git:clone'
62
+ invoke :'deploy:link_shared_paths'
63
+ invoke :'bundle:install'
64
+ invoke :'rails:db_migrate'
65
+ invoke :'bower:install_assets'
66
+ invoke :'rails:assets_precompile'
67
+
68
+ to :launch do
69
+ invoke :'puma:restart'
70
+ invoke :'sidekiq:restart'
71
+ invoke :'private_pub:restart'
72
+ end
73
+ end
74
+ end
@@ -0,0 +1,13 @@
1
+ namespace :env do
2
+ task :production => [:environment] do
3
+ set :domain, '127.0.0.1'
4
+ set :user, 'deployer'
5
+ set :deploy_to, "/home/#{user}/apps/#{app}"
6
+ set :repository, "/home/#{user}/git/#{app}"
7
+ set :nginx_path, '/etc/nginx'
8
+ set :deploy_server, 'production' # just a handy name of the server
9
+ set :rails_env, 'production'
10
+ set :branch, 'master'
11
+ invoke :defaults # load rest of the config
12
+ end
13
+ end
@@ -0,0 +1,30 @@
1
+ require 'erb'
2
+
3
+ def template(from, to=nil)
4
+ queue %{echo "-----> Put #{from} file to #{to}"}
5
+ to ||= "#{config_path}/#{from.chomp(".erb")}"
6
+ erb = File.read(File.expand_path("../../templates/#{from}", __FILE__))
7
+ put ERB.new(erb).result(binding), to
8
+ end
9
+
10
+ def put(content, file)
11
+ queue %[echo #{escape content} > "#{file}"]
12
+ end
13
+
14
+ def escape(str)
15
+ Shellwords.escape(str)
16
+ end
17
+
18
+ def check_symlink(destination)
19
+ %{if [[ -h "#{destination}" ]]; #{check_response}}
20
+ end
21
+
22
+ def check_response
23
+ 'then echo "-----> SUCCESS"; else echo "-----> FAILED"; fi'
24
+ end
25
+
26
+
27
+ task :sudo do
28
+ set :sudo, true
29
+ set :term_mode, :system # :pretty doesn't seem to work with sudo well
30
+ end
@@ -0,0 +1,108 @@
1
+ task :defaults do
2
+ set_default :ruby_version, "2.1.2"
3
+ set_default :services_path, "/etc/init.d"
4
+ set_default :upstart_path, "/etc/init"
5
+ set_default :tmp_path, "#{deploy_to}/#{shared_path}/tmp"
6
+ set_default :sockets_path, "#{tmp_path}/sockets"
7
+ set_default :pids_path, "#{tmp_path}/pids"
8
+ set_default :logs_path, "#{deploy_to}/#{shared_path}/log"
9
+ set_default :config_path, "#{deploy_to}/#{shared_path}/config"
10
+ set_default :app_namespace, "#{app!}_#{rails_env!}"
11
+ set_default :bundle, "cd #{deploy_to}/#{current_path} && #{bundle_bin}"
12
+
13
+ set_default :term_mode, :pretty
14
+
15
+ set_default :psql_user, "#{app!}"
16
+ set_default :psql_database, "#{app_namespace}"
17
+ set_default :postgresql_pid, "/var/run/postgresql/9.3-main.pid"
18
+
19
+ set_default :memcached_pid, "/var/run/memcached.pid"
20
+
21
+ set_default :puma_name, "puma_#{app_namespace!}"
22
+ set_default :puma_cmd, lambda { "#{bundle} exec puma" }
23
+ set_default :pumactl_cmd, lambda { "#{bundle} exec pumactl" }
24
+ set_default :puma_config, "#{config_path}/puma.rb"
25
+ set_default :puma_pid, "#{pids_path}/puma.pid"
26
+ set_default :puma_log, "#{logs_path}/puma.log"
27
+ set_default :puma_error_log, "#{logs_path}/puma.err.log"
28
+ set_default :puma_socket, "#{sockets_path}/puma.sock"
29
+ set_default :puma_state, "#{sockets_path}/puma.state"
30
+ set_default :puma_upstart, "#{upstart_path!}/#{puma_name}.conf"
31
+ set_default :puma_workers, 2
32
+
33
+ set_default :unicorn_name, "unicorn_#{app_namespace!}"
34
+ set_default :unicorn_socket, "#{sockets_path}/unicorn.sock"
35
+ set_default :unicorn_pid, "#{pids_path}/unicorn.pid"
36
+ set_default :unicorn_config, "#{config_path}/unicorn.rb"
37
+ set_default :unicorn_log, "#{logs_path}/unicorn.log"
38
+ set_default :unicorn_error_log, "#{logs_path}/unicorn.error.log"
39
+ set_default :unicorn_script, "#{services_path!}/#{unicorn_name}"
40
+ set_default :unicorn_workers, 1
41
+ set_default :unicorn_bin, lambda { "#{bundle_bin} exec unicorn" }
42
+ set_default :unicorn_cmd, "cd #{deploy_to}/#{current_path} && #{unicorn_bin} -D -c #{unicorn_config} -E #{rails_env}"
43
+ set_default :unicorn_user, user
44
+ set_default :unicorn_group, user
45
+
46
+ set_default :nginx_pid, "/var/run/nginx.pid"
47
+ set_default :nginx_config, "#{nginx_path!}/sites-available/#{app_namespace!}.conf"
48
+ set_default :nginx_config_e, "#{nginx_path!}/sites-enabled/#{app_namespace!}.conf"
49
+
50
+ set_default :sidekiq_name, "sidekiq_#{app_namespace!}"
51
+ set_default :sidekiq_cmd, lambda { "#{bundle_bin} exec sidekiq" }
52
+ set_default :sidekiqctl_cmd, lambda { "#{bundle_prefix} sidekiqctl" }
53
+ set_default :sidekiq_timeout, 10
54
+ set_default :sidekiq_config, "#{config_path}/sidekiq.yml"
55
+ set_default :sidekiq_log, "#{logs_path}/sidekiq.log"
56
+ set_default :sidekiq_pid, "#{pids_path}/sidekiq.pid"
57
+ set_default :sidekiq_concurrency, 10
58
+ # set_default :sidekiq_start, "(cd #{deploy_to}/#{current_path}; nohup #{sidekiq_cmd} -e #{rails_env} -C #{sidekiq_config} -P #{sidekiq_pid} >> #{sidekiq_log} 2>&1 </dev/null &)"
59
+ set_default :sidekiq_start, "#{sidekiq_cmd} -e #{rails_env} -C #{sidekiq_config} -P #{sidekiq_pid} >> #{sidekiq_log}"
60
+ set_default :sidekiq_upstart, "#{upstart_path!}/#{sidekiq_name}.conf"
61
+ # set_default :sidekiq_stop, "(cd #{deploy_to}/#{current_path} && #{sidekiqctl_cmd} stop #{sidekiq_pid} #{sidekiq_timeout})"
62
+
63
+ set_default :private_pub_name, "private_pub_#{app_namespace}"
64
+ set_default :private_pub_cmd, lambda { "#{bundle_prefix} rackup private_pub.ru" }
65
+ set_default :private_pub_pid, "#{pids_path}/private_pub.pid"
66
+ set_default :private_pub_config, "#{config_path}/private_pub.yml"
67
+ set_default :private_pub_log, "#{logs_path}/private_pub.log"
68
+ set_default :private_pub_server, "puma"
69
+
70
+ set_default :monit_config_path, "/etc/monit/conf.d"
71
+ set_default :monit_http_port, 2812
72
+ set_default :monit_http_username, "PleaseChangeMe_monit"
73
+ set_default :monit_http_password, "PleaseChangeMe"
74
+
75
+ set_default :shared_paths, %w(
76
+ tmp
77
+ log
78
+ public/uploads
79
+ )
80
+
81
+ set_default :monitored, %w(
82
+ nginx
83
+ postgresql
84
+ redis
85
+ puma
86
+ sidekiq
87
+ private_pub
88
+ memcached
89
+ )
90
+
91
+ set_default :server_stack, %w(
92
+ nginx
93
+ postgresql
94
+ redis
95
+ rails
96
+ rbenv
97
+ puma
98
+ sidekiq
99
+ private_pub
100
+ elastic_search
101
+ imagemagick
102
+ memcached
103
+ monit
104
+ bower
105
+ node
106
+ )
107
+
108
+ end
@@ -0,0 +1,50 @@
1
+
2
+ %w(install setup).each do |action|
3
+ desc "#{action.capitalize} Server Stack Services"
4
+ task action.to_sym => :environment do
5
+ if action.to_sym == :setup
6
+ invoke :create_extra_paths
7
+ # invoke :create_config_files
8
+ else
9
+ invoke :'libs:install'
10
+ end
11
+ server_stack.each do |service|
12
+ invoke :"#{service}:#{action}"
13
+ end
14
+ end
15
+ end
16
+
17
+ desc 'Create extra paths for shared configs, pids, sockets, etc.'
18
+ task :create_extra_paths do
19
+ queue 'echo "-----> Create configs path"'
20
+ queue echo_cmd "mkdir -p #{config_path}"
21
+
22
+ queue 'echo "-----> Create shared paths"'
23
+ shared_paths.each do |p|
24
+ queue echo_cmd "mkdir -p #{deploy_to}/#{shared_path}/#{p}" unless p.include?(".")
25
+ end
26
+
27
+ shared_dirs = shared_paths.map { |file| File.dirname("#{deploy_to}/#{shared_path}/#{file}") }.uniq
28
+ shared_dirs.map do |dir|
29
+ queue echo_cmd %{mkdir -p "#{dir}"}
30
+ end
31
+
32
+ queue 'echo "-----> Create PID and Sockets paths"'
33
+ queue echo_cmd "mkdir -p #{pids_path} && chown #{user}:#{group} #{pids_path} && chmod +rw #{pids_path}"
34
+ queue echo_cmd "mkdir -p #{sockets_path} && chown #{user}:#{group} #{sockets_path} && chmod +rw #{sockets_path}"
35
+
36
+ if monitored.any?
37
+ queue 'echo "-----> Create Monit dir"'
38
+ queue echo_cmd "mkdir -p #{config_path}/monit && chown #{user}:#{group} #{config_path}/monit && chmod +rw #{config_path}/monit"
39
+ monitored.each do |p|
40
+ path = "#{config_path}/monit/#{p}"
41
+ queue echo_cmd "mkdir -p #{path} && chown #{user}:#{group} #{path} && chmod +rw #{path}"
42
+ end
43
+ end
44
+ end
45
+
46
+ desc 'Create config files'
47
+ task :create_config_files do
48
+ template "secrets.yml.erb"
49
+ queue %[echo "-----> Be sure to edit 'shared/config/secrets.yml'."]
50
+ end
@@ -0,0 +1,5 @@
1
+ module Mina
2
+ module Stack
3
+ VERSION = "0.0.2"
4
+ end
5
+ end
data/lib/mina-stack.rb ADDED
@@ -0,0 +1,9 @@
1
+ require 'rake'
2
+ require 'mina'
3
+ require "mina-stack/version"
4
+ require 'mina-stack/defaults'
5
+ require 'mina-stack/base'
6
+ require 'mina-stack/setup'
7
+
8
+ Dir['config/servers/*.rb'].each { |f| load f }
9
+ Dir[File.dirname(__FILE__) + '/recipes/*.rb'].each {|file| require file }
@@ -0,0 +1,43 @@
1
+ namespace :bower do
2
+
3
+ desc "Install bower with dependencies"
4
+ task :install do
5
+ invoke :sudo
6
+ queue %{echo "-----> Installing Bower..."}
7
+ queue "sudo npm install -g bower"
8
+ end
9
+
10
+ task(:setup) { }
11
+
12
+ desc "Install assets"
13
+ task :install_assets do
14
+ if ENV['force_bower']
15
+ invoke :'bower:install_assets:force'
16
+ else
17
+ message = verbose_mode? ?
18
+ '$((count)) changes found, installing asets database' :
19
+ 'bower install'
20
+
21
+ queue check_for_changes_script \
22
+ :check => 'bower.json',
23
+ :at => ['bower.json'],
24
+ :skip => %[
25
+ echo "-----> bower.json unchanged; skipping"
26
+ ],
27
+ :changed => %[
28
+ echo "-----> #{message}"
29
+ bower install
30
+ ],
31
+ :default => %[
32
+ echo echo "-----> Installing Assets with Bower..."
33
+ bower install
34
+ ]
35
+ end
36
+ end
37
+
38
+ task :'install_assets:force' do
39
+ queue %{echo "-----> Installing Assets with Bower..."}
40
+ queue "bower install"
41
+ end
42
+
43
+ end
@@ -0,0 +1,31 @@
1
+ namespace :es do
2
+
3
+ desc "Install the latest release of ElasticSearch"
4
+ task :install do
5
+ invoke :sudo
6
+ queue %{echo "-----> Installing ElasticSearch..."}
7
+ queue "sudo apt-get install openjdk-7-jre -y"
8
+ queue "wget https://github.com/downloads/elasticsearch/elasticsearch/elasticsearch-0.19.1.tar.gz -O elasticsearch.tar.gz"
9
+ queue "tar -xf elasticsearch.tar.gz"
10
+ queue "rm elasticsearch.tar.gz"
11
+ queue "sudo mv elasticsearch-* elasticsearch"
12
+ queue "sudo mv elasticsearch /usr/local/share"
13
+
14
+ queue "curl -L http://github.com/elasticsearch/elasticsearch-servicewrapper/tarball/master | tar -xz"
15
+ queue "mv *servicewrapper*/service /usr/local/share/elasticsearch/bin/"
16
+ queue "rm -Rf *servicewrapper*"
17
+ queue "sudo /usr/local/share/elasticsearch/bin/service/elasticsearch install"
18
+ queue "sudo ln -s `readlink -f /usr/local/share/elasticsearch/bin/service/elasticsearch` /usr/local/bin/rcelasticsearch"
19
+ end
20
+
21
+ task(:setup) { }
22
+
23
+ %w[start stop restart].each do |command|
24
+ desc "#{command} elasticsearch"
25
+ task command do
26
+ invoke :sudo
27
+ queue "sudo service elasticsearch #{command}"
28
+ end
29
+ end
30
+
31
+ end
@@ -0,0 +1,11 @@
1
+ namespace :imagemagick do
2
+
3
+ desc "Install the latest release of Imagemagick"
4
+ task :install do
5
+ invoke :sudo
6
+ queue "sudo apt-get install imagemagick libmagickwand-dev -y"
7
+ end
8
+
9
+ task(:setup) { }
10
+
11
+ end
@@ -0,0 +1,14 @@
1
+ namespace :libs do
2
+
3
+ desc "Install some important libs"
4
+ task :install do
5
+ invoke :sudo
6
+ queue "sudo apt-get -y install curl libcurl3 libcurl3-dev"
7
+ queue "sudo apt-get -y install libxml2 libxml2-dev libxslt-dev"
8
+ queue "sudo apt-get -y install build-essential libssl-dev libcurl4-openssl-dev libreadline-dev libyaml-dev"
9
+
10
+ end
11
+
12
+ task(:setup) { }
13
+
14
+ end
@@ -0,0 +1,21 @@
1
+ namespace :memcached do
2
+ desc "Install Memcached"
3
+ task :install do
4
+ invoke :sudo
5
+ queue "sudo apt-get -y install memcached"
6
+ end
7
+
8
+ desc "Setup Memcached"
9
+ task :setup do
10
+ # template "memcached.erb", "/tmp/memcached.conf"
11
+ # run "#{sudo} mv /tmp/memcached.conf /etc/memcached.conf"
12
+ # restart
13
+ end
14
+
15
+ %w[start stop restart].each do |command|
16
+ desc "#{command} Memcached"
17
+ task command do
18
+ queue "sudo service memcached #{command}"
19
+ end
20
+ end
21
+ end
@@ -0,0 +1,54 @@
1
+ namespace :monit do
2
+
3
+ desc "Install Monit"
4
+ task :install do
5
+ invoke :sudo
6
+ queue %{echo "-----> Installing Monit..."}
7
+ queue "sudo apt-get -y install monit"
8
+ end
9
+
10
+ desc "Setup all Monit configuration"
11
+ task :setup do
12
+ invoke :sudo
13
+ if monitored.any?
14
+ queue %{echo "-----> Setting up Monit..."}
15
+ monitored.each do |daemon|
16
+ invoke :"monit:#{daemon}"
17
+ end
18
+ invoke :'monit:syntax'
19
+ invoke :'monit:restart'
20
+ else
21
+ queue %{echo "-----> Skiping monit - nothing is set for monitoring..."}
22
+ end
23
+ end
24
+
25
+ task(:nginx) { monit_config "nginx" }
26
+ task(:postgresql) { monit_config "postgresql" }
27
+ task(:redis) { monit_config "redis" }
28
+ task(:memcached) { monit_config "memcached" }
29
+ task(:puma) { monit_config "puma", "#{puma_name}" }
30
+ task(:unicorn) { monit_config "unicorn", "#{unicorn_name}" }
31
+ task(:sidekiq) { monit_config "sidekiq", "#{sidekiq_name}" }
32
+ task(:private_pub) { monit_config "private_pub", "#{private_pub_name}" }
33
+
34
+ %w[start stop restart syntax reload].each do |command|
35
+ desc "Run Monit #{command} script"
36
+ task command do
37
+ invoke :sudo
38
+ queue %{echo "-----> Monit #{command}"}
39
+ queue "sudo service monit #{command}"
40
+ end
41
+ end
42
+ end
43
+
44
+ def monit_config(original_name, destination_name = nil)
45
+ destination_name ||= origin_name
46
+ path ||= monit_config_path
47
+ destination = "#{path}/#{destination_name}"
48
+ template "monit/#{original_name}.erb", "#{config_path}/monit/#{original_name}"
49
+ queue echo_cmd %{sudo ln -fs "#{config_path}/monit/#{original_name}" "#{destination}"}
50
+ queue check_symlink destination
51
+ # queue "sudo mv /tmp/monit_#{original_name} #{destination}"
52
+ # queue "sudo chown root #{destination}"
53
+ # queue "sudo chmod 600 #{destination}"
54
+ end