• 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
  • 相关阅读:
    【个人博客系统网站】项目的发布 · 通过公网IP访问我们的网站 · 思考总结
    Kafka序列化反序列化解析、kafka schema
    【校招VIP】“推电影”第一期电影详情模块前端代码作业评审
    外贸增长背后的跨境电商转型路径
    计算机网络相关-ip地址,子网掩码与网络地址,广播地址
    LeetCode 周赛笔记 —— 2022年8月 第一周
    使用Mongoose populate实现多表关联存储与查询,内附完整代码
    python协程详细解释以及例子
    常见机器学习算法的优缺点及如何选择1
    2605. 从两个数字数组里生成最小数字
  • 原文地址:https://blog.csdn.net/SingDanceRapBall/article/details/134538474