美文网首页
docker+nginx+gunicorn部署flask+vue

docker+nginx+gunicorn部署flask+vue

作者: 周周周__ | 来源:发表于2020-03-16 22:52 被阅读0次

    一、准备镜像和WEB文件夹:

    # 基础镜像环境
         python:3.6   # 运行环境镜像
         nginx   # 部署镜像
    
    # 项目文件夹:
           --web/
              --app/  # 项目文件
              --wsgi.py # 启动入口
              --requirement.txt # flask运行环境包
              --Dockerfile  # 后端运行镜像配置
              --gunicorn_conf.py  # 启动配置
              -- ... # 其他配置略...
           --vue_index/
              --dist/ # 打包的vue项目
              --Dockerfile  # 部署前端运行配置(由于是前后端分离部署,所以后端由前端转发)
              --default.conf  # nginx配置
    

    1、打包项目

    1)、web/Dcokerfile配置
    FROM python:3.6  # 基于py3.6镜像
    RUN mkdir /web   # 创建文件夹
    WORKDIR /web   # 执行路径(等同cd /web)
    COPY requirements.txt /usr  # 复制当前文件到容器内
    COPY . /web          # 复制本文件项目到容器
    RUN pip install --no-cache-dir -r /usr/requirements.txt  # 安装运行需要的包
    CMD ["gunicorn", "wsgi:app", "-c", "/web/gunicorn.conf.py"]   # gunicorn执行
    
    2)、web/gunicorn_conf.py

    注意点:在docker中执行项目的话和直接在linux执行有区别,在docker中运行不能用
    -d 后台运行。

    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"      # 访问日志文件
    errorlog = "/web/logs/gunicorn_error.log"
    
    3)、生成项目镜像:

    docker build -t web:1 .

    2、打包nginx+前端

    1、vue_index/Dockerfile
    # 设置基础镜像
    FROM nginx
    # 将dist文件中的内容复制到 /usr/share/nginx/html/ 这个目录下面
    COPY dist/  /usr/share/nginx/html/
    #用本地的 default.conf 配置来替换nginx镜像里的默认配置
    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的,转发给后端,
            rewrite  /api/(.*)  /$1  break;
            proxy_pass http://192.168.2.2:8000;  # 这里是宿主机的ip
        }
    }
    
    3、生成项目镜像:

    docker build -t vue_index:1 .

    ps:只是简单的部署,主要是nginx部署转发后端。

    二、启动

    1、查看docker images
    2、启动后端容器:docker run -it -d -p 8000:8000 -v /data/web:/web web:1
    -d:容器后台启动
    -p:宿主机端口映射容器端口
    -v:挂载文件夹,在宿主机查看日志方便
    3、启动nginx容器:docker run -it -d -p 8001:80 vue_index:1
    ps:这里要注意的是宿主机的端口不能重复映射,现在启动容器后,我们可以通过访问ip+port进行直接访问。
    如果有相关的后端请求的话会直接匹配ip+port+/api 进行转发到后端的接口,实际访问的接口不变

    问题:

    1、docker部署gunicorn,为什么启动不了?
    gunicorn在docker启动时不能在后台运行
    2、nginx部署vue怎么搞?
    将前端部署在nginx,通过匹配api进行转发到后端
    3、docker容器之间怎么进行通信?(我总不能把数据库的ip写死吧)
    可以通过network 进行桥接(docker-compose编排会提)
    通过link进行链接
    4、docker怎么实现一键部署?
    docker-compose进行一键部署
    5、docker部署需要用supervisor进行守护吗?
    docker-compose 执行的时候能设置自动重启
    6、web的环境比较复杂,安装十分缓慢,每次更新代码就需要重新,有解决方法吗?
    1、把环境的镜像制作好,我们可以基于python36制作一个自己需要的flask环境镜像,每次启动dockerfile只用复制就行
    2、使用挂载,宿主机和容器内映射,修改宿主机内容
    7、镜像启动了拉不起来怎么办?怎么排除故障
    1、首先使用docker logs -f contain_id 查看日志
    2 、使用镜像进入查看,docker run -it --rm web:1 sh ,然后在里面进行执行启动命令进行查看。--rm是为了进入镜像不修改完全退出的
    3、可以在容器内直接执行python wsgi.py进行测试,排除是不是gunicorn故障,如果正常运行则测试gunicorn启动命令gunicorn解决方案
    8、我在配置镜像时候安装py包很慢怎么办?
    修改容器内镜像源
    在制作镜像的目录下创建文件pip.conf 内容如下

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

    Dockerfile内容如下,在安装包之前配置好

    配置镜像源.png
    下一篇:docker-compose 编排多容器通信,一键启动

    相关文章

      网友评论

          本文标题:docker+nginx+gunicorn部署flask+vue

          本文链接:https://www.haomeiwen.com/subject/zkdnehtx.html