chrislloyd-nginx-config 0.9.1

Sign up to get free protection for your applications and to get access to all the features.
data/LICENSE ADDED
@@ -0,0 +1,18 @@
1
+ Copyright (c) 2008 Chris Lloyd
2
+
3
+ Permission is hereby granted, free of charge, to any person obtaining a copy of
4
+ this software and associated documentation files (the "Software"), to deal in
5
+ the Software without restriction, including without limitation the rights to
6
+ use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
7
+ the Software, and to permit persons to whom the Software is furnished to do so,
8
+ subject to the following conditions:
9
+
10
+ The above copyright notice and this permission notice shall be included in all
11
+ copies or substantial portions of the Software.
12
+
13
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
14
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
15
+ FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
16
+ COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
17
+ IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
18
+ CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
@@ -0,0 +1,11 @@
1
+ LICENSE
2
+ Manifest
3
+ nginx-config.gemspec
4
+ Rakefile
5
+ README
6
+ bin/nginx-config
7
+ lib/nginx_config.rb
8
+ templates/dot.nginx-config.erb
9
+ templates/nginx.conf.erb
10
+ templates/nginx.init.sh
11
+ templates/site.yml.erb
data/README ADDED
@@ -0,0 +1,15 @@
1
+ Easily generate and maintain a complex nginx config file.
2
+
3
+ h2. Usage
4
+
5
+ # nginx-conf setup
6
+
7
+ # nginx-conf add /var/www/myblog
8
+
9
+ # /etc/init.d/nginx reload
10
+
11
+ Thats it! No generation. You can check in your config file to a SCM. When you make a change just ask nginx to reload the configuration.
12
+
13
+ h2. Thanks
14
+
15
+ * "Chris Wanstrath":http://ozmm.org (for creating the original nginx_config_generator)
@@ -0,0 +1,5 @@
1
+ task :default => :install
2
+
3
+ desc "install the gem locally"
4
+ task :install do
5
+ end
@@ -0,0 +1,4 @@
1
+ #! /usr/bin/env ruby
2
+ load File.join( File.dirname(__FILE__), '/../lib/nginx_config.rb')
3
+
4
+ Nginx::Runner.start
@@ -0,0 +1,115 @@
1
+ require 'rubygems'
2
+ require 'thor'
3
+ require 'ostruct'
4
+ require 'erb'
5
+
6
+ module Nginx
7
+
8
+ class Runner < Thor
9
+
10
+ desc 'setup', 'setup the system for using nginx-config'
11
+ method_options :force => :boolean
12
+ def setup(opts)
13
+ unless system_config_exists? && !opts['force']
14
+ # TODO Refactor this to a new method
15
+ `cp #{Nginx::Template['dot.nginx-config']} ~/.nginx-config`
16
+ end
17
+ end
18
+
19
+ desc 'add DIR', 'adds a directory to Nginx'
20
+ method_options :force => :boolean
21
+ def add(dir,opts)
22
+
23
+ if File.directory?(dir)
24
+ dir = File.expand_path(dir)
25
+
26
+ setup(opts)
27
+ site_name = File.basename( dir )
28
+
29
+ `mkdir #{dir}/config` unless File.directory?(dir+'/config')
30
+
31
+ if !File.exists?(dir+'/config/nginx.yml') || opts['force']
32
+ open(dir + '/config/nginx.yml', 'w+').write(ERB.new(File.read(Nginx::Template['site.yml']), nil, '>').result(binding))
33
+
34
+
35
+ # add site to system wide config.
36
+
37
+
38
+ end
39
+
40
+ end
41
+ end
42
+
43
+ map 'gen' => :generate
44
+ desc 'gen', 'generates the nginx.conf file'
45
+ def generate(opts)
46
+ end
47
+
48
+ private
49
+
50
+ def system_config_exists?
51
+ File.exists?(File.expand_path('~/.nginx-config'))
52
+ end
53
+
54
+ end
55
+
56
+ class Template
57
+ def self.[](filename)
58
+ File.expand_path( File.join(File.dirname(__FILE__), '../templates/'+filename.to_s + '.erb') )
59
+ end
60
+ end
61
+
62
+ class Config
63
+ def self.new(hash)
64
+ OpenStruct.new(hash.inject({}){|r,p| r[p[0]] = p[1].kind_of?(Hash) ? NestedOstruct.new(p[1]) : p[1]; r })
65
+ end
66
+ end
67
+
68
+ end
69
+
70
+ # #! /usr/bin/env ruby
71
+ # require 'yaml'
72
+ # require 'erb'
73
+ #
74
+ # def defaults
75
+ #
76
+ # end
77
+ #
78
+ # def error(message)
79
+ # puts(message) || exit
80
+ # end
81
+ #
82
+ # def file(file)
83
+ # "#{File.dirname(__FILE__)}/#{file}"
84
+ # end
85
+ #
86
+ # if ARGV.include? '--example'
87
+ # example = file:'config.yml.example'
88
+ # error open(example).read
89
+ # end
90
+ #
91
+ # env_in = ENV['NGINX_CONFIG_YAML']
92
+ # env_out = ENV['NGINX_CONFIG_FILE']
93
+ #
94
+ # error "Usage: generate_nginx_config [config file] [out file]" if ARGV.empty? && !env_in
95
+ #
96
+ # overwrite = %w(-y -o -f --force --overwrite).any? { |f| ARGV.delete(f) }
97
+ #
98
+ # config = YAML.load(ERB.new(File.read(env_in || ARGV.shift || 'config.yml')).result)
99
+ # template = if custom_template_index = (ARGV.index('--template') || ARGV.index('-t'))
100
+ # custom = ARGV[custom_template_index+1]
101
+ # error "=> Specified template file #{custom} does not exist." unless File.exist?(custom)
102
+ # ARGV.delete_at(custom_template_index) # delete the --argument
103
+ # ARGV.delete_at(custom_template_index) # and its value
104
+ # custom
105
+ # else
106
+ # file:'nginx.debian.erb'
107
+ # end
108
+ #
109
+ # if File.exists?(out_file = env_out || ARGV.shift || 'nginx.conf') && !overwrite
110
+ # error "=> #{out_file} already exists, won't overwrite it. Quitting."
111
+ # else
112
+ # open(out_file, 'w+').write(ERB.new(File.read(template), nil, '>').result(binding))
113
+ # error "=> Wrote #{out_file} successfully."
114
+ # end
115
+
@@ -0,0 +1,20 @@
1
+ Gem::Specification.new do |s|
2
+ s.name = "nginx-config"
3
+ s.version = "0.9.1"
4
+ s.date = "2008-06-02"
5
+
6
+ s.homepage = "http://github.com/chrislloyd/nginx_config"
7
+
8
+ s.summary = "Easily generate and maintain a complex nginx config file."
9
+ s.description = "Easily generate and maintain a complex nginx config file."
10
+ s.authors = ["Chris Lloyd"]
11
+ s.email = "christopher.lloyd@gmail.com"
12
+ s.has_rdoc = true
13
+
14
+ s.files = ['LICENSE', 'Manifest', 'nginx-config.gemspec', 'Rakefile', 'README', 'bin/nginx-config', 'lib/nginx_config.rb', 'templates/dot.nginx-config.erb', 'templates/nginx.conf.erb', 'templates/nginx.init.sh', 'templates/site.yml.erb']
15
+ s.rdoc_options = ["--main", "README"]
16
+ s.extra_rdoc_files = ["Manifest", "README"]
17
+ s.add_dependency("thor", [">= 0.9.2"])
18
+ end
19
+
20
+
@@ -0,0 +1,11 @@
1
+ user: www
2
+ group: www
3
+
4
+ pid_path: /var/run
5
+ config_path: /etc/nginx
6
+ log_path: /var/log/nginx
7
+
8
+ sites:
9
+ - /var/www/myblog
10
+ - /var/www/google
11
+ - /var/www/yahoo
@@ -0,0 +1,86 @@
1
+ user <%= config['user'] || "nginx" %> <%= config['group'] || "nginx" %>;
2
+
3
+ worker_processes 2;
4
+
5
+ pid <%= config['pid_path'] || '/var/run/' %>nginx.pid;
6
+
7
+ events {
8
+ worker_connections 1024;
9
+ }
10
+
11
+ http {
12
+ include <%= config['config_path'] || '/etc/nginx/' %>mime.types;
13
+ default_type application/octet-stream;
14
+
15
+ log_format main '$remote_addr - $remote_user [$time_local] $status '
16
+ '"$request" $body_bytes_sent "$http_referer" '
17
+ '"$http_user_agent" "http_x_forwarded_for"';
18
+ access_log <%= config['log_path'] || '/var/log/nginx_' %>access.log main;
19
+ error_log <%= config['log_path'] || '/var/log/nginx_' %>error.log debug;
20
+
21
+ sendfile on;
22
+ tcp_nopush on;
23
+ tcp_nodelay off;
24
+ gzip on;
25
+ gzip_http_version 1.0;
26
+ gzip_comp_level 2;
27
+ gzip_proxied any;
28
+ gzip_types text/plain text/html text/css application/x-javascript text/xml application/xml application/xml+rss text/javascript;
29
+
30
+ <% config['sites'].each do |name, site| %>
31
+ <% next unless(site['type'] == 'rails') %>
32
+ upstream <%= name %>_mongrels {
33
+ <% (site['upstream'] || site['upstreams']).each do |server| %>
34
+ server <%= server %>;
35
+ <% end %>
36
+ }
37
+ <% end %>
38
+
39
+ <% config['sites'].sort.each do |name, site| %>
40
+ server {
41
+ listen 80;
42
+ server_name <%= site['domains'] %>;
43
+ root <%= config['types'][ site['type']||'default' ] % name %>;
44
+ access_log <%= config['log_path'] || '/var/logs/nginx_' %>access.<%= name %>.log main;
45
+ client_max_body_size 50M;
46
+
47
+ if (-f $document_root/maintenance.html) {
48
+ rewrite ^(.*)$ /maintenance.html last;
49
+ break;
50
+ }
51
+
52
+ location / {
53
+ <% if (site['rewrite'] || site['rewrites']) %>
54
+ <% (site['rewrite'] || site['rewrites']).each do |rewrite| %>
55
+ rewrite <%= rewrite %> break;
56
+ <% end %>
57
+ <% end %>
58
+
59
+ proxy_set_header X-Real-IP $remote_addr;
60
+ proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
61
+ proxy_set_header Host $http_host;
62
+ proxy_redirect false;
63
+ proxy_max_temp_file_size 0;
64
+
65
+ if (-f $request_filename/index.html) {
66
+ rewrite (.*) $1/index.html break;
67
+ }
68
+
69
+ if (-f $request_filename.html) {
70
+ rewrite (.*) $1.html break;
71
+ }
72
+
73
+ <% if site['type'] == 'rails' %>
74
+ if (!-f $request_filename) {
75
+ proxy_pass http://<%= name %>_mongrels;
76
+ break;
77
+ }
78
+ <% end %> }
79
+
80
+ error_page 500 502 503 504 /50x.html;
81
+ location = /50x.html {
82
+ root html;
83
+ }
84
+ }
85
+ <% end %>
86
+ }
@@ -0,0 +1,65 @@
1
+ #! /bin/sh
2
+
3
+ ### BEGIN INIT INFO
4
+ # Provides: nginx
5
+ # Required-Start: $all
6
+ # Required-Stop: $all
7
+ # Default-Start: 2 3 4 5
8
+ # Default-Stop: 0 1 6
9
+ # Short-Description: starts the nginx web server
10
+ # Description: starts nginx using start-stop-daemon
11
+ ### END INIT INFO
12
+
13
+ PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin
14
+ DAEMON=/usr/local/sbin/nginx
15
+ NAME=nginx
16
+ DESC=nginx
17
+
18
+ test -x $DAEMON || exit 0
19
+
20
+ # Include nginx defaults if available
21
+ if [ -f /etc/default/nginx ] ; then
22
+ . /etc/default/nginx
23
+ fi
24
+
25
+ set -e
26
+
27
+ case "$1" in
28
+ start)
29
+ echo -n "Starting $DESC: "
30
+ # TODO Generate config file
31
+ start-stop-daemon --start --quiet --pidfile /usr/local/nginx/logs/nginx.pid \
32
+ --exec $DAEMON -- $DAEMON_OPTS
33
+ echo "$NAME."
34
+ ;;
35
+ stop)
36
+ echo -n "Stopping $DESC: "
37
+ start-stop-daemon --stop --quiet --pidfile /usr/local/nginx/logs/nginx.pid \
38
+ --exec $DAEMON
39
+ echo "$NAME."
40
+ ;;
41
+ restart|force-reload)
42
+ echo -n "Restarting $DESC: "
43
+ start-stop-daemon --stop --quiet --pidfile \
44
+ /usr/local/nginx/logs/nginx.pid --exec $DAEMON
45
+ sleep 1
46
+ # TODO Generate config file
47
+ start-stop-daemon --start --quiet --pidfile \
48
+ /usr/local/nginx/logs/nginx.pid --exec $DAEMON -- $DAEMON_OPTS
49
+ echo "$NAME."
50
+ ;;
51
+ reload)
52
+ echo -n "Reloading $DESC configuration: "
53
+ # TODO Generate config file
54
+ start-stop-daemon --stop --signal HUP --quiet --pidfile /usr/local/nginx/logs/nginx.pid \
55
+ --exec $DAEMON
56
+ echo "$NAME."
57
+ ;;
58
+ *)
59
+ N=/etc/init.d/$NAME
60
+ echo "Usage: $N {start|stop|restart|force-reload}" >&2
61
+ exit 1
62
+ ;;
63
+ esac
64
+
65
+ exit 0
@@ -0,0 +1,12 @@
1
+ <%= site_name %>:
2
+ type: application
3
+ domains: www.<%= site_name %>.com <%= site_name %>.com
4
+ ssl: false
5
+
6
+ upstream:
7
+ - 127.0.0.1:8000
8
+ - 127.0.0.1:8001
9
+
10
+ rewrites:
11
+ - ^/feed/atom.xml http://feeds.feedburner.com/<%= site_name %>
12
+
metadata ADDED
@@ -0,0 +1,73 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: chrislloyd-nginx-config
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.9.1
5
+ platform: ruby
6
+ authors:
7
+ - Chris Lloyd
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+
12
+ date: 2008-06-02 00:00:00 -07:00
13
+ default_executable:
14
+ dependencies:
15
+ - !ruby/object:Gem::Dependency
16
+ name: thor
17
+ version_requirement:
18
+ version_requirements: !ruby/object:Gem::Requirement
19
+ requirements:
20
+ - - ">="
21
+ - !ruby/object:Gem::Version
22
+ version: 0.9.2
23
+ version:
24
+ description: Easily generate and maintain a complex nginx config file.
25
+ email: christopher.lloyd@gmail.com
26
+ executables: []
27
+
28
+ extensions: []
29
+
30
+ extra_rdoc_files:
31
+ - Manifest
32
+ - README
33
+ files:
34
+ - LICENSE
35
+ - Manifest
36
+ - nginx-config.gemspec
37
+ - Rakefile
38
+ - README
39
+ - bin/nginx-config
40
+ - lib/nginx_config.rb
41
+ - templates/dot.nginx-config.erb
42
+ - templates/nginx.conf.erb
43
+ - templates/nginx.init.sh
44
+ - templates/site.yml.erb
45
+ has_rdoc: true
46
+ homepage: http://github.com/chrislloyd/nginx_config
47
+ post_install_message:
48
+ rdoc_options:
49
+ - --main
50
+ - README
51
+ require_paths:
52
+ - lib
53
+ required_ruby_version: !ruby/object:Gem::Requirement
54
+ requirements:
55
+ - - ">="
56
+ - !ruby/object:Gem::Version
57
+ version: "0"
58
+ version:
59
+ required_rubygems_version: !ruby/object:Gem::Requirement
60
+ requirements:
61
+ - - ">="
62
+ - !ruby/object:Gem::Version
63
+ version: "0"
64
+ version:
65
+ requirements: []
66
+
67
+ rubyforge_project:
68
+ rubygems_version: 1.0.1
69
+ signing_key:
70
+ specification_version: 2
71
+ summary: Easily generate and maintain a complex nginx config file.
72
+ test_files: []
73
+