zoukankan      html  css  js  c++  java
  • Nginx+uWSGI+Supervisor配置

    系统是Ubuntu16

    Nginx

    1. 安装nginx
    sudo apt-get install nginx 
    
    1. nginx的操作
    sudo service nginx start
    sudo service nginx stop
    sudo service nginx restart
    
    1. 测试nginx是否能用

    在浏览器输入服务器的ip地址,出现nginx欢迎界面,说明启动成功

    1. 配置nginx

    默认配置文件是/etc/nginx里的nginx.conf,不用管
    /etc/nginx/conf.d下添加一个新的配置文件

    cd /etc/nginx/conf.d
    nano bbs_nginx.conf
    

    编辑内容如下

    # bbs 是项目名
    upstream bbs {
        # 指向项目目录下的 socket 文件
        # 这个文件在运行的时候会自动生成
        server unix:///home/bbs/bbs.sock; 
    }
    
    server {
        listen      80;
        server_name 本机ip或域名;
        charset     utf-8;
    
        # 最大的上传大小
        client_max_body_size 75M;
    
        location / {
            # 指定访问哪个 upstream
            uwsgi_pass  bbs;
            # 从 /etc/nginx 下复制一份 uwsgi_params 到项目目录下
            # 可能要先安装 uwsgi 才会有这个文件
            include     /home/bbs/uwsgi_params;
        }
    }
    
    1. 写完配置文件后,测试是否正确
    sudo service nginx configtest
    

    uWSGI

    1. 安装uwsgi

    注意要用pip3来装而不是pip,不然会报no module named site的错误
    uwsgi绝对是我在部署的时候碰到过的最恶心的坑

    sudo apt-get install libpcre3 libpcre3-dev
    sudo pip3 install uwsgi
    
    1. 配置uwsgi

    在项目目录下新建一个配置文件

    cd /home/bbs
    nano bbs_uwsgi.ini
    

    编辑内容如下

    [uwsgi]
    # 目录的路径
    chdir           = /home/bbs
    # 项目的虚拟环境路径
    home            = /home/venv/py3
    # 模块,这个没搞懂,写启动文件的名字好了
    module          = wsgi
    master          = true
    processes       = 8
    # socket 文件路径,和上面 nginx 指定的是一个东西
    socket          = /home/bbs/bbs.sock
    # 指定需要启动的文件
    wsgi-file       = /home/bbs/wsgi.py
    # 启动文件里 flask 实例的名称
    callable        = app
    chmod-socket    = 666
    
    1. 通过uwsgi拉起项目

    因为配置是和nginx相关的,所以要先启动nginx

    sudo service nginx start
    

    再通过配置文件启动uwsgi

    uwsgi --ini bbs_uwsgi.ini
    

    在浏览器里访问ip地址,应该就有结果了

    Supervisor

    1. 安装supervisor
    sudo pip install supervisor
    
    1. 配置supervisor

    在项目目录下新建一个配置文件

    cd /home/bbs
    nano bbs_supervisor.conf
    

    编辑内容如下

    # supervisor 的程序名称
    [program:app]
    # supervisor 执行的命令
    command=uwsgi --ini bbs_uwsgi.ini
    # 项目的目录
    directory = /home/bbs
    startsecs=0
    stopwaitsecs=0
    autostart=true
    autorestart=true
    # 输出的 log 文件位置,要新建 log 文件
    stdout_logfile=/home/bbs/log/supervisord.log
    # 输出的错误文件位置
    stderr_logfile=/home/bbs/log/supervisord.err
    
    [supervisord]
    loglevel=debug
    
    # 使用 supervisorctl 的配置
    [supervisorctl]
    serverurl = http://127.0.0.1:9001
    username = admin
    password = 123
    
    [inet_http_server]
    port = :9001
    username = admin
    password = 123
    
    [rpcinterface:supervisor]
    supervisor.rpcinterface_factory = supervisor.rpcinterface:make_main_rpcinterface
    
    1. 使用supervisor运行uwsgi
    supervisord -c bbs_supervisor.conf
    
    1. 使用supervisorctl管理supervisord
    supervisorctl -c bbs_supervisor.conf
    

    常用命令

    > status    # 查看状态
    > start program_name    # 启动程序
    > restart program_name    # 重新启动程序
    > stop program_name    # 停止程序
    > reload    # 重新加载配置文件
    > quit    # 退出当前的客户端
    

    status能查看程序的状态

    文档:
    http://liyangliang.me/posts/2015/06/using-supervisor/

    nginx 域名解析到ip 迟迟没反应

    今天发生了一个有意思的事情,解析了一个域名到ip
    但迟迟没反应,等了大半天,以为是阿里云的锅
    直接访问域名就是Welcome to nginx!,后面加路由就是nginx的not found

    后来忽然想起,会不会是nginx的问题,域名没设置
    于是在nginx的配置文件里
    server_name添加了后面两个server_name ip地址 domain.com www.domain.com;
    重启nginx就可以用了

    uwsgi cpu使用率100%

    有个用来测试的服务器cpu一直处于负载状态
    在Linux里面看下进程
    ps aux | less
    发现占用cpu的是一堆uwsgi进程,uwsgi配置文件里processes填的是8
    按道理最多只有8个uwsgi进程,但是这有十几个,每个占用率有百分之十几

    网上说法

    python+supervisor+uwsgi跑web程序时出现uwsgi defunct进程的cpu达到100%问题
    这个问题的原因是supervisor中进程退出,而重启进程时的处理有问题
    详细情况可以看 https://github.com/unbit/uwsgi/issues/296
    问题解决的办法是在uwsgi的配置文件中添加die-on-term = true参数
    或者在命令行参数中添加--die-on-term参数

    我暂时加了这个参数,不确定有没有用
    杀掉之前已经存在的uwsgi进程,一下子cpu占用率就下去了
    killall -9 uwsgi

  • 相关阅读:
    centos7 安装mysql
    Nginx安装及配置详解
    nginx安装
    JSON Web Token
    优先队列
    小程序遮罩层禁止页面滚动(遮罩层内部可以滚动)
    H5中接入微信支付
    如何使用less预编译
    在methods中使用filter
    根据当前时间获取上一个月的时间
  • 原文地址:https://www.cnblogs.com/xb21/p/8386081.html
Copyright © 2011-2022 走看看