python django部署docker_Docker 部署 Django+Uwsgi+Nginx+Vue
簡介
* 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 #這里直接使用uwsgi做web服務器,使用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
總結
以上是生活随笔為你收集整理的python django部署docker_Docker 部署 Django+Uwsgi+Nginx+Vue的全部內容,希望文章能夠幫你解決所遇到的問題。
 
                            
                        - 上一篇: 旋转矩阵中6保6_40岁阿姨发明新型手推
- 下一篇: 发票缴销和验旧区别
