Skip to content

pratice to build blog api by Django and use Docker to publish on GCP

Notifications You must be signed in to change notification settings

Francescatai/blog_DjangoAPI-GCP-Docker

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

7 Commits
 
 
 
 
 
 

Repository files navigation

用Django快速搭建一個簡易Blog API並運用Docker佈署到GCP上

Project Tech Stack

Backend Frontend Database Cloud Other
Django4 Bootstrap4 MySQL GCP Docker

第一次使用Django就上手

安裝django

pip3 install django

開啟新項目

django-admin startproject [mysite]
cd [mysite]
python manage.py runserver

創建程式

python manage.py startapp [blog]

項目功能圖示

首頁

登入

登入狀態可新增文章

新增文章

查看/編輯/刪除文章

使用Docker佈署Django到GCP上(Ubuntu20.04)

安裝docker

一鍵安裝shell

$ cat <<"EOF" | bash                              
sudo apt update && \
sudo apt install apt-transport-https ca-certificates curl gnupg-agent software-properties-common -y && \
sudo apt-get remove docker  docker.io containerd runc -y && \
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add - && \
sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" && \
sudo apt update && \
sudo apt install docker-ce docker-ce-cli containerd.io -y
EOF

檢查docker運行情形

$ sudo docker run hello-world

安装 gcloud CLI

方法1

$ sudo apt update
$ sudo apt install apt-transport-https ca-certificates gnupg
$ curl https://packages.cloud.google.com/apt/doc/apt-key.gpg | sudo apt-key add -
$ echo "deb https://packages.cloud.google.com/apt cloud-sdk main" | sudo tee -a /etc/apt/sources.list.d/google-cloud-sdk.list
$ sudo apt update
$ sudo apt install google-cloud-sdk

方法2

$ sudo snap install google-cloud-sdk --classic

執行登入並選擇專案

$ cd google-cloud-sdk/bin
$ sudo gcloud init
$ gcloud auth login

建立並執行Docker file

$ mkdir -p nginx-image; cd nginx-image;touch Dockerfile
$ vim Dockerfile
#docker file
FROM python:3
ENV PYTHONUNBUFFERED 1
RUN mkdir /django-files
WORKDIR /django-files
RUN git clone [git respo url]
RUN pip install Django
RUN pip install mysqlclient
ENTRYPOINT python Django-blog-api/mysite/manage.py runserver 0.0.0.0:80
$ sudo docker build --no-cache . -t [image name]

查看docker image

$ sudo docker image ls

將Docker image上傳到GCP Container Registry

> > docker tag SOURCE_IMAGE HOSTNAME/PROJECT-ID/TARGET-IMAGE:TAG
$ sudo docker tag blog asia.gcr.io/djangopraticeblog/blog

> > docker push HOSTNAME/PROJECT-ID/IMAGE:TAG
$ sudo docker push asia.gcr.io/djangopraticeblog/blog

ISSUE:[unauthorized] You don't have the needed permissions to perform this operation, and you may have invalid credentials. To authenticate your request, follow the steps in: https://cloud.google.com/container-registry/docs/advanced-authentication

$ gcloud auth configure-docker
$ export PATH=$PATH:/lib/google-cloud-sdk/bin
$ gcloud auth print-access-token |sudo docker login -u oauth2accesstoken --password-stdin https://asia.gcr.io

建立及push Docker MySQL

$ sudo docker pull mysql:8
$ sudo docker images 

$ sudo docker tag mysql:8 asia.gcr.io/djangopraticeblog/mysql:8
$ sudo docker push asia.gcr.io/djangopraticeblog/mysql:8

新增MySQL執行個體並使用Docker image

ssh 連線測試及檢查資料庫

$ docker ps
$ docker exec -i -t 2c5fe59531e7 /bin/bash
# mysql -u root -p
mysql> show databases;

新增Web API執行個體並使用Docker image

一樣要打開http與https ssh測試Django運行

$ docker ps
$ docker exec -i -t 3579c277f5f7 /bin/bash
# ls
# cd Django-blog-api/
# cd mysite/
# python manage.py runserver

若有報錯要修改python檔(修改前記得安裝vim)

# apt-get upgrade
# apt-get update
# apt-get install vim

更改資料庫連線(host使用內部IP) 設定ALLOW HOST(外部IP) 遷移資料庫結構

# python manage.py migrate

若要使用create article時記得要新增tag類別 建立使用者

# python manage.py createsuperuser

使用外部IP測試連線

About

pratice to build blog api by Django and use Docker to publish on GCP

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published