diff --git a/.gitignore b/.gitignore index c47c9fc..12a4f17 100644 --- a/.gitignore +++ b/.gitignore @@ -1,3 +1,4 @@ .idea .vscode **node_modules +config.json diff --git a/Makefile b/Makefile new file mode 100644 index 0000000..250dd88 --- /dev/null +++ b/Makefile @@ -0,0 +1,12 @@ +build: + chmod +x pre-run.sh + ./pre-run.sh first_deploy + +start: + chmod +x pre-run.sh + ./pre-run.sh + +clean: + echo Deletes all local Kubernetes cluster. This command deletes the VM, and removes all associated files. + minikube stop + minikube delete --all diff --git a/README.md b/README.md index 8259a99..3dd0259 100644 --- a/README.md +++ b/README.md @@ -74,6 +74,17 @@ docker build -t hakimixx/docker-infra-client:v1 client docker push hakimixx/docker-infra-client:v1 ``` +### Minikube +To run the entire application with minikube on mac use: +```shell +make start +``` + +To clean up run: +```shell +make clean +``` + ### Terraform Terraform allows us to manage infrastructure as code (IaC) rather than using a graphical user interface. It allows us to manage the infrastructure in a safe, consistent and diff --git a/kubernetes/deployments/client-deployment.yml b/kubernetes/deployments/client-deployment.yml index a62e028..94f6753 100644 --- a/kubernetes/deployments/client-deployment.yml +++ b/kubernetes/deployments/client-deployment.yml @@ -14,6 +14,7 @@ spec: spec: containers: - name: client - image: hakimixx/docker-infra-client:v1.1 + image: hakimixx/docker-infra-client:latest + imagePullPolicy: Always ports: - containerPort: 3000 diff --git a/kubernetes/deployments/server-deployment.yml b/kubernetes/deployments/server-deployment.yml index ed014d0..59e07a1 100644 --- a/kubernetes/deployments/server-deployment.yml +++ b/kubernetes/deployments/server-deployment.yml @@ -14,9 +14,10 @@ spec: spec: containers: - name: server - image: hakimixx/docker-infra-server + image: hakimixx/docker-infra-server:latest ports: - containerPort: 5000 + imagePullPolicy: Always env: - name: PORT value: '5000' @@ -37,3 +38,4 @@ spec: secretKeyRef: name: pgpassword # name of secret key: PGPASSWORD # secret key (secret is stored as key-value-pair) + diff --git a/kubernetes/deployments/worker-deployment.yml b/kubernetes/deployments/worker-deployment.yml index f0e834b..252c318 100644 --- a/kubernetes/deployments/worker-deployment.yml +++ b/kubernetes/deployments/worker-deployment.yml @@ -14,11 +14,12 @@ spec: spec: containers: - name: worker - image: hakimixx/docker-infra-worker + image: hakimixx/docker-infra-worker:latest env: - name: REDIS_HOST value: redis-cluster-ip-service # name of service here - name: REDIS_PORT value: '6379' # default redis port + imagePullPolicy: Always diff --git a/pre-run.sh b/pre-run.sh new file mode 100755 index 0000000..04dcc03 --- /dev/null +++ b/pre-run.sh @@ -0,0 +1,45 @@ +#!/bin/bash +CURRENT_PATH=$PWD +eval $(minikube docker-env) +echo $CURRENT_PATH +echo $CURRENT_PATH | rev | cut -d "/" -f1 | rev +FILES=(client-deployment.yml server-deployment.yml worker-deployment.yml) +PATH_OF_DOCKERFILES=$(echo $CURRENT_PATH | rev | cut -d "/" -f1 | rev) + +first_deploy() { + minikube start + minikube addons enable ingress + eval $(minikube docker-env) + kubectl create secret generic pgpassword --from-literal PGPASSWORD=postgres +} + +if [[ ! -z "$1" ]]; then first_deploy; fi + +docker build -t "$PATH_OF_DOCKERFILES"/docker-infra-client:latest -t "$PATH_OF_DOCKERFILES"/docker-infra-client:latest -f ./client/Dockerfile ./client +docker build -t "$PATH_OF_DOCKERFILES"/docker-infra-server:latest -t "$PATH_OF_DOCKERFILES"/docker-infra-server:latest -f ./server/Dockerfile ./server +docker build -t "$PATH_OF_DOCKERFILES"/docker-infra-worker:latest -t "$PATH_OF_DOCKERFILES"/docker-infra-worker:latest -f ./worker/Dockerfile ./worker + +cd $CURRENT_PATH/kubernetes/deployments +# Use local images in minikube - this probably won't work on ubuntu +for key in ${!FILES[@]}; do + sed -i "" "/^\([[:space:]]*imagePullPolicy: \).*/s//\1Never/" ${FILES[${key}]} +done +cd $CURRENT_PATH + +./scripts/apply-resources.sh +kubectl rollout restart deployment client-deployment +kubectl rollout restart deployment server-deployment +kubectl rollout restart deployment worker-deployment + +cd $CURRENT_PATH/kubernetes/deployments +# Resetting values changed. +for key in ${!FILES[@]}; do + sed -i "" "/^\([[:space:]]*imagePullPolicy: \).*/s//\1Always/" ${FILES[${key}]} +done +cd $CURRENT_PATH +echo +echo +echo +echo sometimes it gets stuck just do ctrl + c on it, do verify by refreshing website. +minikube -p minikube docker-env +minikube tunnel