redde 0.0.3
Sign up to get free protection for your applications and to get access to all the features.
- data/.gitignore +20 -0
- data/.rspec +1 -0
- data/Gemfile +4 -0
- data/Guardfile +24 -0
- data/LICENSE +22 -0
- data/README.md +57 -0
- data/Rakefile +2 -0
- data/lib/generators/redde/deploy/deploy_generator.rb +34 -0
- data/lib/generators/redde/deploy/templates/Capfile +4 -0
- data/lib/generators/redde/deploy/templates/deploy.rb +33 -0
- data/lib/generators/redde/deploy/templates/recipes/base.rb +16 -0
- data/lib/generators/redde/deploy/templates/recipes/check.rb +13 -0
- data/lib/generators/redde/deploy/templates/recipes/database.rb +66 -0
- data/lib/generators/redde/deploy/templates/recipes/imagemagick.rb +8 -0
- data/lib/generators/redde/deploy/templates/recipes/memcached.rb +10 -0
- data/lib/generators/redde/deploy/templates/recipes/monit.rb +35 -0
- data/lib/generators/redde/deploy/templates/recipes/nginx.rb +26 -0
- data/lib/generators/redde/deploy/templates/recipes/nodejs.rb +10 -0
- data/lib/generators/redde/deploy/templates/recipes/postfix.rb +37 -0
- data/lib/generators/redde/deploy/templates/recipes/rbenv.rb +17 -0
- data/lib/generators/redde/deploy/templates/recipes/templates/database.yml.erb +8 -0
- data/lib/generators/redde/deploy/templates/recipes/templates/dkim-filter.conf.erb +57 -0
- data/lib/generators/redde/deploy/templates/recipes/templates/dkim-filter.defaults.erb +11 -0
- data/lib/generators/redde/deploy/templates/recipes/templates/dkim-keys.conf.erb +2 -0
- data/lib/generators/redde/deploy/templates/recipes/templates/gemrc.erb +1 -0
- data/lib/generators/redde/deploy/templates/recipes/templates/main.cf.erb +43 -0
- data/lib/generators/redde/deploy/templates/recipes/templates/memcached.erb +47 -0
- data/lib/generators/redde/deploy/templates/recipes/templates/monit_monitrc.erb +21 -0
- data/lib/generators/redde/deploy/templates/recipes/templates/monit_nginx.erb +5 -0
- data/lib/generators/redde/deploy/templates/recipes/templates/monit_unicorn.erb +14 -0
- data/lib/generators/redde/deploy/templates/recipes/templates/nginx_unicorn.erb +28 -0
- data/lib/generators/redde/deploy/templates/recipes/templates/unicorn.rb.erb +36 -0
- data/lib/generators/redde/deploy/templates/recipes/templates/unicorn_init.erb +84 -0
- data/lib/generators/redde/deploy/templates/recipes/unicorn.rb +27 -0
- data/lib/generators/redde/layout/layout_generator.rb +57 -0
- data/lib/generators/redde/layout/templates/assets/images/admin/addphoto.png +0 -0
- data/lib/generators/redde/layout/templates/assets/images/admin/ajaxloader2.gif +0 -0
- data/lib/generators/redde/layout/templates/assets/images/admin/arrow_down.png +0 -0
- data/lib/generators/redde/layout/templates/assets/images/admin/arrow_enter.png +0 -0
- data/lib/generators/redde/layout/templates/assets/images/admin/arrow_right.png +0 -0
- data/lib/generators/redde/layout/templates/assets/images/admin/coins.png +0 -0
- data/lib/generators/redde/layout/templates/assets/images/admin/confirm.png +0 -0
- data/lib/generators/redde/layout/templates/assets/images/admin/del.png +0 -0
- data/lib/generators/redde/layout/templates/assets/images/admin/delete.png +0 -0
- data/lib/generators/redde/layout/templates/assets/images/admin/email.png +0 -0
- data/lib/generators/redde/layout/templates/assets/images/admin/error.png +0 -0
- data/lib/generators/redde/layout/templates/assets/images/admin/fio.png +0 -0
- data/lib/generators/redde/layout/templates/assets/images/admin/folder.png +0 -0
- data/lib/generators/redde/layout/templates/assets/images/admin/folder_.png +0 -0
- data/lib/generators/redde/layout/templates/assets/images/admin/icon_eye.gif +0 -0
- data/lib/generators/redde/layout/templates/assets/images/admin/lightbox/css/jquery.lightbox-0.5.css +101 -0
- data/lib/generators/redde/layout/templates/assets/images/admin/lightbox/images/lightbox-blank.gif +0 -0
- data/lib/generators/redde/layout/templates/assets/images/admin/lightbox/images/lightbox-btn-close.gif +0 -0
- data/lib/generators/redde/layout/templates/assets/images/admin/lightbox/images/lightbox-btn-next.gif +0 -0
- data/lib/generators/redde/layout/templates/assets/images/admin/lightbox/images/lightbox-btn-prev.gif +0 -0
- data/lib/generators/redde/layout/templates/assets/images/admin/lightbox/images/lightbox-ico-loading.gif +0 -0
- data/lib/generators/redde/layout/templates/assets/images/admin/lightbox/js/jquery.js +32 -0
- data/lib/generators/redde/layout/templates/assets/images/admin/lightbox/js/jquery.lightbox-0.5.js +477 -0
- data/lib/generators/redde/layout/templates/assets/images/admin/lightbox/js/jquery.lightbox-0.5.min.js +42 -0
- data/lib/generators/redde/layout/templates/assets/images/admin/lightbox/js/jquery.lightbox-0.5.pack.js +14 -0
- data/lib/generators/redde/layout/templates/assets/images/admin/logo.png +0 -0
- data/lib/generators/redde/layout/templates/assets/images/admin/logo_reddeshop.png +0 -0
- data/lib/generators/redde/layout/templates/assets/images/admin/move_handler.png +0 -0
- data/lib/generators/redde/layout/templates/assets/images/admin/phone.png +0 -0
- data/lib/generators/redde/layout/templates/assets/images/admin/photo_ico.png +0 -0
- data/lib/generators/redde/layout/templates/assets/images/admin/print.png +0 -0
- data/lib/generators/redde/layout/templates/assets/images/admin/redactor/css/docstyle.css +123 -0
- data/lib/generators/redde/layout/templates/assets/images/admin/redactor/css/redactor.css +369 -0
- data/lib/generators/redde/layout/templates/assets/images/admin/redactor/css/style.css +119 -0
- data/lib/generators/redde/layout/templates/assets/images/admin/redactor/css/wym.css +136 -0
- data/lib/generators/redde/layout/templates/assets/images/admin/redactor/img/icons.png +0 -0
- data/lib/generators/redde/layout/templates/assets/images/admin/redactor/langs/by.js +72 -0
- data/lib/generators/redde/layout/templates/assets/images/admin/redactor/langs/de.js +75 -0
- data/lib/generators/redde/layout/templates/assets/images/admin/redactor/langs/en.js +76 -0
- data/lib/generators/redde/layout/templates/assets/images/admin/redactor/langs/es.js +76 -0
- data/lib/generators/redde/layout/templates/assets/images/admin/redactor/langs/fr.js +74 -0
- data/lib/generators/redde/layout/templates/assets/images/admin/redactor/langs/hu.js +76 -0
- data/lib/generators/redde/layout/templates/assets/images/admin/redactor/langs/it.js +76 -0
- data/lib/generators/redde/layout/templates/assets/images/admin/redactor/langs/ja.js +76 -0
- data/lib/generators/redde/layout/templates/assets/images/admin/redactor/langs/lv.js +74 -0
- data/lib/generators/redde/layout/templates/assets/images/admin/redactor/langs/nl.js +76 -0
- data/lib/generators/redde/layout/templates/assets/images/admin/redactor/langs/pl.js +75 -0
- data/lib/generators/redde/layout/templates/assets/images/admin/redactor/langs/pt_br.js +81 -0
- data/lib/generators/redde/layout/templates/assets/images/admin/redactor/langs/ru.js +75 -0
- data/lib/generators/redde/layout/templates/assets/images/admin/redactor/langs/sq.js +76 -0
- data/lib/generators/redde/layout/templates/assets/images/admin/redactor/langs/tr.js +76 -0
- data/lib/generators/redde/layout/templates/assets/images/admin/redactor/langs/ua.js +75 -0
- data/lib/generators/redde/layout/templates/assets/images/admin/redactor/langs/zh_cn.js +77 -0
- data/lib/generators/redde/layout/templates/assets/images/admin/redactor/plugins/file.html +3 -0
- data/lib/generators/redde/layout/templates/assets/images/admin/redactor/plugins/image.html +39 -0
- data/lib/generators/redde/layout/templates/assets/images/admin/redactor/plugins/image_edit.html +35 -0
- data/lib/generators/redde/layout/templates/assets/images/admin/redactor/plugins/link.html +74 -0
- data/lib/generators/redde/layout/templates/assets/images/admin/redactor/plugins/table.html +25 -0
- data/lib/generators/redde/layout/templates/assets/images/admin/redactor/plugins/video.html +15 -0
- data/lib/generators/redde/layout/templates/assets/images/admin/redactor/redactor.js.erb +2260 -0
- data/lib/generators/redde/layout/templates/assets/images/admin/redactor/redactor.min.js +1 -0
- data/lib/generators/redde/layout/templates/assets/images/admin/redactor/toolbars/default.js +219 -0
- data/lib/generators/redde/layout/templates/assets/images/admin/redactor/toolbars/mini.js +103 -0
- data/lib/generators/redde/layout/templates/assets/images/admin/reddebox/_jquery.reddebox.js.erb +214 -0
- data/lib/generators/redde/layout/templates/assets/images/admin/reddebox/close.png +0 -0
- data/lib/generators/redde/layout/templates/assets/images/admin/reddebox/jquery.reddebox.js.erb +246 -0
- data/lib/generators/redde/layout/templates/assets/images/admin/reddebox/jquery.reddebox.scss +31 -0
- data/lib/generators/redde/layout/templates/assets/images/admin/reddebox/next.png +0 -0
- data/lib/generators/redde/layout/templates/assets/images/admin/reddebox/prev.png +0 -0
- data/lib/generators/redde/layout/templates/assets/images/admin/refresh.png +0 -0
- data/lib/generators/redde/layout/templates/assets/images/admin/submit.png +0 -0
- data/lib/generators/redde/layout/templates/assets/images/admin/submit_hover.png +0 -0
- data/lib/generators/redde/layout/templates/assets/images/admin/uploadifive/change-log.txt +19 -0
- data/lib/generators/redde/layout/templates/assets/images/admin/uploadifive/check-exists.php +15 -0
- data/lib/generators/redde/layout/templates/assets/images/admin/uploadifive/index.php +50 -0
- data/lib/generators/redde/layout/templates/assets/images/admin/uploadifive/jquery.uploadifive.js +888 -0
- data/lib/generators/redde/layout/templates/assets/images/admin/uploadifive/jquery.uploadifive.min.js +6 -0
- data/lib/generators/redde/layout/templates/assets/images/admin/uploadifive/license-standard.txt +71 -0
- data/lib/generators/redde/layout/templates/assets/images/admin/uploadifive/uploadifive-cancel.png +0 -0
- data/lib/generators/redde/layout/templates/assets/images/admin/uploadifive/uploadifive-image-only.php +66 -0
- data/lib/generators/redde/layout/templates/assets/images/admin/uploadifive/uploadifive.css +100 -0
- data/lib/generators/redde/layout/templates/assets/images/admin/uploadifive/uploadifive.php +33 -0
- data/lib/generators/redde/layout/templates/assets/images/admin/uploadify/#swfobject.js +4 -0
- data/lib/generators/redde/layout/templates/assets/images/admin/uploadify/cancel.png +0 -0
- data/lib/generators/redde/layout/templates/assets/images/admin/uploadify/jquery.uploadify.min.js +315 -0
- data/lib/generators/redde/layout/templates/assets/images/admin/uploadify/uploadify-cancel.png +0 -0
- data/lib/generators/redde/layout/templates/assets/images/admin/uploadify/uploadify.css +66 -0
- data/lib/generators/redde/layout/templates/assets/images/admin/uploadify/uploadify.swf +0 -0
- data/lib/generators/redde/layout/templates/assets/images/admin/view.png +0 -0
- data/lib/generators/redde/layout/templates/assets/images/admin/view_mk.png +0 -0
- data/lib/generators/redde/layout/templates/assets/javascripts/admin/jquery.ui.nestedSortable.js +390 -0
- data/lib/generators/redde/layout/templates/assets/javascripts/admin/swfobject.js +4 -0
- data/lib/generators/redde/layout/templates/assets/javascripts/admin/zen_textarea.min.js +17 -0
- data/lib/generators/redde/layout/templates/assets/javascripts/admin.js +88 -0
- data/lib/generators/redde/layout/templates/assets/stylesheets/admin/_reset.scss +32 -0
- data/lib/generators/redde/layout/templates/assets/stylesheets/admin/blocks/_list.scss +22 -0
- data/lib/generators/redde/layout/templates/assets/stylesheets/admin/blocks/_notice.scss +39 -0
- data/lib/generators/redde/layout/templates/assets/stylesheets/admin/blocks/_orders.scss +22 -0
- data/lib/generators/redde/layout/templates/assets/stylesheets/admin/blocks/_partners.scss +15 -0
- data/lib/generators/redde/layout/templates/assets/stylesheets/admin/blocks/_photos.scss +31 -0
- data/lib/generators/redde/layout/templates/assets/stylesheets/admin/blocks/_sortable.scss +17 -0
- data/lib/generators/redde/layout/templates/assets/stylesheets/admin/default.scss +127 -0
- data/lib/generators/redde/layout/templates/assets/stylesheets/admin/defaults/_input.scss +43 -0
- data/lib/generators/redde/layout/templates/assets/stylesheets/admin/defaults/_table.scss +24 -0
- data/lib/generators/redde/layout/templates/assets/stylesheets/admin/layouts/_header.scss +57 -0
- data/lib/generators/redde/layout/templates/assets/stylesheets/admin/layouts/_launchbar.scss +35 -0
- data/lib/generators/redde/layout/templates/assets/stylesheets/admin/layouts/_login.scss +10 -0
- data/lib/generators/redde/layout/templates/assets/stylesheets/admin/layouts/_main.scss +59 -0
- data/lib/generators/redde/layout/templates/assets/stylesheets/admin/layouts/_sidebar.scss +35 -0
- data/lib/generators/redde/layout/templates/assets/stylesheets/admin/shop/_filter.scss +16 -0
- data/lib/generators/redde/layout/templates/assets/stylesheets/admin/shop/_order-sh.scss +59 -0
- data/lib/generators/redde/layout/templates/assets/stylesheets/admin/shop/_pe.scss +43 -0
- data/lib/generators/redde/layout/templates/assets/stylesheets/admin.scss +12 -0
- data/lib/generators/redde/layout/templates/controllers/base_controller.rb +6 -0
- data/lib/generators/redde/layout/templates/helpers/admin_helper.rb +37 -0
- data/lib/generators/redde/layout/templates/layouts/admin.html.haml +30 -0
- data/lib/generators/redde/layout/templates/layouts/login.html.haml +32 -0
- data/lib/generators/redde/layout/templates/shared/_header.html.haml +13 -0
- data/lib/generators/redde/layout/templates/shared/_launchbar.html.haml +9 -0
- data/lib/generators/redde/layout/templates/shared/_sidebar.html.haml +23 -0
- data/lib/generators/redde/scaffold/scaffold_generator.rb +114 -0
- data/lib/generators/redde/scaffold/templates/controllers/controller.rb +55 -0
- data/lib/generators/redde/scaffold/templates/edit.html.haml +36 -0
- data/lib/generators/redde/scaffold/templates/index.html.haml +37 -0
- data/lib/redde/version.rb +3 -0
- data/lib/redde.rb +4 -0
- data/redde.gemspec +26 -0
- data/spec/deploy_generator_spec.rb +29 -0
- data/spec/layout_generator_spec.rb +41 -0
- data/spec/scaffold_generator_spec.rb +25 -0
- data/spec/spec_helper.rb +10 -0
- metadata +327 -0
data/.gitignore
ADDED
data/.rspec
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
--colour
|
data/Gemfile
ADDED
data/Guardfile
ADDED
@@ -0,0 +1,24 @@
|
|
1
|
+
# A sample Guardfile
|
2
|
+
# More info at https://github.com/guard/guard#readme
|
3
|
+
|
4
|
+
guard 'rspec' do
|
5
|
+
watch(%r{^spec/.+_spec\.rb$})
|
6
|
+
watch(%r{^lib/(.+)\.rb$}) { |m| "spec/lib/#{m[1]}_spec.rb" }
|
7
|
+
watch('spec/spec_helper.rb') { "spec" }
|
8
|
+
|
9
|
+
# Rails example
|
10
|
+
watch(%r{^app/(.+)\.rb$}) { |m| "spec/#{m[1]}_spec.rb" }
|
11
|
+
watch(%r{^app/(.*)(\.erb|\.haml)$}) { |m| "spec/#{m[1]}#{m[2]}_spec.rb" }
|
12
|
+
watch(%r{^app/controllers/(.+)_(controller)\.rb$}) { |m| ["spec/routing/#{m[1]}_routing_spec.rb", "spec/#{m[2]}s/#{m[1]}_#{m[2]}_spec.rb", "spec/acceptance/#{m[1]}_spec.rb"] }
|
13
|
+
watch(%r{^spec/support/(.+)\.rb$}) { "spec" }
|
14
|
+
watch('config/routes.rb') { "spec/routing" }
|
15
|
+
watch('app/controllers/application_controller.rb') { "spec/controllers" }
|
16
|
+
|
17
|
+
# Capybara features specs
|
18
|
+
watch(%r{^app/views/(.+)/.*\.(erb|haml)$}) { |m| "spec/features/#{m[1]}_spec.rb" }
|
19
|
+
|
20
|
+
# Turnip features and steps
|
21
|
+
watch(%r{^spec/acceptance/(.+)\.feature$})
|
22
|
+
watch(%r{^spec/acceptance/steps/(.+)_steps\.rb$}) { |m| Dir[File.join("**/#{m[1]}.feature")][0] || 'spec/acceptance' }
|
23
|
+
end
|
24
|
+
|
data/LICENSE
ADDED
@@ -0,0 +1,22 @@
|
|
1
|
+
Copyright (c) 2012 Oleg Bovykin
|
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,57 @@
|
|
1
|
+
# Redde
|
2
|
+
|
3
|
+
Redde admin generator
|
4
|
+
|
5
|
+
## Installation
|
6
|
+
|
7
|
+
Add this line to your application's Gemfile:
|
8
|
+
|
9
|
+
gem 'redde', :group => :development
|
10
|
+
|
11
|
+
And then execute:
|
12
|
+
|
13
|
+
$ bundle
|
14
|
+
|
15
|
+
## Requirements
|
16
|
+
|
17
|
+
Layout requires 'devise' gem with generated user model. If You use another auth solution, feel free to modify partial with user info and logout link.
|
18
|
+
|
19
|
+
## Usage
|
20
|
+
|
21
|
+
To generate admin layout type:
|
22
|
+
|
23
|
+
rails g redde:layout
|
24
|
+
|
25
|
+
To set admin login layout you need to modify application controller:
|
26
|
+
|
27
|
+
layout :layout_by_resource
|
28
|
+
|
29
|
+
def layout_by_resource
|
30
|
+
if devise_controller? && controller_name == "sessions"
|
31
|
+
'login'
|
32
|
+
else
|
33
|
+
"application"
|
34
|
+
end
|
35
|
+
end
|
36
|
+
|
37
|
+
To generate admin views and controller for model type:
|
38
|
+
|
39
|
+
rails g redde:scaffold ModelNames
|
40
|
+
|
41
|
+
Add to your config/prodcution.rb these files: admin.scss and admin.js
|
42
|
+
|
43
|
+
config.assets.precompile += %w( admin.js admin.css )
|
44
|
+
|
45
|
+
## Options
|
46
|
+
If you have these fields in your model:
|
47
|
+
|
48
|
+
* `visible:boolean` for toggle option
|
49
|
+
* `position:integer` for sortable option
|
50
|
+
|
51
|
+
## Contributing
|
52
|
+
|
53
|
+
1. Fork it
|
54
|
+
2. Create your feature branch (`git checkout -b my-new-feature`)
|
55
|
+
3. Commit your changes (`git commit -am 'Added some feature'`)
|
56
|
+
4. Push to the branch (`git push origin my-new-feature`)
|
57
|
+
5. Create new Pull Request
|
data/Rakefile
ADDED
@@ -0,0 +1,34 @@
|
|
1
|
+
require 'rails/generators'
|
2
|
+
|
3
|
+
module Redde
|
4
|
+
module Generators
|
5
|
+
class DeployGenerator < ::Rails::Generators::Base
|
6
|
+
source_root File.expand_path("../templates", __FILE__)
|
7
|
+
desc "Redde deploy recipes generator"
|
8
|
+
|
9
|
+
attr_reader :app_name, :ip, :domain
|
10
|
+
|
11
|
+
argument :ip, :type => :string, :required => true, :banner => "Enter ip addres of the host"
|
12
|
+
|
13
|
+
argument :domain, :type => :string, :required => false, :banner => "Enter domain name for postfix config"
|
14
|
+
|
15
|
+
def generate_layout
|
16
|
+
# copy Capfile
|
17
|
+
template "Capfile", "Capfile"
|
18
|
+
|
19
|
+
# copy deploy.rb
|
20
|
+
template "deploy.rb", "config/deploy.rb"
|
21
|
+
|
22
|
+
# copy capistrano recipes
|
23
|
+
directory "recipes", "config/recipes"
|
24
|
+
end
|
25
|
+
|
26
|
+
private
|
27
|
+
|
28
|
+
def app_name
|
29
|
+
Rails.application.class.to_s.split("::").first.downcase || "TestApp"
|
30
|
+
end
|
31
|
+
end
|
32
|
+
|
33
|
+
end
|
34
|
+
end
|
@@ -0,0 +1,33 @@
|
|
1
|
+
require "bundler/capistrano"
|
2
|
+
|
3
|
+
load "config/recipes/base"
|
4
|
+
load "config/recipes/nginx"
|
5
|
+
load "config/recipes/unicorn"
|
6
|
+
load "config/recipes/database"
|
7
|
+
load "config/recipes/imagemagick"
|
8
|
+
load "config/recipes/nodejs"
|
9
|
+
load "config/recipes/rbenv"
|
10
|
+
load "config/recipes/check"
|
11
|
+
load "config/recipes/monit"
|
12
|
+
load "config/recipes/memcached"
|
13
|
+
<% if domain.present? %>
|
14
|
+
load "config/recipes/postfix"
|
15
|
+
set :fqdn, "<%= domain %>"
|
16
|
+
<% end %>
|
17
|
+
|
18
|
+
server "<%= ip %>", :web, :app, :db, primary: true
|
19
|
+
|
20
|
+
set :user, "webmaster"
|
21
|
+
set :application, "<%= app_name %>"
|
22
|
+
set :deploy_to, "/home/#{user}/projects/#{application}"
|
23
|
+
set :deploy_via, :remote_cache
|
24
|
+
set :use_sudo, false
|
25
|
+
|
26
|
+
set :scm, "git"
|
27
|
+
set :repository, "webmaster@<%= ip %>:<%= app_name %>"
|
28
|
+
set :branch, "master"
|
29
|
+
|
30
|
+
default_run_options[:pty] = true
|
31
|
+
ssh_options[:forward_agent] = true
|
32
|
+
|
33
|
+
after "deploy", "deploy:cleanup" # keep only the last 5 releases
|
@@ -0,0 +1,16 @@
|
|
1
|
+
def template(from, to)
|
2
|
+
erb = File.read(File.expand_path("../templates/#{from}", __FILE__))
|
3
|
+
put ERB.new(erb).result(binding), to
|
4
|
+
end
|
5
|
+
|
6
|
+
def set_default(name, *args, &block)
|
7
|
+
set(name, *args, &block) unless exists?(name)
|
8
|
+
end
|
9
|
+
|
10
|
+
namespace :deploy do
|
11
|
+
desc "Install base requirements"
|
12
|
+
task :install do
|
13
|
+
run "#{sudo} apt-get -y update"
|
14
|
+
run "#{sudo} apt-get -y install python-software-properties build-essential openssl libreadline6 libreadline6-dev curl git-core zlib1g zlib1g-dev libssl-dev libyaml-dev libsqlite3-0 libsqlite3-dev sqlite3 libxml2-dev libxslt-dev autoconf libc6-dev ncurses-dev automake libtool bison"
|
15
|
+
end
|
16
|
+
end
|
@@ -0,0 +1,13 @@
|
|
1
|
+
namespace :check do
|
2
|
+
desc "Make sure local git is in sync with remote."
|
3
|
+
task :revision, roles: :web do
|
4
|
+
unless `git rev-parse HEAD` == `git rev-parse origin/#{branch}`
|
5
|
+
puts "WARNING: HEAD is not the same as origin/#{branch}"
|
6
|
+
puts "Run `git push` to sync changes."
|
7
|
+
exit
|
8
|
+
end
|
9
|
+
end
|
10
|
+
before "deploy", "check:revision"
|
11
|
+
before "deploy:migrations", "check:revision"
|
12
|
+
before "deploy:cold", "check:revision"
|
13
|
+
end
|
@@ -0,0 +1,66 @@
|
|
1
|
+
#coding: utf-8
|
2
|
+
set_default(:database_host, "localhost")
|
3
|
+
set_default(:database_user, "root")
|
4
|
+
set_default(:database_database) { "#{application}_production" }
|
5
|
+
|
6
|
+
namespace :database do
|
7
|
+
desc "Install MySQL-Server with non-interactive mode"
|
8
|
+
task :install, roles: :db do
|
9
|
+
begin
|
10
|
+
put %Q{
|
11
|
+
Name: mysql-server/root_password
|
12
|
+
Template: mysql-server/root_password
|
13
|
+
Value:
|
14
|
+
Owners: mysql-server-5.1
|
15
|
+
Flags: seen
|
16
|
+
|
17
|
+
Name: mysql-server/root_password_again
|
18
|
+
Template: mysql-server/root_password_again
|
19
|
+
Value:
|
20
|
+
Owners: mysql-server-5.1
|
21
|
+
Flags: seen
|
22
|
+
|
23
|
+
Name: mysql-server/root_password
|
24
|
+
Template: mysql-server/root_password
|
25
|
+
Value:
|
26
|
+
Owners: mysql-server-5.0
|
27
|
+
Flags: seen
|
28
|
+
|
29
|
+
Name: mysql-server/root_password_again
|
30
|
+
Template: mysql-server/root_password_again
|
31
|
+
Value:
|
32
|
+
Owners: mysql-server-5.0
|
33
|
+
Flags: seen
|
34
|
+
}, "non-interactive.txt"
|
35
|
+
sudo "DEBIAN_FRONTEND=noninteractive DEBCONF_DB_FALLBACK=Pipe apt-get -qq -y install mysql-server < non-interactive.txt"
|
36
|
+
rescue
|
37
|
+
raise
|
38
|
+
ensure
|
39
|
+
sudo "rm non-interactive.txt"
|
40
|
+
end
|
41
|
+
|
42
|
+
run "#{sudo} apt-get -y install libmysql-ruby libmysqlclient-dev"
|
43
|
+
end
|
44
|
+
after "deploy:install", "database:install"
|
45
|
+
|
46
|
+
desc "Create a database for the app if not exists"
|
47
|
+
task :create_database, roles: :db, only: {primary: true} do
|
48
|
+
run "#{sudo} mysql -u #{database_user} -h #{database_host} -e 'CREATE DATABASE IF NOT EXISTS #{database_database} '"
|
49
|
+
end
|
50
|
+
after "deploy:setup", "database:create_database"
|
51
|
+
|
52
|
+
desc "Generate the database.yml config"
|
53
|
+
task :setup, roles: :app do
|
54
|
+
run "mkdir -p #{shared_path}/config"
|
55
|
+
template "database.yml.erb", "#{shared_path}/config/database.yml"
|
56
|
+
end
|
57
|
+
after "deploy:setup", "database:setup"
|
58
|
+
|
59
|
+
desc "Symlink shared files and folders"
|
60
|
+
task :symlink, roles: :app do
|
61
|
+
run "ln -nfs #{shared_path}/config/database.yml #{release_path}/config/database.yml"
|
62
|
+
run "rm -Rf #{release_path}/public/uploads"
|
63
|
+
run "ln -s #{shared_path}/uploads #{release_path}/public/uploads"
|
64
|
+
end
|
65
|
+
after "deploy:finalize_update", "database:symlink"
|
66
|
+
end
|
@@ -0,0 +1,10 @@
|
|
1
|
+
namespace :memcached do
|
2
|
+
desc "Install memcached"
|
3
|
+
task :install, roles: :app do
|
4
|
+
run "#{sudo} apt-get -y install memcached"
|
5
|
+
template "memcached.erb", "/tmp/memcached_conf"
|
6
|
+
run "#{sudo} mv /tmp/memcached_conf /etc/memcached.conf"
|
7
|
+
run "#{sudo} service memcached restart"
|
8
|
+
end
|
9
|
+
after "deploy:install", "memcached:install"
|
10
|
+
end
|
@@ -0,0 +1,35 @@
|
|
1
|
+
namespace :monit do
|
2
|
+
desc "Install Monit"
|
3
|
+
task :install do
|
4
|
+
run "#{sudo} apt-get -y install monit"
|
5
|
+
end
|
6
|
+
after "deploy:install", "monit:install"
|
7
|
+
|
8
|
+
desc "Setup all Monit configuration"
|
9
|
+
task :setup do
|
10
|
+
monit_config "monitrc", "/etc/monit/monitrc"
|
11
|
+
nginx
|
12
|
+
unicorn
|
13
|
+
syntax
|
14
|
+
restart
|
15
|
+
end
|
16
|
+
after "deploy:setup", "monit:setup"
|
17
|
+
|
18
|
+
task(:nginx, roles: :web) { monit_config "nginx" }
|
19
|
+
task(:unicorn, roles: :app) { monit_config "unicorn" }
|
20
|
+
|
21
|
+
%w[start stop restart syntax reload].each do |command|
|
22
|
+
desc "Run Monit #{command} script"
|
23
|
+
task command do
|
24
|
+
run "#{sudo} service monit #{command}"
|
25
|
+
end
|
26
|
+
end
|
27
|
+
end
|
28
|
+
|
29
|
+
def monit_config(name, destination = nil)
|
30
|
+
destination ||= "/etc/monit/conf.d/#{name}.conf"
|
31
|
+
template "monit_#{name}.erb", "/tmp/monit_#{name}"
|
32
|
+
run "#{sudo} mv /tmp/monit_#{name} #{destination}"
|
33
|
+
run "#{sudo} chown root #{destination}"
|
34
|
+
run "#{sudo} chmod 600 #{destination}"
|
35
|
+
end
|
@@ -0,0 +1,26 @@
|
|
1
|
+
namespace :nginx do
|
2
|
+
desc "Install Ngnix"
|
3
|
+
task :install, roles: :web do
|
4
|
+
run "#{sudo} sh -c 'echo \"deb http://ppa.launchpad.net/nginx/stable/ubuntu lucid main\" > /etc/apt/sources.list.d/nginx-stable-lucid.list'"
|
5
|
+
run "#{sudo} apt-key adv --keyserver keyserver.ubuntu.com --recv-keys C300EE8C"
|
6
|
+
run "#{sudo} apt-get -y update"
|
7
|
+
run "#{sudo} apt-get -y install nginx"
|
8
|
+
end
|
9
|
+
after "deploy:install", "nginx:install"
|
10
|
+
|
11
|
+
desc "Setup Nginx"
|
12
|
+
task :setup, roles: :web do
|
13
|
+
template "nginx_unicorn.erb", "/tmp/nginx_conf"
|
14
|
+
run "#{sudo} mv /tmp/nginx_conf /etc/nginx/sites-enabled/#{application}"
|
15
|
+
run "#{sudo} rm -f /etc/nginx/sites-enabled/default"
|
16
|
+
restart
|
17
|
+
end
|
18
|
+
after "deploy:setup", "nginx:setup"
|
19
|
+
|
20
|
+
%w[start stop restart].each do |command|
|
21
|
+
desc "#{command} nginx"
|
22
|
+
task command, roles: :web do
|
23
|
+
run "#{sudo} service nginx #{command}"
|
24
|
+
end
|
25
|
+
end
|
26
|
+
end
|
@@ -0,0 +1,10 @@
|
|
1
|
+
namespace :nodejs do
|
2
|
+
desc "Install Node.js"
|
3
|
+
task :install, roles: :app do
|
4
|
+
run "#{sudo} sh -c 'echo \"deb http://ppa.launchpad.net/chris-lea/node.js/ubuntu lucid main\" > /etc/apt/sources.list.d/chris-lea-node.js-lucid.list'"
|
5
|
+
run "#{sudo} apt-key adv --keyserver keyserver.ubuntu.com --recv-keys C300EE8C"
|
6
|
+
run "#{sudo} apt-get -y update"
|
7
|
+
run "#{sudo} apt-get -y --force-yes install nodejs"
|
8
|
+
end
|
9
|
+
after "deploy:install", "nodejs:install"
|
10
|
+
end
|
@@ -0,0 +1,37 @@
|
|
1
|
+
namespace :postfix do
|
2
|
+
def put_sudo(data, to)
|
3
|
+
filename = File.basename(to)
|
4
|
+
to_directory = File.dirname(to)
|
5
|
+
put data, "/tmp/#{filename}"
|
6
|
+
run "#{sudo} mv /tmp/#{filename} #{to_directory}"
|
7
|
+
end
|
8
|
+
|
9
|
+
def template_sudo(from, to)
|
10
|
+
erb = File.read(File.expand_path("../templates/#{from}", __FILE__))
|
11
|
+
put_sudo ERB.new(erb).result(binding), to
|
12
|
+
end
|
13
|
+
|
14
|
+
desc "Install latest stable release of postfix"
|
15
|
+
task :install, roles: :web do
|
16
|
+
run "#{sudo} DEBIAN_FRONTEND=noninteractive apt-get -y install postfix"
|
17
|
+
run "#{sudo} apt-get install -y dkim-filter"
|
18
|
+
run "#{sudo} mkdir -p /etc/postfix/dkim"
|
19
|
+
run "#{sudo} dkim-genkey -d #{fqdn} -s mail -r -D /etc/postfix/dkim/"
|
20
|
+
run "#{sudo} mv /etc/postfix/dkim/mail.private /etc/postfix/dkim/mail"
|
21
|
+
template_sudo "dkim-keys.conf.erb", "/etc/dkim-keys.conf"
|
22
|
+
template_sudo "dkim-filter.defaults.erb", "/etc/default/dkim-filter"
|
23
|
+
run "#{sudo} chgrp postfix /etc/postfix/dkim/"
|
24
|
+
run "#{sudo} chmod 750 /etc/postfix/dkim/"
|
25
|
+
template_sudo "main.cf.erb", "/etc/postfix/main.cf"
|
26
|
+
template_sudo "dkim-filter.conf.erb", "/etc/dkim-filter.conf"
|
27
|
+
restart
|
28
|
+
end
|
29
|
+
after "deploy:install", "postfix:install"
|
30
|
+
|
31
|
+
%w[start stop restart].each do |command|
|
32
|
+
desc "#{command} postfix"
|
33
|
+
task command, roles: :web do
|
34
|
+
run "#{sudo} service postfix #{command} && #{sudo} service dkim-filter #{command}"
|
35
|
+
end
|
36
|
+
end
|
37
|
+
end
|
@@ -0,0 +1,17 @@
|
|
1
|
+
set_default :ruby_version, "1.9.3-p194"
|
2
|
+
|
3
|
+
namespace :rbenv do
|
4
|
+
desc "Install rbenv, Ruby, and the Bundler gem"
|
5
|
+
task :install, roles: :app do
|
6
|
+
run "sudo apt-get -y install curl git-core"
|
7
|
+
run "curl -L https://raw.github.com/fesplugas/rbenv-installer/master/bin/rbenv-installer | bash"
|
8
|
+
run "echo 'export PATH=\"$HOME/.rbenv/bin:$PATH\"' > ~/.bashrc"
|
9
|
+
run "echo 'eval \"$(rbenv init -)\"' >> ~/.bashrc"
|
10
|
+
run "rbenv install #{ruby_version}"
|
11
|
+
run "rbenv global #{ruby_version}"
|
12
|
+
run "gem install bundler --no-ri --no-rdoc"
|
13
|
+
run "rbenv rehash"
|
14
|
+
template "gemrc.erb", "/home/webmaster/.gemrc"
|
15
|
+
end
|
16
|
+
after "deploy:install", "rbenv:install"
|
17
|
+
end
|
@@ -0,0 +1,57 @@
|
|
1
|
+
# Log to syslog
|
2
|
+
Syslog yes
|
3
|
+
# Required to use local socket with MTAs that access the socket as a non-
|
4
|
+
# privileged user (e.g. Postfix)
|
5
|
+
UMask 002
|
6
|
+
|
7
|
+
# Sign for example.com with key in /etc/mail/dkim.key using
|
8
|
+
# selector '2007' (e.g. 2007._domainkey.example.com)
|
9
|
+
#Domain example.com
|
10
|
+
#KeyFile /etc/mail/dkim.key
|
11
|
+
#Selector 2007
|
12
|
+
|
13
|
+
# Common settings. See dkim-filter.conf(5) for more information.
|
14
|
+
#AutoRestart no
|
15
|
+
#Background yes
|
16
|
+
#Canonicalization simple
|
17
|
+
#DNSTimeout 5
|
18
|
+
#Mode sv
|
19
|
+
#SignatureAlgorithm rsa-sha256
|
20
|
+
#SubDomains no
|
21
|
+
#ADSPDiscard no
|
22
|
+
#Version rfc4871
|
23
|
+
#X-Header no
|
24
|
+
|
25
|
+
###############################################
|
26
|
+
# Other (less-standard) configuration options #
|
27
|
+
###############################################
|
28
|
+
#
|
29
|
+
# If enabled, log verification stats here
|
30
|
+
#Statistics /var/run/dkim-filter/dkim-stats
|
31
|
+
#
|
32
|
+
# KeyList is a file containing tuples of key information. Requires
|
33
|
+
# KeyFile to be unset. Each line of the file should be of the format:
|
34
|
+
# sender glob:signing domain:signing key file
|
35
|
+
# Blank lines and lines beginning with # are ignored. Selector will be
|
36
|
+
# derived from the key's filename.
|
37
|
+
#KeyList /etc/dkim-keys.conf
|
38
|
+
#
|
39
|
+
# If enabled, will generate verification failure reports for any messages
|
40
|
+
# that fail signature verification. These will be sent to the r= address
|
41
|
+
# in the policy record, if any.
|
42
|
+
#SendReports yes
|
43
|
+
#
|
44
|
+
# If enabled, will issue a Sendmail QUARANTINE for any messages that fail
|
45
|
+
# signature verification, allowing them to be inspected later.
|
46
|
+
#Quarantine yes
|
47
|
+
#
|
48
|
+
# If enabled, will check for required headers when processing messages.
|
49
|
+
# At a minimum, that means From: and Date: will be required. Messages not
|
50
|
+
# containing the required headers will not be signed or verified, but will
|
51
|
+
# be passed through
|
52
|
+
#RequiredHeaders yes
|
53
|
+
Canonicalization relaxed/relaxed
|
54
|
+
KeyList /etc/dkim-keys.conf
|
55
|
+
Domain *
|
56
|
+
BodyLengths yes
|
57
|
+
#On-DNSError accept
|
@@ -0,0 +1,11 @@
|
|
1
|
+
# Command-line options specified here will override the contents of
|
2
|
+
# /etc/dkim-filter.conf. See dkim-filter(8) for a complete list of options.
|
3
|
+
#DAEMON_OPTS=""
|
4
|
+
#
|
5
|
+
# Uncomment to specify an alternate socket
|
6
|
+
# Note that setting this will override any Socket value in dkim-filter.conf
|
7
|
+
#SOCKET="local:/var/run/dkim-filter/dkim-filter.sock" # default
|
8
|
+
#SOCKET="inet:54321" # listen on all interfaces on port 54321
|
9
|
+
#SOCKET="inet:12345@localhost" # listen on loopback on port 12345
|
10
|
+
#SOCKET="inet:12345@192.0.2.1" # listen on 192.0.2.1 on port 12345
|
11
|
+
SOCKET="inet:8891@localhost"
|
@@ -0,0 +1 @@
|
|
1
|
+
gem: --no-ri --no-rdoc
|
@@ -0,0 +1,43 @@
|
|
1
|
+
# See /usr/share/postfix/main.cf.dist for a commented, more complete version
|
2
|
+
|
3
|
+
|
4
|
+
# Debian specific: Specifying a file name will cause the first
|
5
|
+
# line of that file to be used as the name. The Debian default
|
6
|
+
# is /etc/mailname.
|
7
|
+
#myorigin = /etc/mailname
|
8
|
+
|
9
|
+
smtpd_banner = $myhostname ESMTP $mail_name (Debian/GNU)
|
10
|
+
biff = no
|
11
|
+
|
12
|
+
# appending .domain is the MUA's job.
|
13
|
+
append_dot_mydomain = no
|
14
|
+
|
15
|
+
# Uncomment the next line to generate "delayed mail" warnings
|
16
|
+
#delay_warning_time = 4h
|
17
|
+
|
18
|
+
readme_directory = no
|
19
|
+
|
20
|
+
# TLS parameters
|
21
|
+
smtpd_tls_cert_file=/etc/ssl/certs/ssl-cert-snakeoil.pem
|
22
|
+
smtpd_tls_key_file=/etc/ssl/private/ssl-cert-snakeoil.key
|
23
|
+
smtpd_use_tls=yes
|
24
|
+
smtpd_tls_session_cache_database = btree:${data_directory}/smtpd_scache
|
25
|
+
smtp_tls_session_cache_database = btree:${data_directory}/smtp_scache
|
26
|
+
|
27
|
+
# See /usr/share/doc/postfix/TLS_README.gz in the postfix-doc package for
|
28
|
+
# information on enabling SSL in the smtp client.
|
29
|
+
|
30
|
+
myhostname = <%= fqdn %>
|
31
|
+
alias_maps = hash:/etc/aliases
|
32
|
+
alias_database = hash:/etc/aliases
|
33
|
+
myorigin = /etc/mailname
|
34
|
+
mydestination = localhost.localdomain, localhost
|
35
|
+
relayhost =
|
36
|
+
mynetworks = 127.0.0.0/8 [::ffff:127.0.0.0]/104 [::1]/128
|
37
|
+
mailbox_size_limit = 0
|
38
|
+
recipient_delimiter = +
|
39
|
+
inet_interfaces = all
|
40
|
+
milter_default_action = accept
|
41
|
+
milter_protocol = 2
|
42
|
+
smtpd_milters = inet:localhost:8891
|
43
|
+
non_smtpd_milters = inet:localhost:8891
|
@@ -0,0 +1,47 @@
|
|
1
|
+
# memcached default config file
|
2
|
+
# 2003 - Jay Bonci <jaybonci@debian.org>
|
3
|
+
# This configuration file is read by the start-memcached script provided as
|
4
|
+
# part of the Debian GNU/Linux distribution.
|
5
|
+
|
6
|
+
# Run memcached as a daemon. This command is implied, and is not needed for the
|
7
|
+
# daemon to run. See the README.Debian that comes with this package for more
|
8
|
+
# information.
|
9
|
+
-d
|
10
|
+
|
11
|
+
# Log memcached's output to /var/log/memcached
|
12
|
+
logfile /var/log/memcached.log
|
13
|
+
|
14
|
+
# Be verbose
|
15
|
+
# -v
|
16
|
+
|
17
|
+
# Be even more verbose (print client commands as well)
|
18
|
+
# -vv
|
19
|
+
|
20
|
+
# Start with a cap of 64 megs of memory. It's reasonable, and the daemon default
|
21
|
+
# Note that the daemon will grow to this size, but does not start out holding this much
|
22
|
+
# memory
|
23
|
+
-m 64
|
24
|
+
|
25
|
+
# Default connection port is 11211
|
26
|
+
-p 11211
|
27
|
+
|
28
|
+
# Run the daemon as root. The start-memcached will default to running as root if no
|
29
|
+
# -u command is present in this config file
|
30
|
+
-u nobody
|
31
|
+
|
32
|
+
# Specify which IP address to listen on. The default is to listen on all IP addresses
|
33
|
+
# This parameter is one of the only security measures that memcached has, so make sure
|
34
|
+
# it's listening on a firewalled interface.
|
35
|
+
-l 127.0.0.1
|
36
|
+
|
37
|
+
# Limit the number of simultaneous incoming connections. The daemon default is 1024
|
38
|
+
# -c 1024
|
39
|
+
|
40
|
+
# Lock down all paged memory. Consult with the README and homepage before you do this
|
41
|
+
# -k
|
42
|
+
|
43
|
+
# Return error when memory is exhausted (rather than removing items)
|
44
|
+
# -M
|
45
|
+
|
46
|
+
# Maximize core file limit
|
47
|
+
# -r
|
@@ -0,0 +1,21 @@
|
|
1
|
+
set daemon 30
|
2
|
+
|
3
|
+
set logfile /var/log/monit.log
|
4
|
+
set idfile /var/lib/monit/id
|
5
|
+
set statefile /var/lib/monit/state
|
6
|
+
|
7
|
+
set eventqueue
|
8
|
+
basedir /var/lib/monit/events
|
9
|
+
slots 100
|
10
|
+
|
11
|
+
# set mailserver smtp.gmail.com port 587
|
12
|
+
# username "foo@example.com" password "secret"
|
13
|
+
# using tlsv1
|
14
|
+
# with timeout 30 seconds
|
15
|
+
|
16
|
+
check system <%= application %>
|
17
|
+
if loadavg(5min) > 2 for 2 cycles then alert
|
18
|
+
if memory > 75% for 2 cycles then alert
|
19
|
+
if cpu(user) > 75% for 2 cycles then alert
|
20
|
+
|
21
|
+
include /etc/monit/conf.d/*
|