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 +4 -4
- data/README.md +12 -0
- data/lib/generators/terra_boi/boilerplate_generator.rb +1 -0
- data/lib/generators/terra_boi/data_config_generator.rb +25 -0
- data/lib/generators/terra_boi/templates/data_main.erb +1 -1
- data/lib/generators/terra_boi/templates/data_storage_config.erb +34 -0
- data/lib/generators/terra_boi/templates/packer_ami_build.erb +4 -2
- data/lib/generators/terra_boi/templates/packer_application.erb +4 -1
- data/lib/generators/terra_boi/templates/state_main.erb +1 -1
- data/lib/generators/terra_boi/templates/web_servers_main.erb +10 -10
- data/lib/generators/terra_boi/templates/web_servers_user_data.erb +23 -0
- data/lib/generators/terra_boi/web_servers_generator.rb +8 -0
- data/lib/terra_boi/version.rb +1 -1
- metadata +4 -1
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 50db3bc71d89b0a78756301d74e8ac147204e7921292de6da18284ab5fd586b2
|
4
|
+
data.tar.gz: 5719552ec7305be6f56edd10a27fc49f84104b247e9268df1b8b372549346603
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
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.
|
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
|
-
|
10
|
-
|
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.
|
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.
|
20
|
+
source = "github.com/charliereese/terraform_modules//web_servers?ref=v0.0.14"
|
21
21
|
|
22
|
-
instance_type
|
23
|
-
env
|
24
|
-
app_name
|
25
|
-
domain_name
|
26
|
-
id_rsa_pub
|
27
|
-
min_size
|
28
|
-
max_size
|
29
|
-
business_hours_size
|
30
|
-
night_hours_size
|
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
|
data/lib/terra_boi/version.rb
CHANGED
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.
|
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
|