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 +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
|