docker_nginx_proxy 0.1.0
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/bin/docker-nginx-proxy +6 -0
- data/lib/docker_nginx_proxy/cli.rb +28 -0
- data/lib/docker_nginx_proxy/docker.rb +18 -0
- data/lib/docker_nginx_proxy/nginx.rb +35 -0
- data/lib/docker_proxy.rb +7 -0
- metadata +105 -0
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,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
|
data/lib/docker_proxy.rb
ADDED
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: []
|