有什么岁月静好,不过是有人替你负重前行!哪

基于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的部署!如按照以上部署失败,欢迎评论留言,戳博主~

posted @   迎风而来  阅读(3357)  评论(2编辑  收藏  举报
编辑推荐:
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
阅读排行:
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
· Ollama——大语言模型本地部署的极速利器
· DeepSeek如何颠覆传统软件测试?测试工程师会被淘汰吗?
/*吸附球*/
点击右上角即可分享
微信分享提示

喜欢请打赏

扫描二维码打赏

了解更多