iT邦幫忙

2021 iThome 鐵人賽

DAY 4
1
AI & Data

觀賞魚辨識的YOLO全餐系列 第 4

安裝 Django 在 Amazon Linux 2-Day 04

安裝 Django 在 Amazon Linux 2-Day 04

因為魚類辨識系統會使用到 Python 來進行訓練跟預測,而這些功能都是會在後端完成,為了考慮與後端的 YOLO 的整合,所以選擇一個後端的 Python 開發框架,因為所需要的功能並不複雜,Flask 與 Django 都是可以參考的對象後來考慮這項專案對於後端的需求如下:

  • 可以實作 RESTful Web Service
  • 可以實作跨域共享 (Cross-origin resource sharing, CORS),這主要是因為需要提供手機存取
  • 可以存取資料庫
  • 可以協同開發,多人同時進行
  • 可以結合 YOLO 辨識系統
  • 可以結合原有網頁服務器,如 apache,nginx 等

基於以上考量,後來選擇使用 Django 這個網站框架,Django 使用 Python 語言編寫,是一個廣受歡迎、且功能完整的服務器端網站框架。接下來將逐步完成 Django 的安裝跟配置。

安裝 Django

Django 是依附在 Python 之下,所以並不限定作業系統,不管是 Linux, Mac OS, 或是 Windows,而 Python 2 或 Python 3 都可以安裝,但是 Python 2.7 不能與 Django 2.0 一起使用,Django 1.11.x 系列是最後一個支持 Python 2.7 的系列。

在資料庫的支援下,Django 支持四個主要數據庫:PostgreSQL,MySQL,Oracle 和 SQLite,Django 默認配置為使用 SQLite。但這些限制並不是強迫的限制,畢竟它是基於於 Python 所建立的框架,所以還是有彈性的,可以為其他的 SQL 和 NOSQL 數據庫,提供不同級別的支持。

有三個管道可以取得 Django:

  • 透過 Python 套件倉儲 PyPi,使用 pip/pip3 工具,這是獲取最新穩定版本的Django的最佳方式.
  • 使用作業系統內所內建的的軟體包管理工具,如 yum 或是 conda 等。
  • 從 Django 的官方網站下載原始代碼進行安裝,這不是推薦給初學者。

因為這個專案的主機是來自aws是先安裝好的ami鏡像檔,所以需要先確認的試鏡像中的 Python 版本,此外在安裝上強烈建議使用虛擬環境安裝,這樣有助於將來專案的移植。

先檢查 python 與 pip 的版本,因為考慮專案的相容性,預設都會安裝多個 Python 版本,登錄 ec2 主機,輸入以下指令確認目前主機(AWS Deep Learning AMI (Amazon Linux 2) version:49)內的 Python 安裝情形

python -V
python3 -V
pip -V
pip3 -V

由下圖檢視執行結果可以發現 EC2 主機安裝了兩個不同版本的 Python,而安裝工具 pip/pip3 也分別對應到不同的版本的 Python,而我們需要的是將 Django 安裝在 python3 的環境下,本次專案會專門創建一個虛擬環境來安裝 Django 以及後續所需要的套件。

https://ithelp.ithome.com.tw/upload/images/20210904/20129510TJDXsrNgTi.png
圖 1、檢視 AWS EC2 的 python 安裝情形

虛擬環境搭建是在 PEP 405 中制定,這個 PEP 提議向 Python 添加一種輕量級「虛擬環境」 機制,該環境具有自己的站點目錄,可以選擇與系統站點目錄隔離。每個虛擬環境都有自己的 Python 二進制文件,允許使用各種 Python 版本創建環境,並且可以在其站點目錄中有自己獨立的已安裝 Python 套件,但是與已安裝的 Python 基礎共享標準庫。

虛擬環境是個觀念,而實現這個觀念的工具在 Python 2 是 virtualenv,Python 3 是 venv,它允許我們創建獨立的 Python 環境。
使用虛擬環境可以為我們的 Python 應用程序創建隔離環境,並允許在該隔離環境中安裝 Python 套件,而不是全局安裝它們。歸納當然使用虛擬環境有幾個優點:

  • 不同項目可以使用不同版本的相同套件,且不互相影響。
  • 啓動虛擬環境後,pip 安裝的套件會被放在虛擬環境中,每個項目就可以擁有一個獨立的環境。
  • 套件版本升級時不會影響到其他的項目。
  • 在沒有權限的情況下安裝新套件。

如果使用的是Python 3.3 或更高版本,venv 模塊是創建和管理虛擬環境的首選方式,並已經內建在套件中,所以可以不用再安裝,而目前ec2內的python版本是3.7,所以可以不用安裝虛擬環境套件,透過以下指令我們逐步創建虛擬環境 fishRecognition ,激活並進入虛擬環境,更新虛擬環境中的pip3安裝工具,安裝django,檢視安裝路徑,最後再透過deactivate離開虛擬環境。透過檢視虛擬環境的動作,下圖顯示操作結果。我們可以發現,所謂虛擬環境就是會把所需要的套件都安裝在指定目錄下。

python3 -m venv fishRecognition
source fishRecognition/bin/activate
python3 -m pip install --upgrade pip
pip3 install django
ls -la /home/ec2-user/fishRecognition/lib64/python3.7/site-packages/
deactivate

https://ithelp.ithome.com.tw/upload/images/20210904/20129510wp6V42q8QW.png
圖 2、建立虛擬環境並安裝 Django

為了讓每次登錄ec2都能自動激活fishRecognition的虛擬環境,所以修改 .bashrc ,在命令列輸入以下指令。

cd
vi .bashrc

在 vi 編輯器中,在檔案後面新增以下指令敘述,完成後存檔離開,如下圖所示,下次登錄後就會自動激活虛擬環境。

# fishRecognition initialize
. /home/ec2-user/fishRecognition/bin/activate

https://ithelp.ithome.com.tw/upload/images/20210904/20129510O5L4y5cprE.png
圖 3、修改 .bashrc 設定檔,自動進入 Python 虛擬環境

執行 Django

接下來執行 Django,首先先建立一個專案,輸入下述指令,但先不要執行該專案,要先修改一些設定。

# 進入虛擬環境目錄
cd ~/fishRecognition
# 建立一個 Django 專案 fishsite
django-admin startproject fishsite
# 進入專案目錄
cd fishsite

下圖顯示專案所生成的檔案結構,可以看出Django專案除了會建立一個與專案名稱相同的目錄名稱 fishsite 外,也會在該目錄下再生成一個相同名稱 fishsite 的預設模塊,而這個末目錄下有一個 settings.py 的檔案,是 Django 的配置檔案。

https://ithelp.ithome.com.tw/upload/images/20210904/20129510WkV3uodLeh.png
圖 4、Django 專案的檔案結構

不要立即啟動 Django 的 Web 伺服器,因為它會執行很多預設的初始化動作,比方說資料庫的初始化,而 Django 預設的資料庫是 SQLite,這會導致一些版本不相容的錯誤訊息,先編輯 settings.py 檔,將資料庫設定,允許外部連線設定以及語系和時區修改一下

settings.py

# 允許任何主機從外部連線設定
# DEBUG = True
DEBUG = False

# ALLOWED_HOSTS = []
ALLOWED_HOSTS = ['*']

# 資料庫設定,註解預設資料庫
DATABASES = {
    'default': {
#        'ENGINE': 'django.db.backends.sqlite3',
#        'NAME': BASE_DIR / 'db.sqlite3',
    }

# 將預設英語語系與時區修改成繁體中文與台北時區
# LANGUAGE_CODE = 'en-us'
LANGUAGE_CODE = 'zh-hant'

# TIME_ZONE = 'UTC'
TIME_ZONE = 'Asia/Taipei'

因為 Django Web 伺服器預設的埠號是 8000,所以需要開放 AWS EC2 的安全群組 (Security group)。進入 EC2 的管理控制台,點擊左手邊的 執行個體 後,選擇本專案的 EC2 個體,下方會出現執行個體的詳細資訊,選取 安全性 頁籤,就可以看到目前所配置的安全群組,如下圖所示。

https://ithelp.ithome.com.tw/upload/images/20210904/20129510obywjBeRn0.png
圖 5、AWS EC2 控制台中的安全群組標籤

進入安全群組設定畫面後,新增一個傳入規則,類型為 自訂TCP ,連接埠範圍指定為 8000,來源指定為 Anywhere-IPv4 ,確認後點擊 儲存規則就可以,如下圖所示。

https://ithelp.ithome.com.tw/upload/images/20210904/20129510kDHQhh7FlB.png
圖 6、新增安全群組的傳入規則

這時候就可以啟動 Django Web 伺服器,請確認在 /home/ec2-user/fishRecognition/fishsite 這個目錄下執行下列的指令。

python3 manage.py runserver 0.0.0.0:8000

執行成功應該會看到以下的畫面,會顯示 Starting development server at http://0.0.0.0:8000 這個訊息。

https://ithelp.ithome.com.tw/upload/images/20210904/20129510NfcZdro4HR.png
圖 7、啟動 Django Web 伺服器

接著打開瀏覽器輸入 http:[EC2_IPv4]:8000/admin/,[EC2_IPv4]指的是EC2的公有 IPv4 地址。就會出現要求登入的畫面,如下圖所示,這表示Django Web 伺服器已經成功啟動,並可以被瀏覽器存取到。

https://ithelp.ithome.com.tw/upload/images/20210904/20129510tvcm4Yu7D3.png
圖 8、Django 的登錄畫面

參考資料


上一篇
安裝資料庫 MariaDB 在 Amazon Linux 2-Day 03
下一篇
Django + MariaDB 在 Amazon Linux 2-Day 05
系列文
觀賞魚辨識的YOLO全餐38

尚未有邦友留言

立即登入留言