編寫完專案程式碼後,為了穩定的執行,需要將其部署至伺服器。這裡我選擇了Docker去部署Django後端程式碼。
首先來看看Runoob對Docker的介紹:
Docker 是一個開源的應用容器引擎,基於Go語言並遵從 Apache2.0 協議開源。
Docker 可以讓開發者打包他們的應用以及依賴包到一個輕量級、可移植的容器中,然後釋出到任何流行的 Linux 機器上,也可以實現虛擬化。
容器是完全使用沙箱機制,相互之間不會有任何介面(類似 iPhone 的 app),更重要的是容器效能開銷極低。
我自己的理解,Docker能夠大大降低開發人員移植環境時的複雜度,易於自動化部署,也易於不同環境之間相互隔離。
安裝Docker
Docker必須部署在 Linux 核心的系統上,如果其他系統想部署 Docker 就必須安裝一個虛擬 Linux 環境。所以Windows或者Mac使用者的官方安裝方式是安裝Docker Desktop客戶端,實質上還是在虛擬機器中安裝Docker。
製作Docker映象
有以下兩種方式製作映象:
1.從已經建立的容器中更新映象,並且提交這個映象。下次想要複用時,則是從映象倉庫拉取該映象。
2.使用 Dockerfile 檔案來建立一個新的映象,下次想要複用時,只需要使用docker build指令再次呼叫Dockerfile建立映象即可。
這裡推薦第2種方式來製作映象,因為Dockerfile檔案能夠清晰地記錄製作映象的具體步驟,方便作者去回顧以及保持映象簡潔。
以下是我製作映象時的Dockerfile檔案:
FROM ubuntu:16.04 ENV LANG C.UTF-8 ENV TZ=Asia/Shanghai RUN sed -i s@/archive.ubuntu.com/@/mirrors.aliyun.com/@g /etc/apt/sources.list && \ apt-get clean && \ ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone && \ apt-get update && \ apt-get upgrade -y && \ apt-get install -y \ software-properties-common &&\ add-apt-repository ppa:deadsnakes/ppa &&\ apt-get update && \ apt-get install -y \ python3.7 && \ update-alternatives --install /usr/bin/python3 python3 /usr/bin/python3.7 1 && \ apt-get install -y \ libpython3.7-dev \ python3-setuptools \ python3-pip \ git \ tzdata && \ dpkg-reconfigure --frontend noninteractive tzdata WORKDIR /opt/workspace/TestPlatformBackend/ COPY . . RUN pip3 install -r ./requirements.txt -i \ https://pypi.tuna.tsinghua.edu.cn/simple \ --default-timeout=100 EXPOSE 5000 CMD bash ./start.sh
該Dockerfile基於ubuntu16.04系統,先安裝了python基礎環境,指定工作空間及拷貝專案程式碼,然後安裝專案所需的python庫,最後執行指定的shell指令碼。
shell指令碼也較為簡單,用uWSGI啟動了Django專案,如果有不懂uWSGI的朋友,可以參看這篇文章《如何用uWSGI託管Django》進行了解。
#!/usr/bin/env bash uwsgi --ini ./uwsgi.ini
值得一提的是,網上教程一般會採用uWSGI+Nginx去部署Django專案,而我這裡只採用了uWSGI,原因是該測試平臺是給內部人員使用且併發量不大,所以沒有用到Nginx,等需要時再加上。
使用Docker映象
在完成Dockerfile後,使用docker build指令建立Docker映象,例子中建立了名為testplatformbackend的映象。
docker build -t testplatformbackend .
建立完成後,使用該映象生成並執行容器,例子中執行了名為testplatformbackend的映象,並將容器的5000埠對映到了宿主機的9999埠上供訪問。
docker run -d -p 9999:5000 testplatformbackend
上述步驟,便實現了通過Docker來部署Django專案。
文章的最後聊個題外話,如果我們的專案程式碼是在Windows系統上完成編寫,需要部署到Linux系統上時,請注意兩個系統對於檔案路徑的相容性問題。Windows系統是可以用符號'\'和'/'來表示路徑的,而Linux系統只能用後者來表示路徑。所以我們在寫路徑時,儘量用符號'/'。而拼接路徑時則儘量用os.path.join()函式去實現,因為它生成的路徑能相容不同系統。如果遇到不得不轉換的路徑,則可以在使用路徑時採用str.replace('\\', '/')完成轉換。
參考資料
https://www.docker.com/
https://www.runoob.com/docker/docker-tutorial.html