Skip to content
No description, website, or topics provided.
HCL Shell TypeScript JavaScript Makefile
Branch: master
Clone or download
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Permalink
Type Name Latest commit message Commit time
Failed to load latest commit information.
.circleci ci: fix circleci file formatting Jul 24, 2019
.githooks Intial public commit, Version 1.0.0. Jun 25, 2019
.github Intial public commit, Version 1.0.0. Jun 25, 2019
.make chore(circle): manage target specific circleci variables Jul 9, 2019
applications chore(make): streamline the creation of new installation Jul 3, 2019
aws ci: fix missing cd to infrastructure dir Jul 24, 2019
byor-gauge Gauge based tests added Aug 17, 2019
charts Intial public commit, Version 1.0.0. Jun 25, 2019
config
docker/base-image Intial public commit, Version 1.0.0. Jun 25, 2019
k8s Intial public commit, Version 1.0.0. Jun 25, 2019
logs chore(circle): manage target specific circleci variables Jul 9, 2019
modules chore(terraform): fix security_groups compatibility issues with versi… Jul 13, 2019
src Intial public commit, Version 1.0.0. Jun 25, 2019
tmp
.gitignore Gauge based tests added Aug 17, 2019
.talismanrc ci: fix missing cd to infrastructure dir Jul 24, 2019
CODE_OF_CONDUCT.md Intial public commit, Version 1.0.0. Jun 25, 2019
CONTRIBUTING.md Intial public commit, Version 1.0.0. Jun 25, 2019
LICENSE Initial commit May 16, 2019
Makefile Intial public commit, Version 1.0.0. Jun 25, 2019
README.md docs(readme): fixes to paragraph "Running BYOR-VotingApp locally" Jul 11, 2019
SECURITY.md Intial public commit, Version 1.0.0. Jun 25, 2019
SUPPORT.md Intial public commit, Version 1.0.0. Jun 25, 2019
deployment.sh Intial public commit, Version 1.0.0. Jun 25, 2019
humans.txt Intial public commit, Version 1.0.0. Jun 25, 2019
main.tf chore(terraform): fix wrong cast to array of cidr_block for compatibi… Jul 13, 2019
outputs.tf Intial public commit, Version 1.0.0. Jun 25, 2019
terraform.tf.sample chore(terraform): upgrade to terraform 0.12 Jul 10, 2019
terraform.tfvars.sample Intial public commit, Version 1.0.0. Jun 25, 2019
variables.tf.sample chore(terraform): upgrade to terraform 0.12 Jul 10, 2019

README.md

BYOR-VotingApp [infrastructure]

Welcome to the repository for the infrastructure setup of BYOR-VotingApp!

You can find more information about the BYOR-VotingApp in the web-app Github repository.

Table Of Contents

Running BYOR-VotingApp locally

Deploy BYOR-VotingApp to AWS Lambda

Deploy BYOR-VotingApp to Kubernetes

How to contribute to the project

Running BYOR-VotingApp locally

  1. install Docker
  2. open the terminal
  3. clone the project
    git clone https://github.com/thoughtworks/byor-voting-web-app.git
  4. move into the project folder
    cd byor-voting-web-app
  5. startup web app, server, and a local MongoDB
    docker-compose -f docker-compose.all.yml up
  6. access the application front-end on http://localhost:4201

if needed, application back-end is accessible on http://localhost:3001 and application's mongo database is accessible at localhost:27019

Please refer to BYOR-VotingApp [web-app] Github repository for more options on running the application locally.

Deploy BYOR-VotingApp to AWS Lambda

Prerequisites

git clone https://github.com/thoughtworks/byor-voting-web-app.git
  • clone VotingApp [server]
git clone https://github.com/thoughtworks/byor-voting-server.git
  • clone VotingApp [infrastructure]
git clone https://github.com/thoughtworks/byor-voting-infrastructure.git

Setting up an AWS account

  1. sign-in or create a new account in AWS
  2. go to IAM -> Users
  3. create a new user to be used for deployment
  4. create an Access key for the user and download it

    keep note of the Access key ID and Secret access key contained inside the file, they will be asked later by the deployment script.

Settting up MongoAtlas account and database

  1. sign-in or create a new account in MongoAtlas
  2. create a new database using a lowercase name without spaces (e.g. production) and use migrations for the collection name
  3. go to Database Access
  4. create a user setting add default privileges to readWrite for the database defined above
  5. go to Project, click on connect and then on Connect your application
  6. select Node.js from Driver dropdown

    keep note of the Connection string only (replace the <password> with the user password defined above), it will be asked later by the deployment script

  7. go to Project, click on ... and then on Command Line Tools

    keep note of the --host parameter value from the mongorestore example, it will be asked later by the deployment script

Deploying the application

Run the deploy_to_lambda.sh script passing the name of the installation. Use a lowercase name, without spaces (e.g. production). If you want to deploy to several installation targets at once pass them as a comma separated list (e.g. test,production).

cd byor-voting-infrastructure
aws/deploy_to_lambda.sh <installation_name1[,installation_nameX]>

The first time you run the script you will be asked to enter several informations. Afterwards, all the parameters will be stored inside the config/byor_<installation_name>.sh file. If you change some of the configuration values later, please either delete the file and let the script ask you again them, or update the file manually.

Requested values:

  • AWS access key id [AWS_ACCESS_KEY_ID]: the value of the Access key ID field contained downloaded file from point 4 of AWS instructions
  • AWS secret access [AWS_SECRET_ACCESS_KEY]: the value of the Secret access key field contained downloaded file from point 4 of AWS instructions
  • AWS region [AWS_REGION]: the AWS region where you want to host the application
  • MongoDB connection string [MONGO_HOME]: the local path of your mongodb installation home (required if you want to perform backups)
  • MongoDB database [MONGO_HOST]: the value from point 7 in the MongoAtlas instructions
  • MongoDB host [MONGO_USER]: the value from point 4 in the MongoAtlas instructions
  • MongoDB username [MONGO_PWD]: the value from point 4 in the MongoAtlas instructions
  • MongoDB password [MONGO_AUTH_DB]: the default value (admin) is usually the right one
  • MongoDB admin database [MONGO_URI]: he value from point 6 in the MongoAtlas instructions

The script will create S3 buckets with the following naming conventions:

  • <installation_name>--byor: contains the build-your-own-radar SPA (single page application)
  • <installation_name>--byor-voting: contains the byor-voting-server deployed as lambda
  • <installation_name>--byor-voting-web-app: contains the byor-voting-web-app SPA (single page application)

The script will configure <installation_name>--byor and <installation_name>--byor-voting-web-app buckets as static contents' web server.

Updating the application

To update the web-app or the server, just execute again the aws/deploy_to_lambda.sh script as above.

Deploy BYOR-VotingApp to Kubernetes

Provisioning AWS EKS Kubernetes cluster

Setting up AWS

  1. login into AWS console:

    if you want you can use aws/create_s3_bucket.sh script to perform the operation

  2. inside terraform.tf
    • replace <terraform-state-storage> with the S3 bucket you create above
    • replace <region> with the AWS region of your choice
  3. inside variable.tf
    • replace <AMI-ID> with the AMI ID
    • replace <keypair name> with the Keypair name
    • customize other settings for eks (e.g. node_instance_type) based on your needs.
  4. inside terraform.tfvars replace <aws_access_key>, <aws_secret_key>,<aws_zones> with your AWS settings

Provisioning with Terraform

  1. open terminal and login into AWS
  2. move into the VotingApp [infrastructure] project folder
  3. duplicate terraform template files to replace sample variables:
    cp terraform.tf.sample terraform.tf
    cp terraform.tfvars.sample terraform.tfvars
    cp variables.rf.sample variables.rf
  4. if this is the first time you run terraform, execute:
    terraform init
  5. review the plan outputs:
    terraform plan
  6. if everything looks good, run:
    terraform apply
  7. if everything looks good, run:
    terraform apply
  8. to install Isto, Cert-Manager, Kiali secrets, and Let's encrypt secrets:
    source k8s/k8s_setup.sh
  9. if you want to delete all the resources managed by terraform, run:
    terraform destroy

Setting up an already provisioned Kubernetes cluster

  1. set the KUBECONFIG context
    export KUBECONFIG=<path-to-kubeconfig>
    echo "export KUBECONFIG=${KUBECONFIG}" >> ${HOME}/.bashrc
  2. if you don't have already installed Isto, Cert-Manager, Kiali secrets, and Let's encrypt secrets, you can do it running:
    k8s/k8s_setup.sh

Deploying the application

  1. install helm
  2. add the repositories for web-app, server, and infrastructure
    helm repo add byor-voting-web-app https://raw.githubusercontent.com/thoughtworks/byor-voting-web-app/master/charts
    helm repo add byor-voting-server https://raw.githubusercontent.com/thoughtworks/byor-voting-server/master/charts
    helm repo add byor-voting-infrastructure https://raw.githubusercontent.com/thoughtworks/byor-voting-infrastructure/master/charts
  3. deploy BYOR-VotingApp:
    helm install byor-voting-chart

Updating the application

To update the VotingApp, just repeat the step 3 above.

HOWTOs

Access Kubernetes Dashboard:

Admin Username : k8s-admin

  1. get token
    kubectl -n kube-system describe secret $(kubectl -n kube-system get secret | grep k8s-admin | awk '{print $1}')
  2. run the proxy
    kubectl proxy`` command in provision machine.
  3. access the dashboard at http://localhost:8001/api/v1/namespaces/kube-system/services/

Validating certificate issuer.

kubectl describe clusterissuer <cluster issuer name>
kubectl -n istio-system describe certificate <certificate name>

Access Kiali dashboard

kubectl -n istio-system port-forward $(kubectl -n istio-system get pod -l app=kiali -o jsonpath='{.items[0].metadata.name}') 20001:20001 &

Access Jaeger dashboard

⚠️ [TODO]

kubectl port-forward -n istio-system $(kubectl get pod -n istio-system -l app=jaeger -o jsonpath='{.items[0].metadata.name}') 16686:16686  &

Access Grafana dashboard

⚠️ [TODO]

kubectl -n istio-system port-forward $(kubectl -n istio-system get pod -l app=grafana -o jsonpath='{.items[0].metadata.name}') 3000:3000 &

Generating certificates with Let's encrypt

⚠️ [TODO]

How to manage secrets

⚠️ [TODO]

How to contribute to the project

Please refer to CONTRIBUTING.md for all the information about how to contribute.

You can’t perform that action at this time.