terra_boi 0.0.8 → 0.0.9
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/README.md +1 -1
- data/lib/generators/extensions.rb +1 -1
- data/lib/generators/terra_boi/boilerplate_generator.rb +1 -0
- data/lib/generators/terra_boi/master_worker_generator.rb +47 -0
- data/lib/generators/terra_boi/templates/Dockerfile.erb +1 -1
- data/lib/generators/terra_boi/templates/data_main.erb +1 -1
- data/lib/generators/terra_boi/templates/master_worker_main.erb +26 -0
- data/lib/generators/terra_boi/templates/master_worker_output.erb +14 -0
- data/lib/generators/terra_boi/templates/master_worker_user_data.erb +31 -0
- data/lib/generators/terra_boi/templates/state_main.erb +1 -1
- data/lib/generators/terra_boi/templates/web_servers_main.erb +1 -1
- data/lib/terra_boi/version.rb +1 -1
- metadata +6 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: be617b630819e0ab12e6919c081e8ee3209d971a10c2547934f2b41aa2af1528
|
4
|
+
data.tar.gz: a8feea80b693a85bc0c134e491c1b8a2a3fa5abe91f48cb478d12f1c83140202
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: e608ceb793a1577ee4f0a033c14f16d203e8443664489e150beacf54dfb3e47f67329e59f62b96e0b6e3055abec48188e8d1c5b2d27ef7b5050bcada8f4823d1
|
7
|
+
data.tar.gz: 0e14eb474e5bb988b5a7658333e8892f8595c4fc8e5707d3f7dca0b353c4ad4a6a3a813793a05c072bff414785e37d35064af27a78fc38d79ec7fa7b12342841
|
data/README.md
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
# TerraBoi
|
2
2
|
|
3
|
-
This ruby gem was created by [Charlie Reese](https://charliereese.ca/about) to get rails applications deployed into production as quickly and easily as possible.
|
3
|
+
This ruby gem was created by [Charlie Reese](https://charliereese.ca/about) at [Clientelify](https://clientelify.com) to get rails applications deployed into production as quickly and easily as possible.
|
4
4
|
|
5
5
|
**Raison d'etre**: creating basic infrastructure to house production SaaS applications on AWS is tedious and boring. It's often a similar process every time, and every time it sucks.
|
6
6
|
|
@@ -0,0 +1,47 @@
|
|
1
|
+
require "generators/extensions"
|
2
|
+
|
3
|
+
module TerraBoi
|
4
|
+
class MasterWorkerGenerator < Rails::Generators::Base
|
5
|
+
attr_accessor :application_name, :id_rsa_pub, :class_options
|
6
|
+
class_option :domain_name, type: :string
|
7
|
+
source_root File.expand_path('templates', __dir__)
|
8
|
+
|
9
|
+
desc (<<-EOF
|
10
|
+
Generate staging and production terraform master worker server files
|
11
|
+
|
12
|
+
To execute, run rails generate terra_boi:master_worker
|
13
|
+
EOF
|
14
|
+
.gsub(/\t/, '')
|
15
|
+
)
|
16
|
+
|
17
|
+
def init
|
18
|
+
# defined in lib/generators/extensions
|
19
|
+
self.application_name = generate_application_name
|
20
|
+
self.id_rsa_pub = open(ENV['HOME'] + "/.ssh/id_rsa.pub").read.chomp
|
21
|
+
end
|
22
|
+
|
23
|
+
def create_main_terraform_file
|
24
|
+
generate_terraform_files({
|
25
|
+
template: 'master_worker_main.erb',
|
26
|
+
file_path: 'master_worker/main.tf',
|
27
|
+
env: ['staging', 'prod']
|
28
|
+
})
|
29
|
+
end
|
30
|
+
|
31
|
+
def create_output_terraform_file
|
32
|
+
generate_terraform_files({
|
33
|
+
template: 'master_worker_output.erb',
|
34
|
+
file_path: 'master_worker/output.tf',
|
35
|
+
env: ['staging', 'prod']
|
36
|
+
})
|
37
|
+
end
|
38
|
+
|
39
|
+
def create_user_data_terraform_file
|
40
|
+
generate_terraform_files({
|
41
|
+
template: 'master_worker_user_data.erb',
|
42
|
+
file_path: 'master_worker/user-data.sh',
|
43
|
+
env: ['staging', 'prod']
|
44
|
+
})
|
45
|
+
end
|
46
|
+
end
|
47
|
+
end
|
@@ -3,7 +3,7 @@ FROM ruby:<%= class_options[:ruby_version] %>
|
|
3
3
|
# replace shell with bash so we can source files
|
4
4
|
RUN rm /bin/sh && ln -s /bin/bash /bin/sh
|
5
5
|
|
6
|
-
RUN apt-get update -qq && apt-get install -y build-essential
|
6
|
+
RUN apt-get update -qq && apt-get install -y build-essential && apt-get install -y cron
|
7
7
|
|
8
8
|
# # for postgres
|
9
9
|
# RUN apt-get install -y libpq-dev
|
@@ -20,7 +20,7 @@ variable "db_username" {}
|
|
20
20
|
variable "db_password" {}
|
21
21
|
|
22
22
|
module "db_and_s3" {
|
23
|
-
source = "github.com/charliereese/terraform_modules//data?ref=v0.0.
|
23
|
+
source = "github.com/charliereese/terraform_modules//data?ref=v0.0.23"
|
24
24
|
|
25
25
|
env = "<%= config[:env] %>"
|
26
26
|
app_name = "<%= application_name %>"
|
@@ -0,0 +1,26 @@
|
|
1
|
+
# -------------------------------------------------------------------
|
2
|
+
# 1. STATE
|
3
|
+
# -------------------------------------------------------------------
|
4
|
+
|
5
|
+
terraform {
|
6
|
+
backend "s3" {
|
7
|
+
bucket = "<%= application_name %>-terraform-state-storage"
|
8
|
+
key = "terraform/<%= config[:env] %>-state/master-worker"
|
9
|
+
region = "us-east-2"
|
10
|
+
dynamodb_table = "<%= application_name %>-terraform-state-lock"
|
11
|
+
encrypt = true
|
12
|
+
}
|
13
|
+
}
|
14
|
+
|
15
|
+
# -------------------------------------------------------------------
|
16
|
+
# 2. MASTER WORKER MODULE
|
17
|
+
# -------------------------------------------------------------------
|
18
|
+
|
19
|
+
module "master_worker_cluster" {
|
20
|
+
source = "github.com/charliereese/terraform_modules//master_worker?ref=v0.0.23"
|
21
|
+
|
22
|
+
instance_type = "t2.micro"
|
23
|
+
env = "<%= config[:env] %>"
|
24
|
+
app_name = "<%= application_name %>"
|
25
|
+
id_rsa_pub = "<%= id_rsa_pub %>"
|
26
|
+
}
|
@@ -0,0 +1,14 @@
|
|
1
|
+
output "master_worker_ip_address" {
|
2
|
+
value = module.master_worker_cluster.master_worker_ip_address
|
3
|
+
description = "The domain name of the application load balancer"
|
4
|
+
}
|
5
|
+
|
6
|
+
output "master_worker_id" {
|
7
|
+
value = module.master_worker_cluster.master_worker_id
|
8
|
+
description = "The ID of the master worker"
|
9
|
+
}
|
10
|
+
|
11
|
+
output "master_worker_arn" {
|
12
|
+
value = module.master_worker_cluster.master_worker_arn
|
13
|
+
description = "The ARN of the master worker"
|
14
|
+
}
|
@@ -0,0 +1,31 @@
|
|
1
|
+
#!/bin/bash
|
2
|
+
sleep 5
|
3
|
+
|
4
|
+
# Set ENV vars from terraform
|
5
|
+
echo "APPLICATION_NAME=${application_name}" >> /etc/environment
|
6
|
+
echo "DB_HOST=${db_address}" >> /etc/environment
|
7
|
+
echo "DB_USERNAME=${db_username}" >> /etc/environment
|
8
|
+
echo "RAILS_ENV=production" >> /etc/environment
|
9
|
+
echo "INFRASTRUCTURE_ENV=${env}" >> /etc/environment
|
10
|
+
|
11
|
+
# Load ENV vars in current session
|
12
|
+
for line in $( cat /etc/environment ); do export $line; done
|
13
|
+
|
14
|
+
# Set DB environment variables in docker container and
|
15
|
+
# start rails container
|
16
|
+
docker container run -p 3000:3000 --name $APPLICATION_NAME --restart always -d \
|
17
|
+
--entrypoint 'whenever --update-crontab' \
|
18
|
+
-e DB_HOST=$DB_HOST \
|
19
|
+
-e DB_USERNAME=$DB_USERNAME \
|
20
|
+
-e DB_PASSWORD=$DB_PASSWORD \
|
21
|
+
-e RAILS_ENV=$RAILS_ENV \
|
22
|
+
-e INFRASTRUCTURE_ENV=$INFRASTRUCTURE_ENV \
|
23
|
+
-e AWS_ACCESS_KEY_ID=$AWS_ACCESS_KEY_ID \
|
24
|
+
-e AWS_SECRET_ACCESS_KEY=$AWS_SECRET_ACCESS_KEY \
|
25
|
+
-e RAILS_MASTER_KEY=$RAILS_MASTER_KEY \
|
26
|
+
-e RAILS_SERVE_STATIC_FILES=true \
|
27
|
+
$DOCKERHUB_USERNAME/$APPLICATION_NAME:latest
|
28
|
+
|
29
|
+
# Run outstanding DB migrations
|
30
|
+
docker container exec $APPLICATION_NAME rake db:migrate
|
31
|
+
docker container exec $APPLICATION_NAME RAILS_ENV=production bin/delayed_job start
|
@@ -3,7 +3,7 @@
|
|
3
3
|
# ---------------------------------------------------------------------------------------------------------------------
|
4
4
|
|
5
5
|
module "remote_state_locking" {
|
6
|
-
source = "github.com/charliereese/terraform_modules//state?ref=v0.0.
|
6
|
+
source = "github.com/charliereese/terraform_modules//state?ref=v0.0.23"
|
7
7
|
|
8
8
|
app_name = "<%= application_name %>"
|
9
9
|
region = "us-east-2"
|
@@ -17,7 +17,7 @@ terraform {
|
|
17
17
|
# ---------------------------------------------------------------------------------------------------------------------
|
18
18
|
|
19
19
|
module "webserver_cluster" {
|
20
|
-
source = "github.com/charliereese/terraform_modules//web_servers?ref=v0.0.
|
20
|
+
source = "github.com/charliereese/terraform_modules//web_servers?ref=v0.0.23"
|
21
21
|
|
22
22
|
instance_type = "t2.micro"
|
23
23
|
env = "<%= config[:env] %>"
|
data/lib/terra_boi/version.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: terra_boi
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.9
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Charlie Reese
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2019-10-
|
11
|
+
date: 2019-10-18 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: rails
|
@@ -53,6 +53,7 @@ files:
|
|
53
53
|
- lib/generators/terra_boi/db_config_generator.rb
|
54
54
|
- lib/generators/terra_boi/dockerfile_generator.rb
|
55
55
|
- lib/generators/terra_boi/host_initializer_generator.rb
|
56
|
+
- lib/generators/terra_boi/master_worker_generator.rb
|
56
57
|
- lib/generators/terra_boi/packer_generator.rb
|
57
58
|
- lib/generators/terra_boi/state_generator.rb
|
58
59
|
- lib/generators/terra_boi/templates/Dockerfile.erb
|
@@ -61,6 +62,9 @@ files:
|
|
61
62
|
- lib/generators/terra_boi/templates/data_storage_config.erb
|
62
63
|
- lib/generators/terra_boi/templates/db_config.erb
|
63
64
|
- lib/generators/terra_boi/templates/host_initializer.erb
|
65
|
+
- lib/generators/terra_boi/templates/master_worker_main.erb
|
66
|
+
- lib/generators/terra_boi/templates/master_worker_output.erb
|
67
|
+
- lib/generators/terra_boi/templates/master_worker_user_data.erb
|
64
68
|
- lib/generators/terra_boi/templates/packer_ami_build.erb
|
65
69
|
- lib/generators/terra_boi/templates/packer_application.erb
|
66
70
|
- lib/generators/terra_boi/templates/state_main.erb
|