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.
- 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
|