terra_boi 0.0.3 → 0.0.4

Sign up to get free protection for your applications and to get access to all the features.
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