mina-stack 0.0.2

Sign up to get free protection for your applications and to get access to all the features.
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