mina-stack 0.0.2
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +7 -0
- data/.gitignore +17 -0
- data/Gemfile +4 -0
- data/LICENSE.txt +22 -0
- data/README.md +62 -0
- data/Rakefile +1 -0
- data/lib/generators/mina/stack/install_generator.rb +43 -0
- data/lib/generators/mina/templates/deploy.rb +74 -0
- data/lib/generators/mina/templates/production.rb +13 -0
- data/lib/mina-stack/base.rb +30 -0
- data/lib/mina-stack/defaults.rb +108 -0
- data/lib/mina-stack/setup.rb +50 -0
- data/lib/mina-stack/version.rb +5 -0
- data/lib/mina-stack.rb +9 -0
- data/lib/recipes/bower.rb +43 -0
- data/lib/recipes/elastic_search.rb +31 -0
- data/lib/recipes/imagemagick.rb +11 -0
- data/lib/recipes/libs.rb +14 -0
- data/lib/recipes/memcached.rb +21 -0
- data/lib/recipes/monit.rb +54 -0
- data/lib/recipes/nginx.rb +49 -0
- data/lib/recipes/node.rb +12 -0
- data/lib/recipes/postgresql.rb +58 -0
- data/lib/recipes/private_pub.rb +35 -0
- data/lib/recipes/puma.rb +31 -0
- data/lib/recipes/rails.rb +22 -0
- data/lib/recipes/rbenv.rb +28 -0
- data/lib/recipes/redis.rb +23 -0
- data/lib/recipes/sidekiq.rb +42 -0
- data/lib/recipes/unicorn.rb +21 -0
- data/lib/templates/application.yml.erb +4 -0
- data/lib/templates/database.yml.erb +8 -0
- data/lib/templates/memcached.conf.erb +16 -0
- data/lib/templates/monit/memcached.erb +8 -0
- data/lib/templates/monit/monitrc.erb +21 -0
- data/lib/templates/monit/nginx.erb +5 -0
- data/lib/templates/monit/postgresql.erb +5 -0
- data/lib/templates/monit/private_pub.erb +6 -0
- data/lib/templates/monit/puma.erb +7 -0
- data/lib/templates/monit/redis.erb +4 -0
- data/lib/templates/monit/sidekiq.erb +6 -0
- data/lib/templates/monit/unicorn.erb +14 -0
- data/lib/templates/nginx.conf.erb +43 -0
- data/lib/templates/private_pub.yml.erb +4 -0
- data/lib/templates/puma.rb.erb +17 -0
- data/lib/templates/sidekiq.yml.erb +9 -0
- data/lib/templates/unicorn.rb.erb +41 -0
- data/lib/templates/unicorn_init.erb +86 -0
- data/lib/templates/upstart/puma.conf.erb +46 -0
- data/lib/templates/upstart/sidekiq.conf.erb +44 -0
- data/mina-stack.gemspec +25 -0
- data/mina-stack.rb +7 -0
- 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
data/Gemfile
ADDED
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
|
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
|
data/lib/recipes/libs.rb
ADDED
@@ -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
|