11#! /bin/bash
22set -e
33
4+ BUILD=false
5+ SCRIPT_DIR=" $( cd " $( dirname " $0 " ) " && pwd) "
46PROJECT_ID=" threadit-api"
57CLUSTER_NAME=" threadit-cluster"
68ZONE=" europe-west1-b"
9+ SERVICES=(db community thread comment vote search popular)
710
8- SKIP_BUILD=false
9-
10- # Check for --skip-build flag
11- if [[ " $1 " == " --skip-build" ]]; then
12- SKIP_BUILD=true
13- echo " Skipping image build and push..."
14- fi
15-
11+ # Set project and set up cluster context
1612gcloud config set project $PROJECT_ID
13+ gcloud container clusters get-credentials $CLUSTER_NAME --zone=$ZONE
1714
18- # Auth Docker with GCR
19- gcloud auth configure-docker
15+ GCS_KEY=" gcs-key"
16+ BUCKET_SECRET=$( gcloud secrets versions access latest --secret=$GCS_KEY )
17+ MONGO_USER=$( gcloud secrets versions access latest --secret=" mongo-user" )
18+ MONGO_PASS=$( gcloud secrets versions access latest --secret=" mongo-pass" )
2019
21- # Move to repo code root (Threadit/code/)
22- cd " $( dirname " $0 " ) /../../"
20+ # Check for --build flag
21+ if [[ " $1 " == " --build" ]]; then
22+ BUILD=true
23+ echo " Building and pushing images..."
24+ fi
25+
26+ # Build and push docker images
27+ build_and_push_images () {
28+ cd " $SCRIPT_DIR /../../" || exit 1
2329
24- # Services list
25- SERVICES=(db-service community-service thread-service comment-service vote-service search-service popular-service)
30+ gcloud auth configure-docker
2631
27- if [ " $SKIP_BUILD " = false ]; then
28- # Build and push all service images
2932 for SERVICE in " ${SERVICES[@]} " ; do
30- docker build -t gcr.io/$PROJECT_ID /$SERVICE :latest -f services/$SERVICE /Dockerfile .
31- docker push gcr.io/$PROJECT_ID /$SERVICE :latest
33+ docker build -t gcr.io/$PROJECT_ID /" $SERVICE -service " :latest -f services/" $SERVICE -service " /Dockerfile .
34+ docker push gcr.io/$PROJECT_ID /" $SERVICE -service " :latest
3235 done
3336
34- # gRPC Gateway
3537 docker build -t gcr.io/$PROJECT_ID /grpc-gateway:latest -f grpc-gateway/Dockerfile .
3638 docker push gcr.io/$PROJECT_ID /grpc-gateway:latest
37- fi
3839
39- # Move to Kubernetes directory
40- cd kubernetes
40+ cd " $SCRIPT_DIR " || exit 1
41+ }
4142
42- # Authenticate and set up cluster context
43- gcloud container clusters get-credentials $CLUSTER_NAME --zone=$ZONE
43+ # Build and push images if --build is passed
44+ if [ " $BUILD " = true ]; then
45+ build_and_push_images
46+ fi
4447
45- # Apply general config
46- kubectl apply -n $CLUSTER_NAME -f config.yaml
48+ cd " $SCRIPT_DIR /.." || exit 1
4749
48- # Traefik
50+ # Deploy traefik
51+ helm repo add traefik https://traefik.github.io/charts
52+ helm repo update
4953helm upgrade --install traefik traefik/traefik -n $CLUSTER_NAME -f traefik/values.yaml
54+
5055kubectl apply -n $CLUSTER_NAME -f traefik/cors.yaml
5156kubectl apply -n $CLUSTER_NAME -f traefik/strip-prefix.yaml
5257
53- # MongoDB
58+ # Deploy threadit application
59+ kubectl create secret generic " bucket-secret" \
60+ --from-literal=" $GCS_KEY .json=$BUCKET_SECRET " \
61+ -n $CLUSTER_NAME --dry-run=client -o yaml | kubectl apply -f -
62+
63+ kubectl create secret generic " mongo-secret" \
64+ --from-literal=" MONGO_INITDB_ROOT_USERNAME=$MONGO_USER " \
65+ --from-literal=" MONGO_INITDB_ROOT_PASSWORD=$MONGO_PASS " \
66+ -n $CLUSTER_NAME --dry-run=client -o yaml | kubectl apply -f -
67+
68+ kubectl apply -n $CLUSTER_NAME -f config.yaml
5469kubectl apply -n $CLUSTER_NAME -f mongo/
5570
56- # Services
5771for SERVICE in " ${SERVICES[@]} " ; do
58- kubectl apply -n $CLUSTER_NAME -f services/$SERVICE /
72+ kubectl apply -n $CLUSTER_NAME -f services/" $SERVICE -service " /
5973done
6074
61- # gRPC Gateway
6275kubectl apply -n $CLUSTER_NAME -f grpc-gateway/
0 commit comments