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.
- checksums.yaml +7 -0
- data/Gemfile +4 -0
- data/README.md +59 -0
- data/Rakefile +1 -0
- data/capistrano-simple-nginx.gemspec +26 -0
- data/lib/capistrano-simple-nginx.rb +0 -0
- data/lib/capistrano/simple_nginx.rb +1 -0
- data/lib/capistrano/simple_nginx/helpers.rb +44 -0
- data/lib/capistrano/tasks/nginx.rake +35 -0
- data/lib/templates/nginx_conf.erb +57 -0
- metadata +96 -0
checksums.yaml
ADDED
@@ -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
data/README.md
ADDED
@@ -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
|
+
|
data/Rakefile
ADDED
@@ -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: []
|