docker+nginx+gunicorn部署flask+vue項(xiàng)目(單機(jī))

一、準(zhǔn)備鏡像和WEB文件夾:

# 基礎(chǔ)鏡像環(huán)境
     python:3.6   # 運(yùn)行環(huán)境鏡像
     nginx   # 部署鏡像

# 項(xiàng)目文件夾:
       --web/
          --app/  # 項(xiàng)目文件
          --wsgi.py # 啟動(dòng)入口
          --requirement.txt # flask運(yùn)行環(huán)境包
          --Dockerfile  # 后端運(yùn)行鏡像配置
          --gunicorn_conf.py  # 啟動(dòng)配置
          -- ... # 其他配置略...
       --vue_index/
          --dist/ # 打包的vue項(xiàng)目
          --Dockerfile  # 部署前端運(yùn)行配置(由于是前后端分離部署童太,所以后端由前端轉(zhuǎn)發(fā))
          --default.conf  # nginx配置

1、打包項(xiàng)目

1)、web/Dcokerfile配置
FROM python:3.6  # 基于py3.6鏡像
RUN mkdir /web   # 創(chuàng)建文件夾
WORKDIR /web   # 執(zhí)行路徑(等同cd /web)
COPY requirements.txt /usr  # 復(fù)制當(dāng)前文件到容器內(nèi)
COPY . /web          # 復(fù)制本文件項(xiàng)目到容器
RUN pip install --no-cache-dir -r /usr/requirements.txt  # 安裝運(yùn)行需要的包
CMD ["gunicorn", "wsgi:app", "-c", "/web/gunicorn_conf.py"]   # gunicorn執(zhí)行
2)约素、web/gunicorn_conf.py

注意點(diǎn):在docker中執(zhí)行項(xiàng)目的話和直接在linux執(zhí)行有區(qū)別,在docker中運(yùn)行不能用
-d 后臺(tái)運(yùn)行笆凌。

import logging
import logging.handlers
from logging.handlers import WatchedFileHandler
import os
import multiprocessing
bind = '0.0.0.0:8000'
backlog = 512
timeout = 30
worker_class = 'gevent'
workers = multiprocessing.cpu_count() * 2 + 1
threads = 2
loglevel = 'info'
access_log_format = '%(t)s %(p)s %(h)s "%(r)s" %(s)s %(L)s %(b)s %(f)s" "%(a)s"'
accesslog = "/web/logs/gunicorn_access.log"      # 訪問(wèn)日志文件
errorlog = "/web/logs/gunicorn_error.log"
3)圣猎、生成項(xiàng)目鏡像:

docker build -t web:1 .

2、打包nginx+前端

1乞而、vue_index/Dockerfile
# 設(shè)置基礎(chǔ)鏡像
FROM nginx
# 將dist文件中的內(nèi)容復(fù)制到 /usr/share/nginx/html/ 這個(gè)目錄下面
COPY dist/  /usr/share/nginx/html/
#用本地的 default.conf 配置來(lái)替換nginx鏡像里的默認(rèn)配置
COPY nginx/default.conf /etc/nginx/conf.d/default.conf
VOLUME /data/vue_index /var/log/nginx
2 送悔、vue_index/default.conf
server {
    listen       80;
    server_name  localhost;
    access_log  /var/log/nginx/host.access.log  main;
    error_log  /var/log/nginx/error.log  error;
    location / {  # 直接匹配端口返回前端
        root   /usr/share/nginx/html;
        index  index.html index.htm;
        try_files $uri $uri/ /index.html;
    }
    error_page   500 502 503 504  /50x.html;
    location = /50x.html {
        root   /usr/share/nginx/html;
    }
    location /api/ {  # 匹配api的,轉(zhuǎn)發(fā)給后端爪模,
        rewrite  /api/(.*)  /$1  break;
        proxy_pass http://192.168.2.2:8000;  # 這里是宿主機(jī)的ip
    }
}
3欠啤、生成項(xiàng)目鏡像:

docker build -t vue_index:1 .

ps:只是簡(jiǎn)單的部署,主要是nginx部署轉(zhuǎn)發(fā)后端屋灌。

二洁段、啟動(dòng)

1、查看docker images
2共郭、啟動(dòng)后端容器:docker run -it -d -p 8000:8000 -v /data/web:/web web:1
-d:容器后臺(tái)啟動(dòng)
-p:宿主機(jī)端口映射容器端口
-v:掛載文件夾祠丝,在宿主機(jī)查看日志方便
3疾呻、啟動(dòng)nginx容器:docker run -it -d -p 8001:80 vue_index:1
ps:這里要注意的是宿主機(jī)的端口不能重復(fù)映射,現(xiàn)在啟動(dòng)容器后写半,我們可以通過(guò)訪問(wèn)ip+port進(jìn)行直接訪問(wèn)岸蜗。
如果有相關(guān)的后端請(qǐng)求的話會(huì)直接匹配ip+port+/api 進(jìn)行轉(zhuǎn)發(fā)到后端的接口,實(shí)際訪問(wèn)的接口不變

問(wèn)題:

1叠蝇、docker部署gunicorn,為什么啟動(dòng)不了璃岳?
gunicorn在docker啟動(dòng)時(shí)不能在后臺(tái)運(yùn)行
2、nginx部署vue怎么搞蟆肆?
將前端部署在nginx矾睦,通過(guò)匹配api進(jìn)行轉(zhuǎn)發(fā)到后端
3、docker容器之間怎么進(jìn)行通信炎功?(我總不能把數(shù)據(jù)庫(kù)的ip寫死吧)
可以通過(guò)network 進(jìn)行橋接(docker-compose編排會(huì)提)
通過(guò)link進(jìn)行鏈接
4枚冗、docker怎么實(shí)現(xiàn)一鍵部署?
docker-compose進(jìn)行一鍵部署
5蛇损、docker部署需要用supervisor進(jìn)行守護(hù)嗎赁温?
docker-compose 執(zhí)行的時(shí)候能設(shè)置自動(dòng)重啟
6、web的環(huán)境比較復(fù)雜淤齐,安裝十分緩慢股囊,每次更新代碼就需要重新,有解決方法嗎更啄?
1稚疹、把環(huán)境的鏡像制作好,我們可以基于python36制作一個(gè)自己需要的flask環(huán)境鏡像祭务,每次啟動(dòng)dockerfile只用復(fù)制就行
2内狗、使用掛載,宿主機(jī)和容器內(nèi)映射义锥,修改宿主機(jī)內(nèi)容
7柳沙、鏡像啟動(dòng)了拉不起來(lái)怎么辦?怎么排除故障
1、首先使用docker logs -f contain_id 查看日志
2 拌倍、使用鏡像進(jìn)入查看赂鲤,docker run -it --rm web:1 sh ,然后在里面進(jìn)行執(zhí)行啟動(dòng)命令進(jìn)行查看。--rm是為了進(jìn)入鏡像不修改完全退出的
3柱恤、可以在容器內(nèi)直接執(zhí)行python wsgi.py進(jìn)行測(cè)試数初,排除是不是gunicorn故障,如果正常運(yùn)行則測(cè)試gunicorn啟動(dòng)命令gunicorn解決方案
8、我在配置鏡像時(shí)候安裝py包很慢怎么辦梗顺?
修改容器內(nèi)鏡像源
在制作鏡像的目錄下創(chuàng)建文件pip.conf 內(nèi)容如下

[global]
index-url = https://pypi.tuna.tsinghua.edu.cn/simple 

Dockerfile內(nèi)容如下妙真,在安裝包之前配置好

配置鏡像源.png

下一篇:docker-compose 編排多容器通信,一鍵啟動(dòng)
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末荚守,一起剝皮案震驚了整個(gè)濱河市珍德,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌矗漾,老刑警劉巖锈候,帶你破解...
    沈念sama閱讀 221,430評(píng)論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異敞贡,居然都是意外死亡泵琳,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,406評(píng)論 3 398
  • 文/潘曉璐 我一進(jìn)店門誊役,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)获列,“玉大人,你說(shuō)我怎么就攤上這事蛔垢』骱ⅲ” “怎么了?”我有些...
    開封第一講書人閱讀 167,834評(píng)論 0 360
  • 文/不壞的土叔 我叫張陵鹏漆,是天一觀的道長(zhǎng)巩梢。 經(jīng)常有香客問(wèn)我,道長(zhǎng)艺玲,這世上最難降的妖魔是什么括蝠? 我笑而不...
    開封第一講書人閱讀 59,543評(píng)論 1 296
  • 正文 為了忘掉前任,我火速辦了婚禮饭聚,結(jié)果婚禮上忌警,老公的妹妹穿的比我還像新娘。我一直安慰自己秒梳,他們只是感情好法绵,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,547評(píng)論 6 397
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著端幼,像睡著了一般礼烈。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上婆跑,一...
    開封第一講書人閱讀 52,196評(píng)論 1 308
  • 那天此熬,我揣著相機(jī)與錄音,去河邊找鬼滑进。 笑死犀忱,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的扶关。 我是一名探鬼主播阴汇,決...
    沈念sama閱讀 40,776評(píng)論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼节槐!你這毒婦竟也來(lái)了搀庶?” 一聲冷哼從身側(cè)響起拐纱,我...
    開封第一講書人閱讀 39,671評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎哥倔,沒想到半個(gè)月后秸架,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 46,221評(píng)論 1 320
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡咆蒿,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,303評(píng)論 3 340
  • 正文 我和宋清朗相戀三年东抹,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片沃测。...
    茶點(diǎn)故事閱讀 40,444評(píng)論 1 352
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡缭黔,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出蒂破,到底是詐尸還是另有隱情馏谨,我是刑警寧澤,帶...
    沈念sama閱讀 36,134評(píng)論 5 350
  • 正文 年R本政府宣布寞蚌,位于F島的核電站田巴,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏挟秤。R本人自食惡果不足惜壹哺,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,810評(píng)論 3 333
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望艘刚。 院中可真熱鬧管宵,春花似錦、人聲如沸攀甚。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,285評(píng)論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)秋度。三九已至炸庞,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間荚斯,已是汗流浹背埠居。 一陣腳步聲響...
    開封第一講書人閱讀 33,399評(píng)論 1 272
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留事期,地道東北人滥壕。 一個(gè)月前我還...
    沈念sama閱讀 48,837評(píng)論 3 376
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像兽泣,于是被迫代替她去往敵國(guó)和親绎橘。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,455評(píng)論 2 359

推薦閱讀更多精彩內(nèi)容