10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
|
# File 'lib/handsome_fencer/circle_c_i/cli/dockerize.rb', line 10
def dockerize
directory "circleci", "./.circleci", recursive: true
directory "docker", "docker", recursive: true
directory "lib", "lib", recursive: true
copy_file "docker-compose.yml", "docker-compose.yml"
copy_file "Gemfile", "Gemfile"
copy_file "Gemfile.lock", "Gemfile.lock"
copy_file "config/database.yml", "config/database.yml"
copy_file "gitignore", ".gitignore"
append_to_file ".gitignore", "\ndocker/**/*.env"
append_to_file ".gitignore", "\ndocker/**/*.key"
default_values = {
"APP_NAME" => "greenfield",
"SERVER_HOST" => "ip-address-of-your-server",
"DOCKERHUB_EMAIL" => "your-docker-hub-emaill",
"DOCKERHUB_USER" => "your-docker-hub-user-name",
"DOCKERHUB_ORG" => "your-docker-hub-org-name",
"DOCKERHUB_PASS" => "your-docker-hub-password",
"POSTGRES_USER" => "your-postgres-username",
"POSTGRES_PASSWORD" => "your-postgres-password"
}
prompts = {
"APP_NAME" => "the name of your app",
"SERVER_HOST" => "the ip address of your server",
"DOCKERHUB_EMAIL" => "your Docker Hub email",
"DOCKERHUB_USER" => "your Docker Hub username",
"DOCKERHUB_ORG" => "your Docker Hub organization name",
"DOCKERHUB_PASS" => "your Docker Hub password",
"POSTGRES_USER" => "your Postgres username",
"POSTGRES_PASSWORD" => "your Postgres password"
}
prompts.map do |key, prompt|
prompts[key] = ask("Please provide #{prompt}:")
if prompts[key].size == 0
prompts[key] = default_values[key]
end
end
prompts.map do |key, value|
append_to_file 'docker/env_files/circleci.env', "\nexport #{key}=#{value}"
end
%w[development circleci staging production].each do |environment|
base = "docker/containers/"
app_env = create_file "#{base}app/#{environment}.env"
append_to_file app_env, "DATABASE_HOST=database\n"
append_to_file app_env, "RAILS_ENV=#{environment}\n"
database_env = create_file "#{base}database/#{environment}.env"
append_to_file database_env, "POSTGRES_USER=postgres\n"
append_to_file database_env, "POSTGRES_DB=#{prompts['APP_NAME']}_#{environment}\n"
append_to_file database_env, "POSTGRES_PASSWORD=#{prompts['POSTGRES_PASSWORD']}\n"
ssl = (environment == "production") ? true : false
web_env = create_file "#{base}web/#{environment}.env"
append_to_file web_env, "CA_SSL=postgres#{ssl}\n"
end
%w[circleci production].each do |environment|
template "docker/overrides/#{environment}.yml.tt", "docker/overrides/#{environment}.yml"
end
%w[app web].each do |container|
options = {
email: prompts['DOCKERHUB_EMAIL'],
app_name: prompts['APP_NAME']
}
template "docker/containers/#{container}/Dockerfile.tt", "docker/containers/#{container}/Dockerfile", options
end
end
|