capistrano-simple-nginx 0.0.1

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.
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: a9ac6aadc4c603895f54113c81c07eda319dfa84
4
+ data.tar.gz: 05f828e9a45cadd79f04651acb3d459803eef407
5
+ SHA512:
6
+ metadata.gz: 87f3c6256b086415f50c9467b6f3bc4354a9ad22f3c02c743d6c7b155f36f083be45a78c0e356b97ab0f511c65784a26011f91e03348125eb7d09e63dc266b81
7
+ data.tar.gz: b2c42cc8a15850231e5f067d8c5434d344cd01c93bcb23b982648de2bbc3daf1f2ae358ad0ac84711d0f995b30abef0da28ba88ee3f7fe024748bd58e8342e4c
data/Gemfile ADDED
@@ -0,0 +1,4 @@
1
+ source 'https://rubygems.org'
2
+
3
+ # Specify your gem's dependencies in *.gemspec
4
+ gemspec
@@ -0,0 +1,59 @@
1
+ # Capistrano::SimpleNginx
2
+ Support for Capistrano 3.x
3
+
4
+ ## Installlation
5
+
6
+ Add this line to your application's `Gemfile`:
7
+ ```
8
+ gem 'capistrano'
9
+ gem 'capistrano-simple-nginx', '~> 0.0.1'
10
+ ```
11
+
12
+ And then run:
13
+ ```
14
+ $ bundle
15
+ ```
16
+ Or install it yourself as:
17
+ ```
18
+ $ gem install capistrano-simple-nginx
19
+ ```
20
+
21
+ ## Usage
22
+
23
+ Require in `Capfile`:
24
+ ```
25
+ require 'capistrano/simple-nginx'
26
+ ```
27
+
28
+ * Generate file config nginx, run:
29
+ ```
30
+ $ cap production nginx:setup
31
+ ```
32
+
33
+ * start|stop|restart nginx, run:
34
+ ```
35
+ $ cap production nginx:start
36
+ $ cap production nginx:stop
37
+ $ cap production nginx:restart
38
+ ```
39
+
40
+ You need add directory to sock file of app. Example using unicorn for app:
41
+ ```
42
+ # in config/deploy.rb
43
+ set :nginx_upstream_file, "/tmp/unicorn.sock"
44
+ ```
45
+
46
+ ## Default config
47
+
48
+ ```
49
+ set :nginx_listen_port, 80 #listen_port
50
+ set :nginx_server_name, "_" #server_name
51
+ set :nginx_upstream_name, -> { "#{fetch(:application)}" } # upstream name
52
+ set :nginx_config_name, -> { "#{fetch(:application)}_#{fetch(:stage)}" } #file name config
53
+ set :nginx_fail_timeout, 0
54
+ set :nginx_access_log_file, -> { "/var/log/nginx/#{fetch(:nginx_config_name)}.access.log" } # access log file
55
+ set :nginx_error_log_file, -> { "/var/log/nginx/#{fetch(:nginx_config_name)}.error.log" } # error log file
56
+ set :nginx_upstream_file, -> { "/tmp/#{fetch(:application)}.sock" } # .sock file path
57
+ ```
58
+
59
+
@@ -0,0 +1 @@
1
+ require "bundler/gem_tasks"
@@ -0,0 +1,26 @@
1
+ # -*- encoding: utf-8 -*-
2
+
3
+ lib = File.expand_path("../lib", __FILE__)
4
+ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
5
+
6
+ Gem::Specification.new do |s|
7
+ s.name = "capistrano-simple-nginx"
8
+ s.version = "0.0.1"
9
+ s.date = "2018-07-23"
10
+ s.summary = "Capistrano tasks for automatic nginx configuration"
11
+ s.description = <<-EOF.gsub(/^\s+/, '')
12
+ Capistrano tasks for automatic nginx configuration
13
+ Work *only* with Capistrano 3+
14
+ EOF
15
+ s.authors = ["truongkma"]
16
+ s.email = "nd.truong1902@gmail.com"
17
+ s.files = `git ls-files`.split("\n")
18
+ s.require_paths = ["lib"]
19
+ s.homepage = "https://github.com/truongkma/capistrano-simple-nginx"
20
+ s.license = "MIT"
21
+
22
+ s.add_runtime_dependency "capistrano", "~> 3.1"
23
+ s.add_runtime_dependency "sshkit", "~> 1.2"
24
+
25
+ s.add_development_dependency "rake", "~> 0"
26
+ end
File without changes
@@ -0,0 +1 @@
1
+ load File.expand_path("../tasks/nginx.rake", __FILE__)
@@ -0,0 +1,44 @@
1
+ require 'erb'
2
+
3
+ module Capistrano
4
+ module SimpleNginx
5
+ module Helpers
6
+ def template template_name
7
+ StringIO.new(template_to_s(template_name))
8
+ end
9
+
10
+ def template_to_s template_name
11
+ config_file = File.join(File.dirname(__FILE__), "../../templates/#{template_name}")
12
+ ERB.new(File.read(config_file), nil, '-').result(binding)
13
+ end
14
+
15
+ def sudo_upload! from, to
16
+ filename = File.basename(to)
17
+ to_dir = File.dirname(to)
18
+ tmp_file = "/tmp/#{filename}"
19
+ upload! from, tmp_file
20
+ sudo :mv, tmp_file, to_dir
21
+ end
22
+
23
+ def file_exists? path
24
+ test "[ -e #{path} ]"
25
+ end
26
+
27
+ def deploy_user
28
+ capture :id, '-un'
29
+ end
30
+
31
+ def os_is_ubuntu?
32
+ capture(:cat, "/etc/*-release").include? "ubuntu"
33
+ end
34
+
35
+ def nginx_config_file
36
+ if os_is_ubuntu?
37
+ "/etc/nginx/sites-available/#{fetch(:nginx_config_name)}.conf"
38
+ else
39
+ "/etc/nginx/conf.d/#{fetch(:nginx_config_name)}.conf"
40
+ end
41
+ end
42
+ end
43
+ end
44
+ end
@@ -0,0 +1,35 @@
1
+ require 'capistrano/simple_nginx/helpers'
2
+ include Capistrano::SimpleNginx::Helpers
3
+
4
+ namespace :load do
5
+ task :defaults do
6
+ set :nginx_listen_port, 80
7
+ set :nginx_server_name, "_"
8
+ set :nginx_upstream_name, -> { "#{fetch(:application)}" }
9
+ set :nginx_config_name, -> { "#{fetch(:application)}_#{fetch(:stage)}" }
10
+ set :nginx_fail_timeout, 0
11
+ set :nginx_access_log_file, -> { "/var/log/nginx/#{fetch(:nginx_config_name)}.access.log" }
12
+ set :nginx_error_log_file, -> { "/var/log/nginx/#{fetch(:nginx_config_name)}.error.log" }
13
+ set :nginx_upstream_file, -> { "/tmp/#{fetch(:application)}.sock" }
14
+ end
15
+ end
16
+
17
+ namespace :nginx do
18
+ desc 'Setup nginx configuration'
19
+ task :setup do
20
+ on roles :web do
21
+ unless file_exists?(nginx_config_file)
22
+ sudo_upload! template('nginx_conf.erb'), nginx_config_file
23
+ end
24
+ end
25
+ end
26
+
27
+ %w[stop start restart reload].each do |action|
28
+ desc "#{action} nginx"
29
+ task action do
30
+ on roles :web do
31
+ sudo :service, "nginx", action
32
+ end
33
+ end
34
+ end
35
+ end
@@ -0,0 +1,57 @@
1
+ upstream <%= fetch(:nginx_upstream_name) %> {
2
+ server unix:<%= fetch(:nginx_upstream_file) %> fail_timeout=<%= fetch(:nginx_fail_timeout) %>;
3
+ }
4
+
5
+ server {
6
+ server_tokens off;
7
+ add_header X-Content-Type-Options nosniff;
8
+ client_max_body_size 4G;
9
+ keepalive_timeout 10;
10
+
11
+ error_page 500 502 504 /500.html;
12
+ error_page 503 @503;
13
+
14
+ server_name <%= fetch(:nginx_server_name) %>;
15
+ root <%= current_path %>/public;
16
+ try_files $uri/index.html $uri @<%= fetch(:nginx_upstream_name) %>;
17
+
18
+ location @<%= fetch(:nginx_upstream_name) %> {
19
+ proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
20
+ proxy_set_header Host $http_host;
21
+ proxy_redirect off;
22
+ proxy_pass http://<%= fetch(:nginx_upstream_name) %>;
23
+
24
+ access_log <%= fetch(:nginx_access_log_file) %>;
25
+ error_log <%= fetch(:nginx_error_log_file) %>;
26
+ }
27
+
28
+ location ^~ /assets/ {
29
+ gzip_static on;
30
+ expires max;
31
+ add_header Cache-Control public;
32
+ }
33
+
34
+ location = /50x.html {
35
+ root html;
36
+ }
37
+
38
+ location = /404.html {
39
+ root html;
40
+ }
41
+
42
+ location @503 {
43
+ error_page 405 = /system/maintenance.html;
44
+ if (-f $document_root/system/maintenance.html) {
45
+ rewrite ^(.*)$ /system/maintenance.html break;
46
+ }
47
+ rewrite ^(.*)$ /503.html break;
48
+ }
49
+
50
+ if ($request_method !~ ^(GET|HEAD|PUT|PATCH|POST|DELETE|OPTIONS)$ ){
51
+ return 405;
52
+ }
53
+
54
+ if (-f $document_root/system/maintenance.html) {
55
+ return 503;
56
+ }
57
+ }
metadata ADDED
@@ -0,0 +1,96 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: capistrano-simple-nginx
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.1
5
+ platform: ruby
6
+ authors:
7
+ - truongkma
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2018-07-23 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: capistrano
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - "~>"
18
+ - !ruby/object:Gem::Version
19
+ version: '3.1'
20
+ type: :runtime
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - "~>"
25
+ - !ruby/object:Gem::Version
26
+ version: '3.1'
27
+ - !ruby/object:Gem::Dependency
28
+ name: sshkit
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - "~>"
32
+ - !ruby/object:Gem::Version
33
+ version: '1.2'
34
+ type: :runtime
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - "~>"
39
+ - !ruby/object:Gem::Version
40
+ version: '1.2'
41
+ - !ruby/object:Gem::Dependency
42
+ name: rake
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - "~>"
46
+ - !ruby/object:Gem::Version
47
+ version: '0'
48
+ type: :development
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - "~>"
53
+ - !ruby/object:Gem::Version
54
+ version: '0'
55
+ description: |
56
+ Capistrano tasks for automatic nginx configuration
57
+ Work *only* with Capistrano 3+
58
+ email: nd.truong1902@gmail.com
59
+ executables: []
60
+ extensions: []
61
+ extra_rdoc_files: []
62
+ files:
63
+ - Gemfile
64
+ - README.md
65
+ - Rakefile
66
+ - capistrano-simple-nginx.gemspec
67
+ - lib/capistrano-simple-nginx.rb
68
+ - lib/capistrano/simple_nginx.rb
69
+ - lib/capistrano/simple_nginx/helpers.rb
70
+ - lib/capistrano/tasks/nginx.rake
71
+ - lib/templates/nginx_conf.erb
72
+ homepage: https://github.com/truongkma/capistrano-simple-nginx
73
+ licenses:
74
+ - MIT
75
+ metadata: {}
76
+ post_install_message:
77
+ rdoc_options: []
78
+ require_paths:
79
+ - lib
80
+ required_ruby_version: !ruby/object:Gem::Requirement
81
+ requirements:
82
+ - - ">="
83
+ - !ruby/object:Gem::Version
84
+ version: '0'
85
+ required_rubygems_version: !ruby/object:Gem::Requirement
86
+ requirements:
87
+ - - ">="
88
+ - !ruby/object:Gem::Version
89
+ version: '0'
90
+ requirements: []
91
+ rubyforge_project:
92
+ rubygems_version: 2.6.14
93
+ signing_key:
94
+ specification_version: 4
95
+ summary: Capistrano tasks for automatic nginx configuration
96
+ test_files: []