iT邦幫忙

1

[DAY9] Django與Docker Compose後端開發實戰 - 部署Django應用至Google Cloud Platform (GCP)

  • 分享至 

  • xImage
  •  

在上一篇文章中,我們學習了如何使用Nginx作為反向代理,並配置正式環境的Docker Compose設置。

[DAY8] Django與Docker Compose後端開發實戰 - 建立Nginx與正式環境配置

本篇文章中,我們將探討如何將Django應用部署到Google Cloud Platform(GCP)上,並使用GCP提供的虛擬機來運行我們的應用。

部署到GCP雲端上

Google Cloud Platform(GCP)提供了一套完整的雲端解決方案,包括計算、存儲和網絡服務。使用GCP,我們可以輕鬆地擴展應用程序,實現高可用性和高性能。此外,GCP還提供了一系列工具和服務,幫助我們監控和管理雲端資源。

安裝Gcloud CLI

首先,我們需要安裝Gcloud CLI,以便通過命令行與GCP進行交互。請先使用Gmail帳號註冊並登入GCP,接著進入GCP主頁:

雲計算服務 | Google Cloud

下載GCP CLI並執行安裝:

安裝 gcloud CLI  |  Google Cloud CLI Documentation

下載後,回到解壓縮檔案的根目錄執行安裝指令:

./google-cloud-sdk/install.sh

接著執行初始化指令:

./google-cloud-sdk/bin/gcloud init

創建虛擬實例

接下來,我們需要創建一個虛擬機實例來運行我們的應用。首先,進入GCP主頁,點擊左上方的下拉選單,選擇“創建項目”:

https://ithelp.ithome.com.tw/upload/images/20240610/20162710Vw5WqoPTcb.png

輸入項目名稱,選擇項目所屬的組織(如果有),然後點擊創建:

https://ithelp.ithome.com.tw/upload/images/20240610/201627108t5Kge8oIW.png

創建完成後,切換到新創建的項目,點擊左上角的三條線打開導航菜單,選擇Compute Engine:

https://ithelp.ithome.com.tw/upload/images/20240610/20162710o0YyRcEZkh.png

點擊啟用Compute Engine API,等待其啟動:

https://ithelp.ithome.com.tw/upload/images/20240610/20162710fe7mFpI0y8.png

啟動完成後,點擊“創建實例”:

https://ithelp.ithome.com.tw/upload/images/20240610/201627107NSZ7atZTf.png

設置實例名稱和區域,選擇適合的機器配置(例如輕量級機器):

https://ithelp.ithome.com.tw/upload/images/20240610/20162710AxBytBPKP7.png

https://ithelp.ithome.com.tw/upload/images/20240610/20162710pZvAoPK9DV.png

允許HTTP和HTTPS流量,然後點擊創建:

https://ithelp.ithome.com.tw/upload/images/20240610/201627100B7FnYFkOM.png

使用Gcloud CLI

接著需要會一些基礎的Gcloud CLI指令以管理和操作GCP資源。首先查看當前已認證的Google帳號:

gcloud auth list

如果沒有登入的帳號,可以使用以下指令來登入:

gcloud auth login

登入成功後,可以查看當前配置的項目和區域:

gcloud config list

使用以下指令連接到虛擬機:

gcloud compute ssh --project=PROJECT_ID --zone=ZONE VM_NAME

舉例:

gcloud compute ssh lucien-vm --project=test-project-421102 --zone=asia-east1-a

安裝和設定專案

設置完成GCP後,我們需要在方才創建好的虛擬機上,我安裝一些必要的軟件並克隆專案倉庫:

更新包管理器:

sudo apt update

安裝Git:

sudo apt install git

克隆專案倉庫:

git clone <YOUR REPO URL>

安裝Docker Compose:

sudo curl -L "https://github.com/docker/compose/releases/download/v2.10.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
sudo chmod +x /usr/local/bin/docker-compose

將當前使用者添加到Docker組,$USER請替換成您當前的使用者名稱:

sudo groupadd docker
sudo usermod -aG docker $USER
newgrp docker

接著我們測試看看Docker是否成功安裝了

docker run hello-world

接下來需要創建.env檔並填寫資料庫資訊和虛擬機的外部IP:

  • .env
MYSQL_ROOT_PASSWORD=mariadb_root_password
MYSQL_DATABASE=mydatabase
MYSQL_USER=myuser
MYSQL_PASSWORD=mypassword
DJANGO_ALLOWED_HOSTS=35.229.194.213

啟動專案:

docker-compose up --build -d

查看是否正常運行:

docker ps

接下來需要遷移Django的資料庫:

docker exec -it backend-api-services python manage.py makemigrations
docker exec -it backend-api-services python manage.py migrate

創建超級使用者帳號:

docker exec -it backend-api-services python manage.py createsuperuser

創建群組king並將使用者添加到該群組:

docker exec -it backend-api-services python manage.py shell

在Python Shell中執行:

from django.contrib.auth import get_user_model
from django.contrib.auth.models import Group
User = get_user_model()
user = User.objects.get(username='test') # 假設你的使用者名稱是test
king_group = Group.objects.get_or_create(name='king')[0]
king_group.user_set.add(user)
exit()

現在你可以呼叫Hello的API了!

當Admin沒有正確加載靜態文件時

創建設置和權限:

sudo mkdir -p /var/www/static
sudo chown -R www-data:www-data /var/www/static
sudo chmod -R 755 /var/www/static
ls -la /var/www/

運行collectstatic命令,將靜態文件STATIC_ROOT弄到指定目錄:

docker exec -it <django-container-name> python manage.py collectstatic --noinput

關閉容器並重啟:

docker-compose down
docker-compose up -d

結論

在這篇文章中,我們學習了如何將Django應用部署到GCP雲端上。我們介紹了如何創建虛擬機、安裝和配置必要的軟件、克隆專案、配置環境變量以及啟動應用程序。這是本系列的最後一篇文章,通過這個系列的教學,我們從零開始一步步建立了一個完整的Django應用,並在Docker和雲端環境中部署了它。我們探討了從開發到部署的各個環節,包括設置開發環境、使用Docker Compose、配置Nginx、整合Swagger、設置Logger、Middleware和CORS等。

希望這個系列的教學能夠幫助你更好地理解和掌握Django和Docker的應用,並成功地將你的項目部署到生產環境。如果你有任何問題或建議,歡迎隨時聯繫我。感謝你的閱讀,祝你在學習和開發的道路上取得更多的成功。

/images/emoticon/emoticon01.gif


圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言