亚洲综合原千岁中文字幕_国产精品99久久久久久久vr_无码人妻aⅴ一区二区三区浪潮_成人h动漫精品一区二区三

主頁 > 知識(shí)庫 > Docker部署Django+Mysql+Redis+Gunicorn+Nginx的實(shí)現(xiàn)

Docker部署Django+Mysql+Redis+Gunicorn+Nginx的實(shí)現(xiàn)

熱門標(biāo)簽:蘭州ai電銷機(jī)器人招商 新邵電銷機(jī)器人企業(yè) 北海市地圖標(biāo)注app 外呼系統(tǒng)打哪顯哪 高德地圖標(biāo)注論壇 新科美甲店地圖標(biāo)注 湖北ai智能電銷機(jī)器人 江西外呼系統(tǒng) AI電銷機(jī)器人 源碼

一. 前言

docker技術(shù)現(xiàn)在非常火熱,通過容器構(gòu)建項(xiàng)目環(huán)境,運(yùn)行效率和部署效率都很不錯(cuò)。所以最近抽空看了一些教程,然后將博客部署方式改為了docker,感覺網(wǎng)上沒有特別好的關(guān)于 docker 部署 django 項(xiàng)目的教程,特意寫了這篇文章,算是記錄自己的心得。

本次教程的測(cè)試環(huán)境為 Deepin ,主要側(cè)重于 容器的編排Django 相關(guān)部署知識(shí),一些細(xì)節(jié)方面,例如環(huán)境依賴安裝,不會(huì)講得特別詳細(xì)。由于是在本地測(cè)試,所以在配置 nginx 相關(guān)信息時(shí),將配置 http 代理而非 https 代理。

二. 環(huán)境依賴

部署方式選擇了 docker 加 docker-compose,因此需要安裝 docker 和 docker-compose。

  • docker 可以通過 sudo apt install docker-ce 命令安裝。
  • docker-compose 可通過以下命令安裝。
sudo curl -L https://get.daocloud.io/docker/compose/releases/download/1.22.0/docker-compose-`uname -s`-`uname -m` > /usr/local/bin/docker-compose 
sudo chmod +x /usr/local/bin/docker-compose

安裝完成以后,輸入 docker version ,看到以下畫面表示 docker 安裝成功。

輸入 docker-compose version ,看到以下畫面表示 docker-compose 安裝成功。

三. 部署分析

博客項(xiàng)目中使用到了 Django , Mysql , Redis , Nginx ,因此需要四個(gè)容器,每個(gè)容器對(duì)應(yīng)一個(gè)應(yīng)用,當(dāng)然這些容器是有先后順序的,也就是說存在依賴關(guān)系。然后通過 docker-compose 編排這四個(gè)容器,構(gòu)建容器運(yùn)行環(huán)境。

總共四個(gè)容器:

  • Redis 容器:緩存服務(wù)
  • Mysql 容器:數(shù)據(jù)存儲(chǔ)
  • Django(Gunicorn)容器:處理動(dòng)態(tài)請(qǐng)求
  • Nginx 容器:反向代理,處理靜態(tài)資源

下面是容器的結(jié)構(gòu)圖。

容器依賴關(guān)系:Django 容器依賴 Redis 容器和 Mysql 容器,Nginx 容器依賴Gunicorn 容器。

四. 項(xiàng)目結(jié)構(gòu)

看這個(gè)教程的小伙伴請(qǐng)盡量把目錄和教程中目錄保持 一致 ,否則在后續(xù)部署過程中極有可能會(huì)出錯(cuò)。

my_blog是 django 項(xiàng)目目錄, deployment 文件夾放置了除 Django 容器外的三個(gè)容器配置信息。

Dockerfile:docker 環(huán)境文件

docker-compose.yml:編排容器文件

start.sh:容器初始化后執(zhí)行的 shell 命令腳本

requirements.txt:django項(xiàng)目環(huán)境依賴文件

gunicorn.conf:gunicorn 配置文件

deployment目錄包含 mysql 容器配置信息, nginx 容器配置信息和 redis 容器數(shù)據(jù)目錄。

mysql:放置數(shù)據(jù)庫配置信息,conf 放置數(shù)據(jù)庫初始化配置文件 my.cnf,data 用于掛載數(shù)據(jù)庫數(shù)據(jù),init 放置 sql 腳本(導(dǎo)入表結(jié)構(gòu)和數(shù)據(jù),并掛載到容器中)。

nginx:放置 nginx 配置信息,ssl 放置 ssl證書

redis: 掛載 redis 數(shù)據(jù)

五. 構(gòu)建 Django 容器環(huán)境

1. Django 項(xiàng)目 Dockerfile編寫

容器環(huán)境和本機(jī)環(huán)境是 隔離 的,你可以把容器當(dāng)做 另一個(gè)系統(tǒng) ,起初這個(gè)系統(tǒng)與你本機(jī)的系統(tǒng) 并無關(guān)聯(lián) ,我們通過編寫 Dockerfile 文件 配置并構(gòu)建 容器環(huán)境(像在干凈的系統(tǒng)中配置 python 環(huán)境一樣)。

# 建立 python3.6 環(huán)境
FROM daocloud.io/python:3.6

# 鏡像作者
MAINTAINER zyk 2295098032@qq.com

# 設(shè)置 python 環(huán)境變量
ENV PYTHONUNBUFFERED 1

# 創(chuàng)建 my_blog 文件夾
RUN mkdir /my_blog

# 將 my_blog 文件夾為工作目錄
WORKDIR /my_blog

# 將當(dāng)前目錄加入到工作目錄中(. 表示當(dāng)前目錄)
ADD . /my_blog

# 利用 pip 安裝依賴(- i 表示指定清華源,默認(rèn)源下載過慢)
RUN pip3 install -r requirements.txt -i https://pypi.tuna.tsinghua.edu.cn/simple/

#設(shè)置環(huán)境變量
ENV SPIDER=/my_blog

2. 編寫 gunicorn 配置文件

編寫 gunicorn.conf 文件,用于 gunicorn 的啟動(dòng)

workers=3 # 并行工作進(jìn)程數(shù) 
threads = 2 # 指定每個(gè)工作者的線程數(shù) 
bind=['0.0.0.0:8000'] # 監(jiān)聽內(nèi)網(wǎng)端口8000 
proc_name='my_blog' # 進(jìn)程名稱 
pidfile='/tmp/blog.pid' # 設(shè)置進(jìn)程文件目錄 
worker_class='gevent' # 工作模式協(xié)程 
timeout=30 # 超時(shí) 
max_requests=6000 # 最大請(qǐng)求數(shù) 

3. 編寫 start.sh 命令腳本

start.sh 腳本用于啟動(dòng) django 容器

#!/bin/bash
# 從第一行到最后一行分別表示:
# 1. 守護(hù)進(jìn)程執(zhí)行 celery,沒有這個(gè)需求的小伙伴可以將第一行命令其刪除
# 2. 收集靜態(tài)文件到根目錄,
# 3. 生成數(shù)據(jù)庫可執(zhí)行文件,
# 4. 根據(jù)數(shù)據(jù)庫可執(zhí)行文件來修改數(shù)據(jù)庫
# 5. 用 gunicorn 啟動(dòng) django 服務(wù)
celery multi start w1 -A celery_tasks.tasks worker -l info&&
python manage.py collectstatic --noinput&&
python manage.py makemigrations&&
python manage.py migrate&&
gunicorn my_blog.wsgi:application -c gunicorn.conf

六. 構(gòu)建 nginx 容器環(huán)境

1. nginx 容器 Dockefile 編寫

創(chuàng)建并編寫 nginx 文件夾下的 Dockerfile

# nginx鏡像
FROM daocloud.io/nginx

# 刪除原有配置文件,創(chuàng)建靜態(tài)資源文件夾和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

# 添加配置文件
ADD ./nginx.conf /etc/nginx/conf.d/

2. 配置 nginx.conf

nginx.conf用于反向代理域名或者 ip,將動(dòng)態(tài)請(qǐng)求分發(fā)至內(nèi)部的 django 容器的8000端口,并配置靜態(tài)資源路徑。

配置反向代理時(shí),注意 host 一定要改為 web,web即是django容器的名稱(在docker-compose.yml中配置)

# 僅用于本地docker環(huán)境測(cè)試(80端口代理http請(qǐng)求)
server {
 listen 80; # 監(jiān)聽80端口
 server_name 127.0.0.1; # 生產(chǎn)環(huán)境請(qǐng)換成域名
 location / {
  proxy_pass http://web:8000; # 反向代理 django容器8000端口,web為django容器名稱,切記不要寫域名或者ip
  proxy_set_header Host $host;
  proxy_redirect off;
  proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
 }
 location /static/ {
  alias /usr/share/nginx/html/static/; #靜態(tài)資源路徑
 }
 location /media/ {
  alias /usr/share/nginx/html/media/; #上傳文件路徑
 }
}

七. 配置 mysql

1. 編寫 my.cnf 文件

my.cnf 文件用于初始化 mysql 配置,這個(gè)文件將被掛載到容器中。

[mysqld]
user=mysql
default-storage-engine=INNODB
character-set-server=utf8
sql_mode=STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION
[client]
default-character-set=utf8
[mysql]
default-character-set=utf8

2. 導(dǎo)入初始化 sql 文件(不需要導(dǎo)入初始數(shù)據(jù)庫的小伙伴可以忽略此步驟)

將需要導(dǎo)入的sql文件放入init目錄下,并修改其名稱為init.sql

八. 利用 docker-compose 編排容器

編寫 docker-compose.yml

version: "3"
services:
 redis:
 image: daocloud.io/redis:3
 command: redis-server
 volumes:
  - ./deployment/redis:/data
 ports:
  - "6379:6379"
 restart: always # always表容器運(yùn)行發(fā)生錯(cuò)誤時(shí)一直重啟

 db:
 image: daocloud.io/mysql:5.7
 environment:
  - MYSQL_DATABASE=my_blog # 數(shù)據(jù)庫名稱
  - MYSQL_ROOT_PASSWORD=19960331 # 數(shù)據(jù)庫密碼
 volumes:
  - ./deployment/mysql/data:/var/lib/mysql # 掛載數(shù)據(jù)庫數(shù)據(jù)
  - ./deployment/mysql/conf/my.cnf:/etc/mysql/my.cnf # 掛載配置文件
  - ./deployment/mysql/init:/docker-entrypoint-initdb.d/ # 掛載數(shù)據(jù)初始化sql腳本
 ports:
  - "3306:3306"
 restart: always

 web:
 build: .
 expose:
  - "8000"
 volumes:
  - .:/my_blog
  - /tmp/logs:/tmp
 command: bash start.sh
 links:
  - db
  - redis
 depends_on:
  - db
  - redis
 restart: always

 nginx:
 build: deployment/nginx
 ports:
  - "80:80"
  - "443:443"
 expose:
  - "8000"
 volumes:
  - ./collect_static:/usr/share/nginx/html/static # 掛載靜態(tài)文件
  - ./media:/usr/share/nginx/html/media # 掛載上傳文件
  - ./deployment/nginx/ssl:/usr/share/nginx/ssl # 掛載ssl證書目錄
 links:
  - web
 depends_on:
  - web
 restart: always

redis,db,web,nginx為容器名稱。

image表示拉取鏡像名稱, build 會(huì)在給定目錄下尋找 Dockerfile 并構(gòu)建容器環(huán)境。

expose表示將端口暴露給其他容器,但 暴露給主機(jī)(不同容器默認(rèn)相互隔離)。

ports表示將該容器端口映射到主機(jī)端口(從右往左讀,例如ports: - "3307:3306",是指把容器的3306端口映射到主機(jī)的3307端口),同時(shí)該容器端口也會(huì)對(duì)其他容器開放。

volumes表示掛載,就是將本機(jī)的文件和容器中的文件映射起來,容器和本地環(huán)境本來是隔離的,掛載相當(dāng)于是鑿了一個(gè)小洞,讓兩者數(shù)據(jù)可以互通。

links表示將容器互聯(lián)起來。

depends_on:表示依賴關(guān)系,因?yàn)槿萜鞯膯?dòng)有先后順序,django 容器依賴于 mysql 容器和 redis 容器(django需要從數(shù)據(jù)庫和緩存中讀寫數(shù)據(jù)),而 nginx 依賴于 django 容器(nginx 容器需要反向代理 django 容器的8000端口)

九. 構(gòu)建、運(yùn)行容器

在構(gòu)建運(yùn)行容器之前,需要修改 django 項(xiàng)目的 settings.py 文件。

將 數(shù)據(jù)庫連接 HOST 改為 mysql 容器名稱 db

DATABASES = {
 'default': {
  'ENGINE': 'django.db.backends.mysql', # mysql驅(qū)動(dòng)
  'NAME': 'my_blog', # 數(shù)據(jù)庫名稱
  'USER': 'root', # 登錄帳號(hào)
  'PASSWORD': '19960331', # 登錄密碼
  'HOST': 'db', # 主機(jī)地址(容器部署)
  # 'HOST': '127.0.0.1', # 主機(jī)地址
  'PORT': '3306', # 端口
  'OPTIONS': {'charset': 'utf8mb4'},
 }
}

將緩存配置中的 host 改為 redis 容器名稱 redis (如果你配置了redis作為緩存的話,沒配置的話請(qǐng)忽略)

CACHES = {
 'default': {
  'BACKEND': 'django_redis.cache.RedisCache',
  'LOCATION': 'redis://redis:6379', # redis(容器)
  # 'LOCATION': '127.0.0.1:6379',
  'OPTIONS': {
   "CLIENT_CLASS": "django_redis.client.DefaultClient",
   "CONNECTION_POOL_KWARGS": {"max_connections": 100},
   'SOCKET_TIMEOUT': 10,
  },
 },
}

生產(chǎn)環(huán)境部署請(qǐng)將 settings.py 中的 DEBUG = True 改為 DEBUG = False 以關(guān)閉debug模式。

最后在項(xiàng)目根目錄執(zhí)行命令 docker-compose up --build

執(zhí)行完畢以后看到以下畫面表明構(gòu)建成功。

在瀏覽器端口訪問127.0.0.1或者你的公網(wǎng) ip,若能成功訪問表明構(gòu)建成功。

十. 最后

我也是第一次用 docker-compose 來部署 django 項(xiàng)目,若有寫得不得當(dāng)或者有誤的地方麻煩大家?guī)兔χ赋觥?/p>

以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

標(biāo)簽:海南 池州 阿克蘇 大理 黃石 南陽 自貢 黔東

巨人網(wǎng)絡(luò)通訊聲明:本文標(biāo)題《Docker部署Django+Mysql+Redis+Gunicorn+Nginx的實(shí)現(xiàn)》,本文關(guān)鍵詞  Docker,部署,Django+Mysql+Redis+Gunicorn+Nginx,;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問題,煩請(qǐng)?zhí)峁┫嚓P(guān)信息告之我們,我們將及時(shí)溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡(luò),涉及言論、版權(quán)與本站無關(guān)。
  • 相關(guān)文章
  • 下面列出與本文章《Docker部署Django+Mysql+Redis+Gunicorn+Nginx的實(shí)現(xiàn)》相關(guān)的同類信息!
  • 本頁收集關(guān)于Docker部署Django+Mysql+Redis+Gunicorn+Nginx的實(shí)現(xiàn)的相關(guān)信息資訊供網(wǎng)民參考!
  • 推薦文章
    欧美a级v片不卡在线观看| 99久久精品国产免费| 久草免费资源| 日韩专区一区| 二级特黄绝大片免费视频大片| 亚欧视频在线| 99色视频在线| 青青久久精品国产免费看| 日本久久久久久久 97久久精品一区二区三区 狠狠色噜噜狠狠狠狠97 日日干综合 五月天婷婷在线观看高清 九色福利视频 | 精品久久久久久免费影院| 日本久久久久久久 97久久精品一区二区三区 狠狠色噜噜狠狠狠狠97 日日干综合 五月天婷婷在线观看高清 九色福利视频 | 久草免费资源| 国产a免费观看| 国产视频一区二区在线播放| 精品视频免费在线| 国产视频一区二区在线观看| 国产不卡在线观看| 免费毛片播放| 精品久久久久久综合网| 欧美夜夜骑 青草视频在线观看完整版 久久精品99无色码中文字幕 欧美日韩一区二区在线观看视频 欧美中文字幕在线视频 www.99精品 香蕉视频久久 | 香蕉视频久久| 国产不卡在线看| 精品视频在线观看一区二区| 免费一级片在线| 国产精品1024永久免费视频| 久久国产一久久高清| 91麻豆精品国产自产在线| 日韩avdvd| 可以在线看黄的网站| 久久福利影视| 欧美1卡一卡二卡三新区| 国产不卡在线看| 亚洲第一色在线| 麻豆午夜视频| 一级毛片视频播放| 欧美激情一区二区三区视频| 99色视频| 国产极品精频在线观看| 成人高清视频在线观看| 久久久久久久网| 欧美激情一区二区三区视频高清| 日韩免费在线视频| 国产一区精品| 欧美a级片视频| 日本久久久久久久 97久久精品一区二区三区 狠狠色噜噜狠狠狠狠97 日日干综合 五月天婷婷在线观看高清 九色福利视频 | 日韩中文字幕一区| 97视频免费在线观看| 夜夜操网| 九九精品影院| 好男人天堂网 久久精品国产这里是免费 国产精品成人一区二区 男人天堂网2021 男人的天堂在线观看 丁香六月综合激情 | 日韩免费在线视频| 精品国产一区二区三区国产馆| 国产麻豆精品免费密入口| 日韩avdvd| 日韩字幕在线| 国产a免费观看| 免费国产在线观看不卡| 国产成人精品综合久久久| 一本高清在线| 国产网站麻豆精品视频| 国产91丝袜在线播放0| 国产原创视频在线| 一级女性大黄生活片免费| 国产欧美精品午夜在线播放| 亚洲 激情| 中文字幕一区二区三区精彩视频| 国产亚洲精品成人a在线| 久久精品道一区二区三区| 日韩中文字幕在线亚洲一区| 久久国产一久久高清| 好男人天堂网 久久精品国产这里是免费 国产精品成人一区二区 男人天堂网2021 男人的天堂在线观看 丁香六月综合激情 | 成人免费网站视频ww| 国产麻豆精品视频| 欧美激情一区二区三区在线播放| 精品国产一区二区三区久久久蜜臀| 二级特黄绝大片免费视频大片| 日日爽天天| 日韩字幕在线| 99热热久久| 欧美夜夜骑 青草视频在线观看完整版 久久精品99无色码中文字幕 欧美日韩一区二区在线观看视频 欧美中文字幕在线视频 www.99精品 香蕉视频久久 | 久草免费在线观看| 国产a毛片| 精品毛片视频| 精品久久久久久影院免费| 日韩男人天堂| 国产高清在线精品一区a| 国产高清在线精品一区二区| 欧美另类videosbestsex久久| 91麻豆国产福利精品| 麻豆午夜视频| 青青青草视频在线观看| 亚欧乱色一区二区三区| 日韩av东京社区男人的天堂| 精品国产一区二区三区免费| 九九久久国产精品大片| 天天色成人| 日韩av东京社区男人的天堂| 美女免费毛片| 二级片在线观看| 国产a一级| 一级女性大黄生活片免费| 日本久久久久久久 97久久精品一区二区三区 狠狠色噜噜狠狠狠狠97 日日干综合 五月天婷婷在线观看高清 九色福利视频 | 亚洲不卡一区二区三区在线| 亚欧成人乱码一区二区| 成人影院久久久久久影院| 一级片片| 日韩在线观看视频黄| 国产网站免费在线观看| 国产激情视频在线观看| 成人免费网站久久久| 日韩专区一区| 国产麻豆精品高清在线播放| 欧美另类videosbestsex视频| 亚洲wwwwww| 国产不卡高清| 国产韩国精品一区二区三区| 国产麻豆精品高清在线播放| 国产麻豆精品高清在线播放| 国产成人精品综合久久久| 可以免费看污视频的网站| 国产精品1024在线永久免费 | 91麻豆精品国产自产在线观看一区 | 成人av在线播放| 一级女性大黄生活片免费| 日本久久久久久久 97久久精品一区二区三区 狠狠色噜噜狠狠狠狠97 日日干综合 五月天婷婷在线观看高清 九色福利视频 | 国产a一级| 欧美一级视频免费观看| 国产一级生活片| 天堂网中文在线| 91麻豆精品国产自产在线| 精品国产一区二区三区免费| 91麻豆精品国产综合久久久| 可以免费看毛片的网站| 欧美另类videosbestsex高清| 国产成人啪精品视频免费软件| 国产高清视频免费观看| 麻豆网站在线看| 色综合久久久久综合体桃花网| 国产精品自拍在线| 日韩免费片| 日韩在线观看网站| 可以免费在线看黄的网站| 亚飞与亚基在线观看| 99久久精品国产麻豆| a级黄色毛片免费播放视频| 国产麻豆精品视频| 国产一区二区精品尤物| 亚洲精品久久玖玖玖玖| 91麻豆精品国产高清在线| 麻豆午夜视频| 精品在线视频播放| 99久久精品费精品国产一区二区| 欧美激情伊人| 成人a大片在线观看| 你懂的福利视频| 亚洲精品中文字幕久久久久久| 国产成人精品综合| 国产精品自拍在线| 国产原创视频在线| 欧美一区二区三区在线观看| 国产国产人免费视频成69堂| 日韩avdvd| 一级片片| 二级特黄绝大片免费视频大片| 国产成人啪精品视频免费软件| 亚洲天堂在线播放| 欧美夜夜骑 青草视频在线观看完整版 久久精品99无色码中文字幕 欧美日韩一区二区在线观看视频 欧美中文字幕在线视频 www.99精品 香蕉视频久久 | 欧美国产日韩精品| 二级片在线观看| 999久久久免费精品国产牛牛| 国产伦理精品| 国产麻豆精品视频| 精品国产亚洲人成在线| 99久久精品国产国产毛片| 一级毛片看真人在线视频| 成人免费网站久久久| 日本在线不卡免费视频一区| 精品久久久久久免费影院| 欧美国产日韩久久久| 免费国产在线视频| 九九热国产视频| 国产精品免费久久| 午夜欧美福利| 亚欧成人毛片一区二区三区四区| 久久成人综合网| 免费毛片播放| 天天做日日爱夜夜爽| 免费国产在线观看不卡| 精品视频免费在线| 国产a毛片| 四虎影视库| 一级毛片视频播放| 免费国产在线观看不卡| 免费一级片在线| 91麻豆精品国产自产在线| 一a一级片| 精品国产一区二区三区国产馆| 日韩免费在线视频| 欧美另类videosbestsex| 黄视频网站免费|