当前位置: 首页 > article >正文

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

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'  # 日志级别

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"]

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

其中,run的参数:

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

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;
	}
}



http://www.kler.cn/a/137378.html

相关文章:

  • Python urllib
  • Spark的Standalone集群环境安装
  • JAVA如何开启线程? 怎么保证线程安全?
  • Spark的学习-02
  • 大语言模型LLMs在医学领域的最新进展总结
  • 华为ensp防火墙配置(纯享版)
  • 【Django-02】 Model模型和模型描述对象Meta
  • 类型体系与基本数据类型(题目)
  • WinEdt 11.1编辑器的尝鲜体验
  • vscode c++ 报错identifier “string“ is undefined
  • 海外IP代理科普——API代理是什么?怎么用?
  • 一个快递包裹的跨国之旅
  • Flutter 使用 device_info_plus 遇到的问题
  • Python基础学习019--跳过
  • Django——模型层补充
  • ES Kibana 安装
  • 开发手账(一)
  • 为什么STM32在中国这么出名?
  • SpringBoot 注解开发
  • 深入了解Java 8 新特性:Stream流的实践应用(二)
  • FFmpeg常用命令行讲解及实战一
  • redis的高可用
  • 循环链表3
  • 数据类型扩展02
  • Java修仙记之记录一次与前端女修士论道的经历
  • 数据治理之springboot项目入门