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

python 复制代码
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

bash 复制代码
# 基于的基础镜像,这里使用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

bash 复制代码
# 构建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

bash 复制代码
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;
	}
}
相关推荐
ajsbxi14 分钟前
苍穹外卖学习记录
java·笔记·后端·学习·nginx·spring·servlet
川石课堂软件测试3 小时前
性能测试|docker容器下搭建JMeter+Grafana+Influxdb监控可视化平台
运维·javascript·深度学习·jmeter·docker·容器·grafana
追风林10 小时前
mac 本地docker-mysql主从复制部署
mysql·macos·docker
城南vision12 小时前
Docker学习—Docker核心概念总结
java·学习·docker
wclass-zhengge12 小时前
Docker篇(Docker Compose)
运维·docker·容器
工业互联网专业15 小时前
Python毕业设计选题:基于Hadoop的租房数据分析系统的设计与实现
vue.js·hadoop·python·flask·毕业设计·源码·课程设计
梦魇梦狸º16 小时前
腾讯轻量云服务器docker拉取不到镜像的问题:拉取超时
docker·容器·github
鬼才血脉16 小时前
docker+mysql配置
mysql·adb·docker
詹姆斯爱研究Java16 小时前
Docker 的基本概念和优势
docker
南猿北者18 小时前
docker镜像仓库常用命令
运维·docker·容器