docker_nginx_proxy 0.1.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: fe16f18b258883db49248859c920ab6d8179961f
4
+ data.tar.gz: f412d145251808cf66dd3df6640ff48971a6e37a
5
+ SHA512:
6
+ metadata.gz: ca661b59e1bc1a4aeeeff997ef603f4b80b7b4e270cc8ffea2c936f3c33f6f31e66c00d4c907ace6ee8854ff03da2424b4289883c706cdbbf85923c677e5de9a
7
+ data.tar.gz: 2473d7a8500a94da2d9b724ab4dfbae66dd173c5be52ab35b6e165b3ba448d15161bd8e46d2e266d873a531b625cf96150085b3fcc6248250c21e32ee7a249ac
@@ -0,0 +1,6 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ $LOAD_PATH.unshift(File.dirname(__FILE__) + '/../lib')
4
+ require 'docker_proxy'
5
+
6
+ DockerNginxProxy::Cli.run(ARGV)
@@ -0,0 +1,28 @@
1
+ module DockerNginxProxy
2
+ class Cli < Clamp::Command
3
+
4
+ parameter "NAME", "docker container name", :attribute_name => :name
5
+ parameter "MAPPING ...", "domain:port=port mapping", :attribute_name => :encoded_mappings
6
+
7
+ def execute
8
+
9
+ docker_port_mappings = Docker.new.get_mappings(name)
10
+ mappings = _convert_mapping_to_hash(encoded_mappings)
11
+ mappings.map do |domain_port, container_port|
12
+ docker_port = docker_port_mappings[container_port]
13
+ raise "No docker port found for container port #{container_port}. Mappings: #{docker_port_mappings}" unless docker_port
14
+ mappings[domain_port] = docker_port
15
+ end
16
+ Nginx.new.install_proxy(name, mappings)
17
+ end
18
+
19
+ def _convert_mapping_to_hash(encoded_mappings)
20
+ mappings = {}
21
+ encoded_mappings.each do |encoded_mapping|
22
+ domain_port, container_port = encoded_mapping.split('=', 2)
23
+ mappings[domain_port] = container_port.to_i
24
+ end
25
+ mappings
26
+ end
27
+ end
28
+ end
@@ -0,0 +1,18 @@
1
+ module DockerNginxProxy
2
+ class Docker
3
+
4
+ def get_mappings(container_name)
5
+ output = `docker port #{container_name}`
6
+ lines = output.split("\n")
7
+ mappings = {}
8
+ lines.map do |line|
9
+ private_address, public_address = line.split(' -> ')
10
+ private_port, protocol = private_address.split('/')
11
+ public_ip, public_port = public_address.split(':')
12
+ mappings[private_port.to_i] = public_port.to_i
13
+ end
14
+ mappings
15
+ end
16
+
17
+ end
18
+ end
@@ -0,0 +1,35 @@
1
+ module DockerNginxProxy
2
+ class Nginx
3
+
4
+ def install_proxy(name, mapping)
5
+ content = generate_proxy_config(mapping)
6
+ path = '/etc/nginx/sites-available/' + name
7
+ puts content
8
+ #File.write(path, content)
9
+ end
10
+
11
+ def generate_proxy_config(mapping)
12
+ content = ''
13
+ mapping.each do |domain_port, docker_port|
14
+ domain, port = domain_port.split(':')
15
+ port ||= 80
16
+ content += generate_proxy_config_block(domain, port, docker_port)
17
+ end
18
+ content
19
+ end
20
+
21
+ def generate_proxy_config_block(domain, port, docker_port)
22
+ content = <<EOD
23
+ server {
24
+ listen {{port}};
25
+ server_name {{server_name}};
26
+
27
+ location / {
28
+ proxy_pass localhost:{{target_port}};
29
+ }
30
+ }
31
+ EOD
32
+ Mustache.render(content, :port => port, :server_name => domain, :target_port => docker_port)
33
+ end
34
+ end
35
+ end
@@ -0,0 +1,7 @@
1
+ module DockerNginxProxy
2
+ require 'clamp'
3
+ require 'mustache'
4
+ require 'docker_nginx_proxy/nginx'
5
+ require 'docker_nginx_proxy/docker'
6
+ require 'docker_nginx_proxy/cli'
7
+ end
metadata ADDED
@@ -0,0 +1,105 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: docker_nginx_proxy
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.1.0
5
+ platform: ruby
6
+ authors:
7
+ - tomasz@durka.pl
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2014-10-22 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: clamp
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - "~>"
18
+ - !ruby/object:Gem::Version
19
+ version: '0.5'
20
+ type: :runtime
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - "~>"
25
+ - !ruby/object:Gem::Version
26
+ version: '0.5'
27
+ - !ruby/object:Gem::Dependency
28
+ name: mustache
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - "~>"
32
+ - !ruby/object:Gem::Version
33
+ version: 0.99.6
34
+ type: :runtime
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - "~>"
39
+ - !ruby/object:Gem::Version
40
+ version: 0.99.6
41
+ - !ruby/object:Gem::Dependency
42
+ name: rake
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - "~>"
46
+ - !ruby/object:Gem::Version
47
+ version: '10.3'
48
+ type: :development
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - "~>"
53
+ - !ruby/object:Gem::Version
54
+ version: '10.3'
55
+ - !ruby/object:Gem::Dependency
56
+ name: rspec
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - "~>"
60
+ - !ruby/object:Gem::Version
61
+ version: '2.0'
62
+ type: :development
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - "~>"
67
+ - !ruby/object:Gem::Version
68
+ version: '2.0'
69
+ description:
70
+ email: tomasz@durka.pl
71
+ executables:
72
+ - docker-nginx-proxy
73
+ extensions: []
74
+ extra_rdoc_files: []
75
+ files:
76
+ - bin/docker-nginx-proxy
77
+ - lib/docker_nginx_proxy/cli.rb
78
+ - lib/docker_nginx_proxy/docker.rb
79
+ - lib/docker_nginx_proxy/nginx.rb
80
+ - lib/docker_proxy.rb
81
+ homepage:
82
+ licenses:
83
+ - MIT
84
+ metadata: {}
85
+ post_install_message:
86
+ rdoc_options: []
87
+ require_paths:
88
+ - lib
89
+ required_ruby_version: !ruby/object:Gem::Requirement
90
+ requirements:
91
+ - - ">="
92
+ - !ruby/object:Gem::Version
93
+ version: '0'
94
+ required_rubygems_version: !ruby/object:Gem::Requirement
95
+ requirements:
96
+ - - ">="
97
+ - !ruby/object:Gem::Version
98
+ version: '0'
99
+ requirements: []
100
+ rubyforge_project:
101
+ rubygems_version: 2.2.2
102
+ signing_key:
103
+ specification_version: 4
104
+ summary: Docker/nginx proxy config generator
105
+ test_files: []