Docker 部署 Django+Uwsgi+Nginx+MySQL+Vue

咖哩飯發表於2020-09-13

簡介

 * 1、兩年前接觸docker是因為要部署selenium_gird,後來呢發現zalenium可以錄製ui自動化視訊的工具,都是直接pull映象,啟動容器。所以一直以來就只用到了pull、 run、 rm等簡單的命令。開發一直是把程式碼部署到docker裡的,這對於我來說一直是個疑問。上週趁著專案不緊張 ,就來解惑以下,首先就把我二次開發的介面平臺來部署下把(https://testerhome.com/topics/25144),忙碌了一週也終於部署到外網了,也在這裡將簡單好理解的部署方法分享給大家。

準備工作

 * 1、首先 要有一臺linux系統 ,筆者在這裡選擇了騰訊雲的95一年的伺服器,用來學習還不錯(https://cloud.tencent.com/act/anniversary/product
 * 2、登入到linux系統後,下載docker 並啟動(這步驟教給你們了,百度很多例子)
 * 3、專案準備,我這裡用到了後端django,前端vue

  • 4、WinSCP用來將程式碼上傳到linux(有很多途徑可以上傳,我這裡選擇了簡單的方法)
  • 5、https://www.cnblogs.com/jiefu/p/12204555.html docker部署 mysql請參考這個連結一步步配置就可以了,很簡單哦(django要連結資料庫)

部署django,檔案目錄如圖

 * 1、uWSGI是一種web伺服器,是實現了uwsgi和WSGI兩種協議的Web伺服器,類似Apache和Ngin'x(https://blog.csdn.net/gymaisyl/article/details/85038932有詳細的介紹)

  • 2、Dockerfile用來建立映象
  • 3、我們之前啟動django都是用python manage.py runserver 來啟動的,這次我們uwsgi啟動來部署到外網
  • 4、我這邊根目錄是DockerProject,下面兩個資料夾api_automation_test(程式碼),compose(docker-compose.yml,用來編排dockerfile的) #### 每個檔案的內容  * 1、Dockerfile內容,只需要替換api_automation_test專案目錄名字即可
# 建立 python3.7 環境
FROM python:3.6
# 設定 python 環境變數
#ENV PYTHONUNBUFFERED 1
# 在容器內/var/www/html/下建立 mysite1資料夾
RUN mkdir -p /var/www/html/api_automation_test
# 設定容器內工作目錄
WORKDIR /var/www/html/api_automation_test
# 將當前目錄檔案加入到容器工作目錄中(. 表示當前宿主機目錄)
ADD . /var/www/html/api_automation_test
#下載第三方包
RUN pip install https://github.com/darklow/django-suit/tarball/v2
RUN pip install -i https://pypi.doubanio.com/simple uwsgi
RUN pip install -i https://pypi.doubanio.com/simple/ -r requirements.txt
# Windows環境下編寫的start.sh每行命令結尾有多餘的\r字元,需移除。
RUN sed -i 's/\r//' ./start.sh
# 設定start.sh檔案可執行許可權
RUN chmod +x ./start.sh

 * 2、uwsgi_.ini內容,此處是對啟動uwsgi做出的配置,更多配置引數可以去百度看下

[uwsgi]
#api_automation_test是我程式碼的路徑
project = api_automation_test
uid = root
gid = root
base = /var/www/html
chdir = %(base)/%(project)
module = %(project).wsgi:application
master = True
processes = 2
http = 0.0.0.0:8020 #這裡直接使用uwsgiweb伺服器,使用http。如果使用nginx,需要使用socket溝通。
buffer-size = 65536
pidfile = /tmp/%(project)-master.pid
vacuum = True
max-requests = 5000
daemonize = uwsgi.log
# 解決APSchedler任務不能執行
threads=4
enable-threads = true
preload = true
lazy-apps = true
#設定一個請求的超時時間(),如果一個請求超過了這個時間,則請求被丟棄
harakiri = 60
#當一個請求被harakiri殺掉會,會輸出一條日誌
harakiri-verbose = true

 * 3、start.sh內容

#!/bin/bash
# 從第一行到最後一行分別表示:
# 1. 生成資料庫遷移檔案
# 2. 根據資料庫遷移檔案來修改資料庫
# 3. 用 uwsgi啟動 django 服務, 不再使用python manage.py runserver
#python manage.py collectstatic --noinput&&
python manage.py makemigrations&&
python manage.py migrate&&
uwsgi --enable-threads /var/www/html/api_automation_test/uwsgi.ini

開始部署docker

 * 1、首先將我們的程式碼用WinSCP放到linux上,cd 到我們的 api_automation_test目錄
執行如下命令建立映象,注意最後面有個點.

docker build -t django_web . 

 * 2、建立映象中

 * 3、建立完成

 * 4、docker images檢視我們剛才建立的映象

 * 5、 啟動容器

docker run -it --name MyDjango -p 8020:8020 -d django_web 

 * 6、 檢視建立成功的容器

docker ps

 * 7、進入容器內部執行shart.sh

docker exec -it MyDjango /bin/bash
sh start.sh
  • 7、這個時候我們後端專案已啟動成功,接下來訪問下介面

部署vue,專案結構如圖所示

  • 1、Dockerfile內容,直接copy不用改內容
# nginx映象
FROM nginx:latest
# 刪除原有配置檔案,建立靜態資原始檔夾和ssl證照儲存資料夾
RUN rm /etc/nginx/conf.d/default.conf \
&& mkdir -p /usr/share/nginx/html/static \
&& mkdir -p /usr/share/nginx/html/media \
&& mkdir -p /usr/share/nginx/ssl
COPY dist/ /usr/share/nginx/html/
# 新增配置檔案
COPY nginx.conf /etc/nginx/nginx.conf
# 構建映象時執行的命令
RUN echo 'echo init ok!'
  • 2、cd到frontend資料夾下,建立映象
docker build -t vue_web . 
  • 3、啟動容器

    docker run -it -p 80:80 --name vue_web_c \
     -d vue_web
  • 4、至此前後端都已啟動成功

注:

  • 1、後續會再講下如何用compose一鍵建立多個映象、啟動多個映象,這樣我們部署就會更方便
  • 2、有疑問可以加我微信諮詢哦liuxiaolu4986

相關文章