terra_boi 0.0.8 → 0.0.9
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 +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
|