dckerize 0.2.3 → 0.5.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 +4 -4
- data/README.md +34 -2
- data/dckerize.gemspec +1 -1
- data/exe/dckerize +5 -19
- data/lib/dckerize/extra.rb +33 -0
- data/lib/dckerize/generator.rb +57 -0
- data/lib/dckerize/runner.rb +40 -0
- data/lib/dckerize/version.rb +1 -1
- data/lib/dckerize.rb +3 -49
- data/templates/Vagrantfile.erb +3 -0
- data/templates/docker-compose.yml.erb +8 -0
- data/templates/env.conf.erb +5 -0
- metadata +7 -4
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 2d40a2a22aa0a03a3406e9f6dd3e59500935dbe7
|
4
|
+
data.tar.gz: 7023801fff0459073316a43f3e2df9e241eeffd4
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 9f6a947f040f081cd67ee37b46cee9cc9036ba02d0b04894ff2a6f3f93114cba8311b1fc55729882bb6670195a9f705a6e6f5b4082791d5c260dcf2f1769de9d
|
7
|
+
data.tar.gz: 4638884421623e3cf7a04402ef6b2ba58fb07b431ace32e937fe864051716040f0bbd4fcd62c51575906b8d1b2fd75a9c70e4b959048e3fe2b2f3aa7033e88d4
|
data/README.md
CHANGED
@@ -1,5 +1,6 @@
|
|
1
1
|
# Dckerize
|
2
2
|
[](http://badge.fury.io/rb/dckerize)
|
3
|
+
[](https://travis-ci.org/pacuna/dckerize)
|
3
4
|
|
4
5
|
Supercharged Rails development using Docker and Vagrant
|
5
6
|
|
@@ -14,6 +15,7 @@ You'll get
|
|
14
15
|
- An nginx/passenger container environment for serving your application and all the necessary configurations.
|
15
16
|
- A separate container running MySQL/postgres for your DB.
|
16
17
|
- A separate container for keeping your data using the data-only container pattern.
|
18
|
+
- Extras (elasticsearch for now)
|
17
19
|
|
18
20
|
## Requirements
|
19
21
|
|
@@ -28,9 +30,22 @@ You'll get
|
|
28
30
|
|
29
31
|
You need to have a Rails application already created.
|
30
32
|
|
31
|
-
|
33
|
+
General usage:
|
34
|
+
|
35
|
+
$ dckerize up APP_NAME --database=[mysql|postgres] [--extras=elasticsearch]
|
36
|
+
|
37
|
+
So for example in the root of your application run:
|
38
|
+
|
39
|
+
$ dckerize up APP_NAME --database=mysql
|
40
|
+
|
41
|
+
Or
|
42
|
+
|
43
|
+
$ dckerize up APP_NAME --database=postgres
|
44
|
+
|
45
|
+
Or
|
46
|
+
|
47
|
+
$ dckerize up APP_NAME --database=postgres --extras=elasticsearch
|
32
48
|
|
33
|
-
$ dckerize up APP_NAME --database=[mysql|postgres]
|
34
49
|
|
35
50
|
Where APP_NAME should be the same name of your application and you must specify the database
|
36
51
|
that you want to use.
|
@@ -62,6 +77,15 @@ In your config/database.yml add these lines to your configuration:
|
|
62
77
|
password: <%= ENV['POSTGRES_ENV_POSTGRES_PASSWORD'] %>
|
63
78
|
host: postgres
|
64
79
|
|
80
|
+
### Extras configuration
|
81
|
+
|
82
|
+
#### Elasticsearch
|
83
|
+
|
84
|
+
If you're using the elasticsearch-rails gem, you just need to specify the environment variables
|
85
|
+
linked between the containers in your elasticsearch initializer and you'll be ready to go
|
86
|
+
|
87
|
+
ELASTICSEARCH_URL = ENV['ELASTICSEARCH_URL'] || ENV['ELASTICSEARCH_PORT_9200_TCP_ADDR']
|
88
|
+
|
65
89
|
### Developing
|
66
90
|
|
67
91
|
Go inside the generated vagrant folder and run
|
@@ -104,6 +128,14 @@ And etc.
|
|
104
128
|
The nginx container is mapping its port 80 with the port 80 of the guest host, and since we're declaring a private network in our Vagranfile
|
105
129
|
you can access your application by visiting http://192.168.50.4.
|
106
130
|
|
131
|
+
## TODO
|
132
|
+
|
133
|
+
- [x] Support for more services (redis, elasticsearch)
|
134
|
+
- Support for other ruby/rails versions
|
135
|
+
- More workflow examples
|
136
|
+
|
137
|
+
|
138
|
+
|
107
139
|
## Video demo
|
108
140
|
|
109
141
|
[](http://www.youtube.com/watch?v=X8IVAoBUtbs)
|
data/dckerize.gemspec
CHANGED
@@ -18,7 +18,7 @@ Gem::Specification.new do |spec|
|
|
18
18
|
spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
|
19
19
|
spec.require_paths = ["lib", "templates"]
|
20
20
|
|
21
|
-
spec.add_development_dependency "bundler", "~> 1.
|
21
|
+
spec.add_development_dependency "bundler", "~> 1.7"
|
22
22
|
spec.add_development_dependency "rake", "~> 10.0"
|
23
23
|
spec.add_development_dependency "rspec"
|
24
24
|
end
|
data/exe/dckerize
CHANGED
@@ -2,23 +2,9 @@
|
|
2
2
|
|
3
3
|
require "dckerize"
|
4
4
|
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
puts 'Usage: dckerize up APP_NAME --database==[postgres|mysql]'
|
11
|
-
exit 0;
|
12
|
-
end
|
13
|
-
|
14
|
-
if db_name == '--database=postgres'
|
15
|
-
generator = Dckerize::Generator.new(app_name, 'postgres')
|
16
|
-
elsif db_name == '--database=mysql'
|
17
|
-
generator = Dckerize::Generator.new(app_name, 'mysql')
|
18
|
-
else
|
19
|
-
puts 'Usage: dckerize up APP_NAME --database==[postgres|mysql]'
|
20
|
-
exit 0;
|
5
|
+
begin
|
6
|
+
Dckerize::Runner.new(ARGV).execute
|
7
|
+
rescue Exception => e
|
8
|
+
puts e.message
|
9
|
+
exit 0
|
21
10
|
end
|
22
|
-
generator.up
|
23
|
-
|
24
|
-
|
@@ -0,0 +1,33 @@
|
|
1
|
+
module Dckerize
|
2
|
+
class Extra
|
3
|
+
attr_accessor :name
|
4
|
+
def initialize(name)
|
5
|
+
@name = name
|
6
|
+
end
|
7
|
+
|
8
|
+
def image
|
9
|
+
if name == 'elasticsearch'
|
10
|
+
'elasticsearch'
|
11
|
+
end
|
12
|
+
end
|
13
|
+
|
14
|
+
def service_name
|
15
|
+
if name == 'elasticsearch'
|
16
|
+
'elasticsearch'
|
17
|
+
end
|
18
|
+
end
|
19
|
+
|
20
|
+
def alias
|
21
|
+
if name == 'elasticsearch'
|
22
|
+
'elasticsearch'
|
23
|
+
end
|
24
|
+
end
|
25
|
+
|
26
|
+
def env_variables
|
27
|
+
if name == 'elasticsearch'
|
28
|
+
['ELASTICSEARCH_PORT_9200_TCP_ADDR', 'ELASTICSEARCH_URL']
|
29
|
+
end
|
30
|
+
end
|
31
|
+
end
|
32
|
+
|
33
|
+
end
|
@@ -0,0 +1,57 @@
|
|
1
|
+
module Dckerize
|
2
|
+
class Generator
|
3
|
+
attr_accessor :name, :db, :extras
|
4
|
+
def initialize(name, db, extras = [])
|
5
|
+
if db == 'mysql'
|
6
|
+
@db = 'mysql:5.7'
|
7
|
+
@db_password = 'MYSQL_ROOT_PASSWORD'
|
8
|
+
@db_password_env = 'MYSQL_ENV_MYSQL_ROOT_PASSWORD'
|
9
|
+
@db_host_env = 'MYSQL_PORT_3306_TCP_ADDR'
|
10
|
+
@db_name_for_data_volume = 'mysql'
|
11
|
+
@db_service_name = 'mysql'
|
12
|
+
elsif db == 'postgres'
|
13
|
+
@db = 'postgres'
|
14
|
+
@db_password = 'POSTGRES_PASSWORD'
|
15
|
+
@db_password_env = 'POSTGRES_ENV_POSTGRES_PASSWORD'
|
16
|
+
@db_host_env = 'POSTGRES_PORT_5432_TCP_ADDR'
|
17
|
+
@db_name_for_data_volume = 'postgresql'
|
18
|
+
@db_service_name = 'postgres'
|
19
|
+
end
|
20
|
+
@name = name
|
21
|
+
|
22
|
+
@extras = Array.new
|
23
|
+
extras.each do |extra|
|
24
|
+
@extras << Dckerize::Extra.new(extra)
|
25
|
+
end
|
26
|
+
end
|
27
|
+
|
28
|
+
def get_binding
|
29
|
+
binding
|
30
|
+
end
|
31
|
+
|
32
|
+
def templates
|
33
|
+
Dckerize.templates
|
34
|
+
end
|
35
|
+
|
36
|
+
def up
|
37
|
+
FileUtils.mkdir_p('conf')
|
38
|
+
FileUtils.mkdir_p('vagrant')
|
39
|
+
|
40
|
+
create_from_template('Vagrantfile.erb', 'vagrant/Vagrantfile')
|
41
|
+
create_from_template('Dockerfile.erb', 'Dockerfile')
|
42
|
+
create_from_template('site.conf.erb', "conf/#{@name}.conf")
|
43
|
+
create_from_template('env.conf.erb', "conf/env.conf")
|
44
|
+
create_from_template('docker-compose.yml.erb', "docker-compose.yml")
|
45
|
+
create_from_template('docker-compose-installer.sh.erb', "vagrant/docker-compose-installer.sh")
|
46
|
+
end
|
47
|
+
|
48
|
+
private
|
49
|
+
def create_from_template(template_name, output_file)
|
50
|
+
template = ERB.new(File.read("#{templates}/#{template_name}"), nil, '-')
|
51
|
+
result = template.result(binding)
|
52
|
+
File.open("#{output_file}", 'w') { |file| file.write(result) }
|
53
|
+
end
|
54
|
+
|
55
|
+
end
|
56
|
+
|
57
|
+
end
|
@@ -0,0 +1,40 @@
|
|
1
|
+
module Dckerize
|
2
|
+
class Runner
|
3
|
+
|
4
|
+
VALID_OPTIONS = ['--database=mysql', '--database=postgres', '--extras=elasticsearch']
|
5
|
+
ERROR_MESSAGE = 'USAGE: dckerize up --database=[mysql|postgres] [--extras=elasticsearch]'
|
6
|
+
def initialize(options)
|
7
|
+
@options = options
|
8
|
+
end
|
9
|
+
|
10
|
+
def execute
|
11
|
+
extras = []
|
12
|
+
db = ''
|
13
|
+
raise ERROR_MESSAGE unless valid?
|
14
|
+
@options[2..-1].each do |option|
|
15
|
+
splitted_option = option.split('=')
|
16
|
+
if splitted_option[0] == '--database'
|
17
|
+
db = splitted_option[1]
|
18
|
+
elsif splitted_option[0] == '--extras'
|
19
|
+
extras << splitted_option[1].split(',')
|
20
|
+
else
|
21
|
+
raise_error ERROR_MESSAGE
|
22
|
+
end
|
23
|
+
end
|
24
|
+
Dckerize::Generator.new(@options[1], db, extras.flatten).up
|
25
|
+
end
|
26
|
+
|
27
|
+
def valid?
|
28
|
+
# first option should always be up
|
29
|
+
return false if @options[0] != 'up'
|
30
|
+
# db is mandatory
|
31
|
+
return false unless @options.grep(/--database=/).any?
|
32
|
+
# only valid options allowed
|
33
|
+
@options[2..-1].each do |option|
|
34
|
+
return false unless VALID_OPTIONS.include?(option)
|
35
|
+
end
|
36
|
+
true
|
37
|
+
end
|
38
|
+
end
|
39
|
+
|
40
|
+
end
|
data/lib/dckerize/version.rb
CHANGED
data/lib/dckerize.rb
CHANGED
@@ -1,4 +1,7 @@
|
|
1
1
|
require "dckerize/version"
|
2
|
+
require "dckerize/extra"
|
3
|
+
require "dckerize/generator"
|
4
|
+
require "dckerize/runner"
|
2
5
|
require 'erb'
|
3
6
|
require 'fileutils'
|
4
7
|
|
@@ -11,53 +14,4 @@ module Dckerize
|
|
11
14
|
File.join root, 'templates'
|
12
15
|
end
|
13
16
|
|
14
|
-
class Generator
|
15
|
-
attr_accessor :name, :db
|
16
|
-
def initialize(name, db)
|
17
|
-
if db == 'mysql'
|
18
|
-
@db = 'mysql:5.7'
|
19
|
-
@db_password = 'MYSQL_ROOT_PASSWORD'
|
20
|
-
@db_password_env = 'MYSQL_ENV_MYSQL_ROOT_PASSWORD'
|
21
|
-
@db_host_env = 'MYSQL_PORT_3306_TCP_ADDR'
|
22
|
-
@db_name_for_data_volume = 'mysql'
|
23
|
-
@db_service_name = 'mysql'
|
24
|
-
elsif db == 'postgres'
|
25
|
-
@db = 'postgres'
|
26
|
-
@db_password = 'POSTGRES_PASSWORD'
|
27
|
-
@db_password_env = 'POSTGRES_ENV_POSTGRES_PASSWORD'
|
28
|
-
@db_host_env = 'POSTGRES_PORT_5432_TCP_ADDR'
|
29
|
-
@db_name_for_data_volume = 'postgresql'
|
30
|
-
@db_service_name = 'postgres'
|
31
|
-
end
|
32
|
-
@name = name
|
33
|
-
end
|
34
|
-
|
35
|
-
def get_binding
|
36
|
-
binding
|
37
|
-
end
|
38
|
-
|
39
|
-
def templates
|
40
|
-
Dckerize.templates
|
41
|
-
end
|
42
|
-
|
43
|
-
def up
|
44
|
-
FileUtils.mkdir_p('conf')
|
45
|
-
FileUtils.mkdir_p('vagrant')
|
46
|
-
|
47
|
-
create_from_template('Vagrantfile.erb', 'vagrant/Vagrantfile')
|
48
|
-
create_from_template('Dockerfile.erb', 'Dockerfile')
|
49
|
-
create_from_template('site.conf.erb', "conf/#{@name}.conf")
|
50
|
-
create_from_template('env.conf.erb', "conf/env.conf")
|
51
|
-
create_from_template('docker-compose.yml.erb', "docker-compose.yml")
|
52
|
-
create_from_template('docker-compose-installer.sh.erb', "vagrant/docker-compose-installer.sh")
|
53
|
-
end
|
54
|
-
|
55
|
-
private
|
56
|
-
def create_from_template(template_name, output_file)
|
57
|
-
template = ERB.new(File.read("#{templates}/#{template_name}"))
|
58
|
-
result = template.result(binding)
|
59
|
-
File.open("#{output_file}", 'w') { |file| file.write(result) }
|
60
|
-
end
|
61
|
-
|
62
|
-
end
|
63
17
|
end
|
data/templates/Vagrantfile.erb
CHANGED
@@ -19,6 +19,9 @@ Vagrant.configure(VAGRANTFILE_API_VERSION) do |config|
|
|
19
19
|
config.vm.provision "docker" do |d|
|
20
20
|
d.pull_images "<%= @db %>"
|
21
21
|
d.pull_images "phusion/passenger-ruby22:0.9.15"
|
22
|
+
<%- @extras.each do |extra| -%>
|
23
|
+
d.pull_images "<%= extra.image %>"
|
24
|
+
<%- end -%>
|
22
25
|
end
|
23
26
|
|
24
27
|
|
@@ -22,5 +22,13 @@ webapp:
|
|
22
22
|
- PASSENGER_APP_ENV=development
|
23
23
|
links:
|
24
24
|
- <%= @db_service_name %>:<%= @db_service_name %>
|
25
|
+
<%- @extras.each do |extra| -%>
|
26
|
+
- <%= extra.service_name %>:<%= extra.alias %>
|
27
|
+
<%- end -%>
|
25
28
|
volumes:
|
26
29
|
- /<%= @name %>:/home/app/<%= @name %>
|
30
|
+
<%- @extras.each do |extra| -%>
|
31
|
+
<%= extra.service_name %>:
|
32
|
+
image: <%= extra.image %>
|
33
|
+
name: <%= @name %>-<%= extra.service_name %>
|
34
|
+
<%- end -%>
|
data/templates/env.conf.erb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: dckerize
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.5.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Pablo Acuña
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2015-07-
|
11
|
+
date: 2015-07-11 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
@@ -16,14 +16,14 @@ dependencies:
|
|
16
16
|
requirements:
|
17
17
|
- - "~>"
|
18
18
|
- !ruby/object:Gem::Version
|
19
|
-
version: '1.
|
19
|
+
version: '1.7'
|
20
20
|
type: :development
|
21
21
|
prerelease: false
|
22
22
|
version_requirements: !ruby/object:Gem::Requirement
|
23
23
|
requirements:
|
24
24
|
- - "~>"
|
25
25
|
- !ruby/object:Gem::Version
|
26
|
-
version: '1.
|
26
|
+
version: '1.7'
|
27
27
|
- !ruby/object:Gem::Dependency
|
28
28
|
name: rake
|
29
29
|
requirement: !ruby/object:Gem::Requirement
|
@@ -72,6 +72,9 @@ files:
|
|
72
72
|
- dckerize.gemspec
|
73
73
|
- exe/dckerize
|
74
74
|
- lib/dckerize.rb
|
75
|
+
- lib/dckerize/extra.rb
|
76
|
+
- lib/dckerize/generator.rb
|
77
|
+
- lib/dckerize/runner.rb
|
75
78
|
- lib/dckerize/version.rb
|
76
79
|
- templates/Dockerfile.erb
|
77
80
|
- templates/Vagrantfile.erb
|