Docker 部署 Django+Uwsgi+Nginx+MySQL+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
相關文章
- 【Docker】使用docker部署 mysqlDockerMySql
- redmine docker部署Docker
- docker部署MySQLDockerMySql
- docker 部署jenkinsDockerJenkins
- Docker 部署 minioDocker
- yearning docker 部署Docker
- docker 部署 postgresDocker
- Docker部署homeassitantDocker
- Docker:四、Docker進階 Windows Docker IIS 部署DockerWindows
- Docker(四)Docker部署SpringBoot專案DockerSpring Boot
- Docker_Docker應用部署4Docker
- Docker-Docker部署SpringBoot專案DockerSpring Boot
- [部署02] Docker 部署vue專案DockerVue
- 6 springboot Docker 部署Spring BootDocker
- Docker 的部署方式Docker
- docker部署專案Docker
- 使用 Docker 部署 FRPDockerFRP
- Docker - 部署禪道Docker
- Docker 實際部署Docker
- docker-部署ElasticsearchDockerElasticsearch
- docker-部署kibanaDocker
- docker+Consul 部署Docker
- Docker 部署 mysql 5.7DockerMySql
- Docker部署Go程式DockerGo
- Docker Compose部署GitLabDockerGitlab
- Docker快速部署NacosDocker
- Docker部署SayHello(FastAPI)DockerASTAPI
- Linux部署之Docker方式部署專案LinuxDocker
- Docker:Docker部署Jenkins並共用宿主機Docker部署微服務多模組(一)Jenkins部署及外掛環境搭建DockerJenkins微服務
- Vue.js + Docker 部署Vue.jsDocker
- 快速部署-01-dockerDocker
- MacOS Docker本地部署流水MacDocker
- CentOS7.4 部署 DockerCentOSDocker
- 使用 Docker 部署 Spring BootDockerSpring Boot
- docker-compose部署ELKDocker
- Docker部署GitLab-2024DockerGitlab
- 使用Docker部署禪道Docker
- Docker部署Python專案DockerPython