terra_boi 0.0.3 → 0.0.4

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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 6c382da963578bc9a256096419450cd02796054b7ca75d5ce77307e41897ddcd
4
- data.tar.gz: 3caba8cc044c94d98caa8b175de6b7c9b55ad183c8c0ed5d0d83321f50d34c53
3
+ metadata.gz: 50db3bc71d89b0a78756301d74e8ac147204e7921292de6da18284ab5fd586b2
4
+ data.tar.gz: 5719552ec7305be6f56edd10a27fc49f84104b247e9268df1b8b372549346603
5
5
  SHA512:
6
- metadata.gz: b528539a06aa276113e51118ca006171e062e0c43a8121db229d066ef5cf16626b15f409a2fddf8b254bae37691061d874db9776a255bef348e5b6a9d5793bc0
7
- data.tar.gz: 554494154794a213f00a7985867ad8672ef48f844dc234284a27227290ea876c8d7ef2162497a2247c9ad2315e3ad96f99b612cf6e9753e7cdf778a967ba3078
6
+ metadata.gz: 2b8719f11ff23ab4d90b02e7bfceb74c4fcf4272093ecf13ff1a7f44587acdaf1fe3ef0019077e41e34ad230f84deb7d683de5c9308a6dc9b8e696ecf86870f1
7
+ data.tar.gz: a1537c090cbcb908a88d186c79c26f4a9533b138a60041c9166317222553deaa6b545bcad9e905c591f9a1a54c5637f54a14ca28d05ccce2d7f43ca35d5da8d0
data/README.md CHANGED
@@ -54,6 +54,8 @@ export AWS_SECRET_ACCESS_KEY=your_secret_access_key
54
54
 
55
55
  Then run `source ~/.zprofile` (or equivalent command for your shell if not using .zsh)
56
56
 
57
+ Note: SSH access to created EC2 instances is granted using SSH keys existing at `~/.ssh/id_rsa.pub` and `~/.ssh/id_rsa` on your local machine. If they do not exist, create them.
58
+
57
59
  ### Installation - generate infrastructure code
58
60
 
59
61
  To generate boilerplate infrastructure code (config.host initializer filer, Dockerfile, Packer repository, and terraform repository):
@@ -170,6 +172,16 @@ terraform init # IF NOT ALREADY RUN
170
172
  terraform apply
171
173
  ```
172
174
 
175
+ ### Usage - ssh access
176
+
177
+ ssh into ec2 instance and run bash in container:
178
+
179
+ ```
180
+ ssh ubuntu@PUBLICIPOFINSTANCE
181
+
182
+ docker container exec -it APP_NAME bash
183
+ ```
184
+
173
185
 
174
186
 
175
187
  ## Infrastructure created
@@ -29,6 +29,7 @@ module TerraBoi
29
29
  generate "terra_boi:dockerfile --ruby_version #{class_options[:ruby_version]}"
30
30
  generate "terra_boi:host_initializer --domain_name #{class_options[:domain_name]}"
31
31
  generate "terra_boi:db_config"
32
+ generate "terra_boi:data_config"
32
33
  generate "terra_boi:packer"
33
34
  end
34
35
 
@@ -0,0 +1,25 @@
1
+ require "generators/extensions"
2
+
3
+ module TerraBoi
4
+ class DataConfigGenerator < Rails::Generators::Base
5
+ attr_accessor :application_name
6
+ source_root File.expand_path('templates', __dir__)
7
+
8
+ desc (<<-EOF
9
+ Generate storage.yml (default S3 config)
10
+
11
+ To execute, run rails generate terra_boi:data_config
12
+ EOF
13
+ .gsub(/\t/, '')
14
+ )
15
+
16
+ def init
17
+ # defined in lib/generators/extensions
18
+ self.application_name = generate_application_name
19
+ end
20
+
21
+ def create_data_config_file
22
+ template "data_storage_config.erb", "config/storage.yml"
23
+ end
24
+ end
25
+ end
@@ -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.11"
23
+ source = "github.com/charliereese/terraform_modules//data?ref=v0.0.14"
24
24
 
25
25
  env = "<%= config[:env] %>"
26
26
  app_name = "<%= application_name %>"
@@ -0,0 +1,34 @@
1
+ test:
2
+ service: Disk
3
+ root: <%%= Rails.root.join("tmp/storage") %>
4
+
5
+ local:
6
+ service: Disk
7
+ root: <%%= Rails.root.join("storage") %>
8
+
9
+ # Use rails credentials:edit to set the AWS secrets (as aws:access_key_id|secret_access_key)
10
+ amazon:
11
+ service: S3
12
+ access_key_id: <%%= ENV["AWS_ACCESS_KEY_ID"] %>
13
+ secret_access_key: <%%= ENV["AWS_SECRET_ACCESS_KEY"] %>
14
+ region: us-east-2
15
+ bucket: <%= application_name %>-<%%= ENV["INFRASTRUCTURE_ENV"] %>-web-assets
16
+
17
+ # Remember not to checkin your GCS keyfile to a repository
18
+ # google:
19
+ # service: GCS
20
+ # project: your_project
21
+ # credentials: <%%= Rails.root.join("path/to/gcs.keyfile") %>
22
+ # bucket: your_own_bucket
23
+
24
+ # Use rails credentials:edit to set the Azure Storage secret (as azure_storage:storage_access_key)
25
+ # microsoft:
26
+ # service: AzureStorage
27
+ # storage_account_name: your_account_name
28
+ # storage_access_key: <%%= Rails.application.credentials.dig(:azure_storage, :storage_access_key) %>
29
+ # container: your_container_name
30
+
31
+ # mirror:
32
+ # service: Mirror
33
+ # primary: local
34
+ # mirrors: [ amazon, google, microsoft ]
@@ -6,8 +6,10 @@ sudo apt -y install docker.io
6
6
  docker --version
7
7
 
8
8
  # Set DB and DockerHub usernames
9
- export DB_PASSWORD=$DB_PASSWORD
10
- export DOCKERHUB_USERNAME=$DOCKERHUB_USERNAME
9
+ echo "DB_PASSWORD=$DB_PASSWORD" >> /etc/environment
10
+ echo "DOCKERHUB_USERNAME=$DOCKERHUB_USERNAME" >> /etc/environment
11
+ echo "AWS_ACCESS_KEY_ID=$AWS_ACCESS_KEY_ID" >> /etc/environment
12
+ echo "AWS_SECRET_ACCESS_KEY=$AWS_SECRET_ACCESS_KEY" >> /etc/environment
11
13
 
12
14
  # # Start the Docker service
13
15
  sudo service docker start
@@ -36,7 +36,10 @@
36
36
  "environment_vars": [
37
37
  "DOCKERHUB_ACCESS_TOKEN={{user `DOCKERHUB_ACCESS_TOKEN`}}",
38
38
  "DOCKERHUB_USERNAME={{user `DOCKERHUB_USERNAME`}}",
39
- "DB_PASSWORD={{user `DB_PASSWORD`}}"
39
+ "DB_PASSWORD={{user `DB_PASSWORD`}}",
40
+ "AWS_ACCESS_KEY_ID={{user `AWS_ACCESS_KEY_ID`}}",
41
+ "AWS_SECRET_ACCESS_KEY={{user `AWS_SECRET_ACCESS_KEY`}}"
42
+
40
43
  ],
41
44
  "script": "ami_build.sh"
42
45
  }]
@@ -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.11"
6
+ source = "github.com/charliereese/terraform_modules//state?ref=v0.0.14"
7
7
 
8
8
  app_name = "<%= application_name %>"
9
9
  region = "us-east-2"
@@ -17,15 +17,15 @@ terraform {
17
17
  # ---------------------------------------------------------------------------------------------------------------------
18
18
 
19
19
  module "webserver_cluster" {
20
- source = "github.com/charliereese/terraform_modules//web_servers?ref=v0.0.11"
20
+ source = "github.com/charliereese/terraform_modules//web_servers?ref=v0.0.14"
21
21
 
22
- instance_type = "t2.micro"
23
- env = "<%= config[:env] %>"
24
- app_name = "<%= application_name %>"
25
- domain_name = "<%= config[:domain_name] %>"
26
- id_rsa_pub = "<%= id_rsa_pub %>"
27
- min_size = 1
28
- max_size = 1
29
- business_hours_size = 1
30
- night_hours_size = 1
22
+ instance_type = "t2.micro"
23
+ env = "<%= config[:env] %>"
24
+ app_name = "<%= application_name %>"
25
+ domain_name = "<%= config[:domain_name] %>"
26
+ id_rsa_pub = "<%= id_rsa_pub %>"
27
+ min_size = 1
28
+ max_size = 1
29
+ business_hours_size = 1
30
+ night_hours_size = 1
31
31
  }
@@ -0,0 +1,23 @@
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
+ # Set DB environment variables in docker container and
12
+ # start rails container
13
+ sudo docker container run -p 3000:3000 --name $APPLICATION_NAME --restart always -d \
14
+ -e DB_HOST=$DB_HOST \
15
+ -e DB_USERNAME=$DB_USERNAME \
16
+ -e RAILS_ENV=$RAILS_ENV \
17
+ -e INFRASTRUCTURE_ENV=$INFRASTRUCTURE_ENV \
18
+ -e AWS_ACCESS_KEY_ID=$AWS_ACCESS_KEY_ID \
19
+ -e AWS_SECRET_ACCESS_KEY=$AWS_SECRET_ACCESS_KEY \
20
+ $DOCKERHUB_USERNAME/$APPLICATION_NAME:latest
21
+
22
+ # Run outstanding DB migrations
23
+ docker container exec $APPLICATION_NAME RAILS_ENV=$RAILS_ENV rake db:migrate
@@ -36,5 +36,13 @@ module TerraBoi
36
36
  env: ['staging', 'prod']
37
37
  })
38
38
  end
39
+
40
+ def create_user_data_terraform_file
41
+ generate_terraform_files({
42
+ template: 'web_servers_user_data.erb',
43
+ file_path: 'web_servers/user-data.sh',
44
+ env: ['staging', 'prod']
45
+ })
46
+ end
39
47
  end
40
48
  end
@@ -1,3 +1,3 @@
1
1
  module TerraBoi
2
- VERSION = '0.0.3'
2
+ VERSION = '0.0.4'
3
3
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: terra_boi
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.3
4
+ version: 0.0.4
5
5
  platform: ruby
6
6
  authors:
7
7
  - Charlie Reese
@@ -48,6 +48,7 @@ files:
48
48
  - Rakefile
49
49
  - lib/generators/extensions.rb
50
50
  - lib/generators/terra_boi/boilerplate_generator.rb
51
+ - lib/generators/terra_boi/data_config_generator.rb
51
52
  - lib/generators/terra_boi/data_generator.rb
52
53
  - lib/generators/terra_boi/db_config_generator.rb
53
54
  - lib/generators/terra_boi/dockerfile_generator.rb
@@ -57,6 +58,7 @@ files:
57
58
  - lib/generators/terra_boi/templates/Dockerfile.erb
58
59
  - lib/generators/terra_boi/templates/data_main.erb
59
60
  - lib/generators/terra_boi/templates/data_output.erb
61
+ - lib/generators/terra_boi/templates/data_storage_config.erb
60
62
  - lib/generators/terra_boi/templates/db_config.erb
61
63
  - lib/generators/terra_boi/templates/host_initializer.erb
62
64
  - lib/generators/terra_boi/templates/packer_ami_build.erb
@@ -64,6 +66,7 @@ files:
64
66
  - lib/generators/terra_boi/templates/state_main.erb
65
67
  - lib/generators/terra_boi/templates/web_servers_main.erb
66
68
  - lib/generators/terra_boi/templates/web_servers_output.erb
69
+ - lib/generators/terra_boi/templates/web_servers_user_data.erb
67
70
  - lib/generators/terra_boi/web_servers_generator.rb
68
71
  - lib/tasks/terra_boi_tasks.rake
69
72
  - lib/terra_boi.rb