返回顶部
首页 > 资讯 > 后端开发 > Python >nginx+uwsgi+flask+su
  • 608
分享到

nginx+uwsgi+flask+su

uwsginginxsu 2023-01-31 00:01:47 608人浏览 独家记忆

Python 官方文档:入门教程 => 点击学习

摘要

环境 - linux: ubuntu 16.04 - uWSGI 2.0.18 - flask 1.0.2 - supervisor 3.2.0 - Nginx/1.8.1 首先区分几个概念 WS

环境

- linux: ubuntu 16.04
- uWSGI        2.0.18 
- flask         1.0.2
- supervisor    3.2.0
- Nginx/1.8.1

首先区分几个概念

uwsgi和WSGI协议

  1. WSGI
    • WEB Server Gateway Interface (web服务器网管接口)
    • 是一种规范,是web服务器和web应用(Django/flask) 之间的接口,是二者之间的通信桥梁
    • 没有官方的实现,更像是一个协议,约定俗成的,规定WSGI application 应该实现为一个可调用的对象。只要遵循这些协议,WSGI应用都可以在任何服务器上运行
  2. uWSGI
    • 是一个web服务器,实现了WSGI协议,uwsgi、Http等协议
    • 代码完全用c编写,效率高性能稳定,用于接收前端服务器转发的动态请求并处理后给web应用程序
  3. uwsgi
    是uWSGI服务器实现的独有的协议,是一种传输协议,用户uWSGI与其他服务器间通信(
    如与Nginx之间通信)

在DjanGo中启动文件是wsgi.py, 该文件在生成Django目录的时候便会自动生成,用于web server 与 Django 通信,相当于提供了一个可调用的application对象,在这个类中实现了call方法。

在flask 中 app = Flask(name) 所在的启动文件 manager.py 便是与web server 进行通信的 application可调用对象

简单的服务器项目准备

新建一个项目并写一个简单的flask web 服务器app
目录~/Desktop/flask_deploy/manager.py

1 # coding=utf8
  2 from flask import Flask
  3 

  4 app = Flask(__name__)
  5 
  6 
  7 @app.route('/', methods=['GET'])
  8 def index():
  9    return 'hello world'
 10 
 11 
 12 if __name__ == '__main__':
 13    app.run(debug=False)

1 配置python项目虚拟环境

  • 安装虚拟环境管理工具
    pip install virtualenv virtualenvwrapper
  • 编辑主目录下的.bashrc文件,添加以下内容
    export WORKON_HOME=$HOME/.virtualenvs  # ./virtualvenvs便是虚拟环境安装目录
    source /urs/local/bin/virtualenvwrapper.sh

可以通过whereis virtaulenvwrapper.sh 查找该源文件
inux命令和文件查找

  • 执行以下命令使配置生效

    source ./bashrc

  • 相关命令
mkvirtualenv -p python3 env_name  # -p 指定Python环境
workon + tab*2 # 查看本机下有哪些虚拟环境
workon env_nmae  # 进入虚拟环境
deactivate       # 退出虚拟环境
rmvirtualenv env_name    # 删除虚拟环境 

2 uwsgi安装与配置

在当前虚拟环境下,进行安装相应包

pip install falsk uwsgi
在当前项目目录下创建文件 ~/Desktop/flask_deploy/uwsgi.ini
vi uwsgi.ini

[uwsgi]
# 使用nginx连接时使用Socket通信
socket=127.0.0.1:8000
# 直接使用自带web server 使用http通信
#http=127.0.0.1:8000
# 指定项目目录
chdir=/home/python/Desktop/flask_deploy
# 指定python虚拟环境
home=/home/python/.virtualenvs/deploy
# 指定加载的WSGI文件
wsgi-file=manager.py
# 指定uWSGI加载的模块中哪个变量将被调用
callable=app
# 设置工作进程的数量
processes=2
# 设置每个工作进程的线程数
threads=2
# 将主进程pid写到指定的文件
pidfile=%(chdir)/uwsgi.pid
# 日志文件
req-logger=file:/home/python/Desktop/flask_deploy/log/req.log
logger=file:/home/python/Desktop/flask_deploy/log/err.log

#uid=xxx # uWSGI服务器运行时的用户id,未设置则为当前启动的用户
#gid=xxx # uWSGI服务器运行时的用户组id
#procname-prefix-spaced=site # 指定工作进程名称的前缀

配置文件中指定wsgi启动文件有几种方式

    # 指定加载的WSGI文件
    wsgi-file=manager.py
    # 指定uWSGI加载的模块中哪个变量将被调用
    callable=app
    # 模块名:可调用对象app
    module=manager:app
    module=manager
    callable=app
uwsgi相关命令
uwsgi --ini uwsgi.ini   # 启动   
uwsgi --stop uwsgi.pip  # 停止  
pkill -9 uwsgi          # 停止

3 supervisor 安装与监控

简介: supervisor就是用python开发的一套通用的进程管理程序,能将一个普通的命令行进程变为后台daemon,并监控进程状态,异常退出时能自动重启。

安装:

apt-get install supervisor

默认配置文件在/etc/supervisro/supervisord.conf, 自己开发可以将配置文件写在 /etc/supervisor/conf.d/目录下,文件扩展名必须为*.conf

配置解释
[program:uwsgi]
command=/home/python/.virtualenvs/deploy/bin/uwsgi /home/python/Desktop/flask_deploy/uwsgi.ini
user=root
autostart=true
autorestart=true
stdout_logfile=/home/python/Desktop/flask_deploy/log/uwsgi_supervisor.log
stderr_logfile=/home/python/Desktop/flask_deploy/log/uwsgi_supervisor_err.log
- [program:module_name]表示supervisor的一个模块名  
- command 程序启动命令如: /usr/bin/python - app.py  
- user 进程运行的用户身份
- autostart=true  跟随Supervisor一起启动
- autorestart=true 挂掉之后自动重启
- stderr_logfile, stdout_logfile 标准输出,错误日志文件
启动supervisor

sudo supervisord -c /etc/supervisor/supervisord.conf # supervisord.conf 会自动包含conf.d/目录下的conf文件

相关命令

1️⃣supervisorctl status  # 查看启动的项目
2️⃣supervisorctl start module_name  # 启动项目
3️⃣supervisorctl stop module_name   # 停止木箱
4️⃣supervisorctl shutdown   # 关闭所有项目和服务

启动后可以 ps -aux | grep 查看 uwsgi 和supervisor 都在运行了

4 Nginx安装与配置

apt-get install nginx
默认安装在/etc/nginx/目录下
配置目录 /etc/nginx/conf/flask_deploy.conf

http {
    include       mime.types;
    default_type  application/octet-stream;
    server {
        listen  80;
        server_name 127.0.0.1; #公网地址

    location / {
        include      uwsgi_params;
        uwsgi_pass   127.0.0.1:8000;
    }
    }
}

启动

usr/sbin/nginx -c /etc/nginx/conf/flask_deploy.conf

相关命令:

1️⃣nginx -s reload  
2️⃣nginx -s stop  

nginx 详细介绍及语法参考:nginx:详细配置说明

不出意外的话浏览器访问:127.0.0.1即可出现hello world。

部署负载均衡

nginx+uwsgi+flask+supervisor部署负载均衡,

  1. 只需要在项目目录下加一个uwsgi2.ini文件(uWSGI 应用启动配置),修改soket ip,pipfile,logfile路径即可
  2. 再根据以上步骤在supervisor 配置文件中增加一个uwsgi2的监控模块,增加相应配置
  3. nginx 负载均衡配置
events {
    worker_connections  1024;
}

http {
    include       mime.types;
    default_type  application/octet-stream;

    upstream flask {
        server 127.0.0.1:8000;
        server 127.0.0.1:8001;
    }

    server {
        listen  80;
        server_name 127.0.0.1; #公网地址

    location / {
        include      uwsgi_params;
        uwsgi_pass   flask;
        proxy_
    }
    }
}

如此,便配置了一个简单的负载均衡的服务器。访问127.0.0.1,同时用tail 命令查看 两个uwsgi配置中文件中设置的req_logfile 可以观察到流量分发的现象。

小结

suervisor 是个后台进程管理工具,不仅局限于监控uwsgi 服务器,还可以监控其他 可能意外宕机的服务程序。

其他

相对的可作为web服务器的还有Gunicorn 是从Ruby 的(Unicorn)移植的python HTTP 服务器,兼容各种框架,不需要写配置文件,轻量级的资源消耗.

安装

pip install gunicorn
启动服务器
gunicorn -w 4 -b 127.0.0.1:8080 manager:app --daemon # 已守护进程方式启动,默认为False

gunicorn 以配置文件方式启动

文件名 gunicorn.conf

    # 指定web服务器监听的if和端口
    bind = '127.0.0.1:8080'
    # 指定工作进程
    workers = 4
    # 指定服务器后台运行
    daemon = True
    # 保存主进程id
    pidfile = 'gunicorn.pid'
    # 启动服务器之后生成 access.log 保存访问日志
    accesslog = 'access.log'
    # 启动服务器之后生成 errorlog , 保存错误日志
    errorlog = 'error.log'

启动方式:

gunicorn -c gunicorn.conf manager:app

Reference

Linux后台进程管理利器:supervisor
flask+nginx+uwsgi+supervisor项目部署

--结束END--

本文标题: nginx+uwsgi+flask+su

本文链接: https://lsjlt.com/news/181681.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • nginx+uwsgi+flask+su
    环境 - Linux: Ubuntu 16.04 - uWSGI 2.0.18 - Flask 1.0.2 - supervisor 3.2.0 - nginx/1.8.1 首先区分几个概念 WS...
    99+
    2023-01-31
    uwsgi nginx su
  • Nginx+uwsgi+Django (
    Nginx+uwsgi+Django (Python web环境)nginx配置文件[root@DB02 rc3.d]# vi /application/nginx/conf/nginx.conf user  root; worker_pr...
    99+
    2023-01-31
    Nginx uwsgi Django
  • Nginx + uWSGI + Pyt
    Nginx:Nginx 是一个高性能的 Web 和反向代理服务器, 它具有有很多非常优越的特性:作为 Web 服务器:相比 Apache,Nginx 使用更少的资源,支持更多的并发连接,体现更高的效率,这点使 Nginx 尤其受到虚拟主机提...
    99+
    2023-01-31
    Nginx uWSGI Pyt
  • Nginx+uWSGI+DJango+P
    本文出自:http://www.mpyun.com/一、安装所需工具yum -y install gcc gcc-c++ rpm-build mysql* libtool-ltdl* libtool automake autoconf li...
    99+
    2023-01-31
    Nginx uWSGI DJango
  • Nginx+Python+uwsgi+D
    1,系统环境CentOS 6.x 或者更高版本Python 3.6.x 2,Python3环境的安装首先安装依赖包yum -y groupinstall “Development tools”yum -y install zlib-deve...
    99+
    2023-01-31
    Nginx Python uwsgi
  • django+uwsgi+nginx部署
    django+uwsgi+nginx部署   1.介绍:   在网上看了很多教程,但自己部署了很久都没有成功,这篇博文记录自己所踩过得坑。   2.环境: 1 Ubuntu 16.04.1 LTS (GNU/Linux 4.4.0-13...
    99+
    2023-01-30
    django uwsgi nginx
  • nginx+uwsgi部署django项
    1、django项目部署前需要生成admin的静态资源文件 (1)生成admin的静态资源文件   # 关闭debug模型 DEBUG = False # 允许所有域名访问 ALLOWED_HOSTS = ['*'] # 静态资源路径 ...
    99+
    2023-01-31
    nginx uwsgi django
  • nginx+uwsgi+djangorestframework+flower+celery+redis
    nginx+uwsgi+djangorestframework+flower+celery+redis配置如下:nginx server配置, 没有https,注释掉ssl开头配置即可.server {   &...
    99+
    2023-01-31
    djangorestframework uwsgi nginx
  • ubuntu supervisor管理uwsgi+nginx
    superviosr是一个Linux/Unix系统上的进程监控工具,他/她upervisor是一个Python开发的通用的进程管理程序,可以管理和监控Linux上面的进程,能将一个普通的命令行进程变为后台daemon,并监控进程状态,异常退...
    99+
    2023-01-31
    supervisor ubuntu nginx
  • uwsgi+nginx项目部署
    部署Django项目 Django+uWSGI+nginx 部署 django 一个pyhton的开源web框架。 uWSGI 一个基于自有的uwsgi协议、WSGI协议和http服务协议的web网关 nginx 常用的代理服务器 ...
    99+
    2023-01-31
    项目 uwsgi nginx
  • Python3 flask nginx
    配置项目的时候一般使用虚拟环境,是各个项目的环境独立起来,更多方便管理。至于如何使用搜索即可,并不难 1、安装python3 yum -y install zlib-devel bzip2-devel openssl-devel ncur...
    99+
    2023-01-30
    flask nginx
  • Django+Nginx+uwsgi服务器部署
    一、安装 uwsgi uWSGI是一个Web服务器,它实现了WSGI协议、uwsgi、http等协议,旨在提供专业的 Python web应用发布和开发。Nginx中HttpUwsg...
    99+
    2024-04-02
  • centos+nginx+uwsgi部署django项目上线
    目录Python安装django相关库的安装nginx安装&配置(处理静态请求和代理动态请求到uwsgi)uwsgi安装&配置标题关闭setting.py的DEBUG...
    99+
    2024-04-02
  • Django + Uwsgi + Nginx 的生产环境部署
    使用runserver可以使我们的django项目很便捷的在本地运行起来,但这只能在局域网内访问,如果在生产环境部署django,就要多考虑一些问题了。比如静态文件处理,安全,效率等等,本篇文章总结归纳了一下基于uwsgi+Nginx下dj...
    99+
    2023-01-30
    环境 Django Uwsgi
  • nginx + uwsgi + django 优化和参数设置
    最近用python写了一个web系统,用的框架是nginx + uwsgi + django + oracle。服务器用的是centos 7.web API的吞吐量要求是200/s。使用postman对单次web API调用进行测试,时间约...
    99+
    2023-06-02
  • Flask+Nginx踩坑记录
    因为之前的网站项目使用的是Spring MVC,而且当时为了尽快赶完,代码结构非常粗暴,还存在大量的copy-paste代码,然后被师兄批评,然后决定接受师兄的建议,对网站进行重构,并且使用听说可以让我长寿一点的python【什么鬼。。。...
    99+
    2023-01-31
    Flask Nginx
  • Django+Nginx+uWSGI定时任务怎么实现
    今天小编给大家分享一下Django+Nginx+uWSGI定时任务怎么实现的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。摘要...
    99+
    2023-06-28
  • ubuntu Django + Uwsgi + Nginx 的生产环境部署
    使用runserver可以使我们的django项目很便捷的在本地运行起来,但这只能在局域网内访问,如果在生产环境部署django,就要多考虑一些问题了。比如静态文件处理,安全,效率等等,本篇文章总结归纳了一下基于uwsgi+Nginx下dj...
    99+
    2023-01-31
    环境 Django ubuntu
  • Nginx+uwsgi+Django部署代码怎么编写
    Nginx+uwsgi+Django部署代码怎么编写,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。Nginx+uwsgi+Django部署代码安装uwsgi1....
    99+
    2023-06-04
  • django生产环境搭建(uWSGI+django+nginx+python+MySQL)
    目录1、系统环境,必要知识2、安装python3.6.53、安装Django4、安装uWSGI5、安装nginx6、MySQL安装配置7、编写一个简单的博客系统1、系统环境,必要知识 #cat /etc/red...
    99+
    2022-05-18
    django生产环境搭建 django生产环境 uWSGI django nginx python MySQL
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作