zoukankan      html  css  js  c++  java
  • 基于docker部署flask+gunicorn+nginx

    nginx安装在/etc/下,项目映射在docker中的/var/www/下

    1、创建docker容器将端口映射出来,将docker外的项目映射到docker中

    #docker run -it -p 8007:8000 -v /opt/project/datatagservice:/var/www/ --name datatagservicetest harbor.fir.ai/library/dataanalysis bash
    #8007端口映射到8000,docker容器名:dataservicetest,镜像名:harbor.fir.ai/library/dataanalysis 
    #按ctrl+P+q或手动输入exit回车退出容器
    #退出容器后想在进入容器可以使用:docker exec -it dataservicetest(容器名) bash

    2、在flask根目录下创建一个gun_config.py文件,文件内容如下:

     ­*­ coding: utf­8 ­*­
    #import gevent.monkey
    #import multiprocessing
    
    #gevent.monkey.patch_all()
    
    # 监听本机的5000端口
    bind = '0.0.0.0:9000'        #指定gunicorn的端口号
    
    #preload_app = True
    
    # 开启进程
    workers=4
    #workers = multiprocessing.cpu_count() * 2 + 1
    
    # 每个进程的开启线程
    #threads = multiprocessing.cpu_count() * 2
    
    backlog = 2048
    
    timeout = 60*60*10
    
    # 工作模式为gevent
    # worker_class = "gevent"
    
    debug=True
    
    # 如果不使用supervisord之类的进程管理工具可以是进程成为守护进程,否则会出问题
    daemon = True
    
    # 进程名称
    proc_name = 'gunicorn.pid'
    
    # 进程pid记录文件
    pidfile = 'app_pid.log'
    
    loglevel = 'logs/debug'
    logfile = 'logs/gun_debug.log'
    accesslog = 'logs/gun_access.log'
    access_log_format = '%(h)s %(t)s %(U)s %(q)s'
    errorlog = 'logs/gun_error.log'

    2.1、在flask根目录下再创建一个restart_gunicorn.sh文件,文件内容如下:

    #gunicorn -w 4 -b 0.0.0.0:8080 app:app
    #gunicorn -c gun_config.py  app:app
    #!/bin/bash
    
    ps aux|grep gun_config.py|awk '{print $2}'|xargs kill -9
    
    sleep 1.5
    
    ulimit -n 65535
    
    gunicorn -c gun_config.py  app:app     #切到flask项目根目录下,使用该行命令启动flask项目,也可以使用sh restart_gunicorn.sh进行启动flask项目
    
    ps aux|grep gun_config.py|head -3

    3、在创建的docker中下载nginx,对nginx中/etc/nginx/sites-enabled中的配置文件做修改:复制default文件,然后重命名为:dataretrieve_nginx.conf(重命名为.conf即可),清空该配置文件的内容,重写配置内容如下:

    server {
    listen       8000;
    server_name  192.168.1.xxx;  #服务器的ip地址或者域名
    access_log /var/www/datatagservice/logs/nginx_access.log;
    error_log /var/www/datatagservice/logs/nginx_error.log;
    
    location / {
        proxy_pass http://127.0.0.1:9000; # 这里是指向 gunicorn host 的服务地址
        proxy_set_header Host $host;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    }
    }

    4、以上三步准备完成即可通过下面的命令进行启动nginx,gunicorn,即可完成对flask项目的启动,并在后台进行稳定运行

    #启动nginx:nginx
    #启动gunicorn需要将目录切到项目根路径下执行:gunicorn -c gun_config.py app:app或sh restart_gunicorn.sh
    #如果以上出现问题,可以通过下列命名杀死进程:
    #杀死nginx进程:pkill nginx
    #杀死gunicorn进程:pkill gunicorn
    如果上述两个命令杀死进程失败可以通过pid杀死进程
    #查看nginx进程pid:ps -ef|grep nginx
    #查看gunicorn进程pid:ps -ef |grep gunicorn
    #通过查看的pid杀死进程:kill -9 (上述两行命令查看的pid)

    以上四步即可完成对flask的部署!如按照以上部署失败,欢迎评论留言,戳博主~

  • 相关阅读:
    【leetcode】Remove Duplicates from Sorted Array I & II(middle)
    Android--Activity在跳转时携带数据
    HDU 5371 Manacher
    Java之旅hibernate(2)——文件夹结构
    【智能路由器】让MT7620固件openwrt支持USB
    Android Context 是什么?
    分治法解决高速排序问题
    Alluxio增强Spark和MapReduce存储能力
    UVA
    《React-Native系列》44、基于多个TextInput的键盘遮挡处理方案优化
  • 原文地址:https://www.cnblogs.com/sui776265233/p/10913105.html
Copyright © 2011-2022 走看看