samwit / devfest23-containers-demo

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

Journey of application deployment on GCP

Test

curl http://localhost:8000
curl http://localhost:8001/chain

01 Coding

python3 -m venv .venv
source .venv/bin/activate
pip install -r requirements.txt
python main.py

deactivate

02 Docker

docker build -t python-fastapi .
docker run -d -p 8000:8000 --name fastapi python-fastapi

docker rm -f fastapi

docker run -d -p 8003:8000 --name app-c python-fastapi
docker run -d -p 8002:8000 --name app-b python-fastapi
docker run -d -p 8001:8000 --name app-a --link app-b:app-b --link app-c:app-c python-fastapi

docker rm -f app-a app-b app-c

03 Docker Compose

docker compose up --build

docker compose down

04 Cloud Run

gcloud run deploy --source . --region asia-southeast1 --port 8000 app-a --allow-unauthenticated --quiet

05 Update Code on Cloud Run

gcloud run deploy --source . --region asia-southeast1 --port 8000 app-a --allow-unauthenticated

06 Cloud Code on VSCode

  • Open Duet AI
    • explain this code to me
  • Edit main.py and put the following comment
    • # Function to plus number by get endpoint /plus/i/j to plus i and j number together

07 Unit Test

  • Open Duet AI
    • Please write unittest with pytest on test_main.py file
      • Fix by put from fastapi.testclient import TestClient and use TestClient(app) on response accordingly
source ../01/.venv/bin/activate
pip install -r requirements-dev.txt
pytest
# Remove failed test

deactivate

08 Deploy from source code

gcloud source repos create python-fastapi

# Go to SET UP CONTINUOUS DEPLOYMENT in Cloud Run

# Change Code to v3
git remote add google ssh://[YOUR EMAIL]@source.developers.google.com:2022/p/{YOUR GCP PROJECT}/r/python-fastapi
git push --all google

09 CI/CD with Cloud Build

10 Dev and Production

gcloud deploy apply --file clouddeploy.yaml --region asia-southeast1
# Edit Cloud Build trigger from 10 directory 
# Change to v5

gcloud beta run domain-mappings --region asia-southeast1 create \
  --service=app-a-dev --domain=app-a.dev.demo.opsta.dev
gcloud beta run domain-mappings --region asia-southeast1 create \
  --service=app-b-dev --domain=app-b.dev.demo.opsta.dev
gcloud beta run domain-mappings --region asia-southeast1 create \
  --service=app-c-dev --domain=app-c.dev.demo.opsta.dev
gcloud beta run domain-mappings --region asia-southeast1 create \
  --service=app-a-prd --domain=app-a.demo.opsta.dev
gcloud beta run domain-mappings --region asia-southeast1 create \
  --service=app-b-prd --domain=app-b.demo.opsta.dev
gcloud beta run domain-mappings --region asia-southeast1 create \
  --service=app-c-prd --domain=app-c.demo.opsta.dev

# gcloud deploy releases create fastapi-release-$(date +"%Y%m%d%H%M") \
#   --delivery-pipeline fastapi --skaffold-file skaffold.yaml --region asia-southeast1 \
#   --images 'fastapi=asia-southeast1-docker.pkg.dev/{YOUR GCP PROJECT}/devfest/fastapi@sha256:87ded8770178d25b286ef74f332fb2574300ab83a97bf672940bbede3dae6de1'

11 Observability

k6 run k6-load-testing.js

Security

About


Languages

Language:Python 93.9%Language:Dockerfile 4.8%Language:JavaScript 1.3%