• Docker部署FLASK Unicorn并配置Nginx


    1. 安装相关依赖

    flask==3.0.0
    pymysql==1.1.0 #我自己需要的
    flask_cors==4.0.0
    gunicorn==21.2.0
    gevent==23.9.1
    
    • 1
    • 2
    • 3
    • 4
    • 5

    2. 配置Gunicorn

    新建gunicorn.conf.py

    bind = '0.0.0.0:5418'  # 绑定的IP地址和端口
    workers = 8  # 同时执行的进程数,推荐为当前CPU个数*2+1
    worker_class="gevent" #sync, gevent, meinheld 工作模式选择,默认为sync,这里设定为gevent异步
    errorlog = './error.log'  # 错误日志文件的路径
    accesslog = './access.log'  # 访问日志文件的路径
    loglevel = 'info'  # 日志级别
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    2. 编写Dockfile

    # 基于的基础镜像,这里使用python,开发版本是 3.x ,基础镜像也写 3.x 就可以,这样可以保持版本一致,避免 Python 版本差异带来的问题
    FROM python:3.8.10 
    # 指定工作目录
    WORKDIR "/code"
    # 将依赖文件拷贝到项目中
    COPY requirement.txt ./
    # 执行指令,安装依赖
    RUN pip install -r requirement.txt -i https://pypi.tuna.tsinghua.edu.cn/simple
    # 执行指令,字符串间是以空格间隔;配置文件就是上面新建的
    CMD ["gunicorn", "app:app", "-c", "./gunicorn.conf.py"]
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10

    3. build

    # 构建image,命名为 rec_sys
    sudo docker build -t "rec_sys" .
    # 将image运行起来,并将项目根目录挂在到container的/code目录下
    sudo docker run --name rec_sys_container -d -p 5418:5418 -v ~/smartfarm-recommendation:/code rec_sys
    
    • 1
    • 2
    • 3
    • 4

    其中,run的参数:

    -d: 后台运行容器并返回容器ID
    -p:指定端口映射(本机:容器)
    -v:卷挂载
    
    • 1
    • 2
    • 3

    4. 配置Nginx

    server {
    	listen 443 ssl;
        #配置HTTPS的默认访问端口为443。
        #如果未在此处配置HTTPS的默认访问端口,可能会造成Nginx无法启动。
        #如果您使用Nginx 1.15.0及以上版本,请使用listen 443 ssl代替listen 443和ssl on。
        server_name ****.com;
        #root html;
        #index index.html index.htm; 
    
        ssl_certificate /home/****/cert/****.pem;
        ssl_certificate_key /home/****/cert/****.key;
        ssl_session_timeout 5m;
        ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4;
        #表示使用的加密套件的类型。
        ssl_protocols TLSv1.1 TLSv1.2; #表示使用的TLS协议的类型,您需要自行评估是否配置TLSv1.1协议。
        ssl_prefer_server_ciphers on;
        
        location /smartfarm-recommend/ {
    	   proxy_pass http://127.0.0.1:5418/api/; # 将请求转发到Flask应用的端口
    	   proxy_redirect     		off;
    	   proxy_set_header        	Host            $host;
    	   proxy_set_header        	X-Real-IP       $remote_addr;
    	   proxy_set_header        	X-Forwarded-For $proxy_add_x_forwarded_for;
    	}
    }
    
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
  • 相关阅读:
    【深蓝学院】手写VIO第1章第1节
    RMAN-05021
    数据结构与算法之排序: Leetcode 922. 按奇偶排序数组 II (Typescript版)
    怎么修改Jenkins的默认工作路径,最简单高效的方式
    【MyBatis-Plas】MyBatis+MP & Spring+MyBatis+MP
    嵌入式实时操作系统的设计与开发 (邮箱)
    AS Level和A2 Level的区别及难度
    C++11的weak_ptr弱引用的智能指针
    java毕业设计安全管理系统mybatis+源码+调试部署+系统+数据库+lw
    GEO的表达矩阵的探针ID转换成基因名称教程
  • 原文地址:https://blog.csdn.net/SingDanceRapBall/article/details/134538474