• ngnix+uwsgi+django 部署mezzanine


    以下是我用ngnix+uwsgi+django 部署mezzanine全过程,其中ngnix+uwsgi这块是看了虫师大神的博客(http://www.cnblogs.com/fnng/p/5268633.html)

    安装必要的包:

    [root@iZj6cbstl2n6r280a27eppZ ~]# yum groupinstall "Development tools"
    [root@iZj6cbstl2n6r280a27eppZ ~]# yum install zlib-devel bzip2-devel pcre-devel openssl-devel ncurses-devel sqlite-devel readline-devel tk-devel

    django安装完毕后,在控制台输入 pip install mezzanine ,自动安装mezzanine到python目录

    mezzanine-project myblog 创建一个项目
    cd m1
    python manage.py createdb #创建数据库
    python manage.py runserver #启动测试服务器
    注意:createdb命令是django的migrate命令的一个缩写,这样我们将会安装一些演示的内容,比如联系人表单、图片库等,如果你想要忽略这一步,你也可以在createdb后面加上–nodata选项。

    [root@iZj6cbstl2n6r280a27eppZ myblog]# python manage.py collectstatic
    [root@iZj6cbstl2n6r280a27eppZ myblog]# python manage.py collecttemplates

    [root@iZj6cbstl2n6r280a27eppZ myblog]# yum install libxml2 gcc python-devel
    [root@iZj6cbstl2n6r280a27eppZ myblog]# pip install -i https://pypi.tuna.tsinghua.edu.cn/simple uwsgi
    [root@iZj6cbstl2n6r280a27eppZ myblog]# uwsgi --http :80 --module myblog.wsgi

    [root@iZj6cbstl2n6r280a27eppZ myblog]# nohup python manage.py runserver 0.0.0.0:80 > /tmp/pythondy.log 2>&1 &


    1、是标准输出(STDOUT)的文件描述符,2是标准错误(STDERR)的文件描述符
    1> python.log 简化为 > python.log,表示把标准输出重定向到python.log这个文件
    2、2>&1 表示把标准错误重定向到标准输出,这里&1表示标准输出
    为什么需要将标准错误重定向到标准输出的原因,是因为标准错误没有缓冲区,而STDOUT有。
    这就会导致 commond > python.log 2> python.log 文件python.log被两次打开,而STDOUT和STDERR将会竞争覆盖。

    安装uwsgi:
    pip install uwsgi
    Hello World[root@iZj6cbstl2n6r280a27eppZ ~]# uwsgi --version
    2.0.15

    测试 uwsgi 是否正常:
    新建 test.py 文件,内容如下
    [root@iZj6cbstl2n6r280a27eppZ app]# vim test.py
    def application(env, start_response):
    start_response('200 OK', [('Content-Type','text/html')])
    return "Hello World"

    [root@iZj6cbstl2n6r280a27eppZ app]# uwsgi --http :8001 --wsgi-file test.py
    *** Starting uWSGI 2.0.15 (64bit) on [Thu Sep 14 10:09:23 2017] ***
    compiled with version: 4.8.5 20150623 (Red Hat 4.8.5-11) on 12 September 2017 21:19:10
    os: Linux-3.10.0-514.26.2.el7.x86_64 #1 SMP Tue Jul 4 15:04:05 UTC 2017
    nodename: iZj6cbstl2n6r280a27eppZ
    machine: x86_64
    clock source: unix
    。。。。。。
    打开另一个终端:
    [root@iZj6cbstl2n6r280a27eppZ ~]# curl http://127.0.0.1:8001
    Hello World[root@iZj6cbstl2n6r280a27eppZ ~]#
    即证明安装成功

     连接uWSGI和django:

    uwsgi --http :8001 --chdir /app/myblog/ --wsgi-file /app/myblog/myblog/wsgi.py --master --processes 4 --threads 2 --stats 127.0.0.1:9191

    如果没有报错,即能通过uWSGI运行django

    uwsgi 的常用选项:

    http : 协议类型和端口号

    processes : 开启的进程数量

    workers : 开启的进程数量,等同于processes

    chdir : 指定运行目录

    wsgi-file : 载入wsgi-file

    stats : 在指定的地址上,开启状态服务

    threads : 运行线程。

    master : 允许主进程存在

    daemonize : 使进程在后台运行,并将日志打到指定的日志文件或者udp服务器(daemonize uWSGI)。实际上最常用的,还是把运行记录输出到一个本地文件上。

    pidfile : 指定pid文件的位置,记录主进程的pid号。

    vacuum : 当服务器退出的时候自动清理环境,删除unix socket文件和pid文件

    如果上面的命令没有报错,我们将命令用配置文件的形式保存,myweb_uwsgi.ini和manage.py放在同一个目录,新建myweb_uwsgi.ini

    [root@iZj6cbstl2n6r280a27eppZ myblog]# cat myweb_uwsgi.ini
    [uwsgi]

    socket = :8001
    chdir = /apps/myblog/
    processes = 4
    threads = 2
    module = myblog.wsgi
    master = true
    vacuum = true
    daemonize = /var/log/uwsgi.log

    这里8001是uWSGI连接nginx的关键端口

    安装nginx后修改nginx.conf的配置文件:注意server放在http下面

    server {

    listen 80 default_server;
    listen [::]:80 default_server;
    server_name 127.0.0.1 主机ip;
    #root /usr/share/nginx/html;

    # Load configuration files for the default server block.
    #include /etc/nginx/default.d/*.conf;

    location / {
    include uwsgi_params;
    uwsgi_pass 127.0.0.1:8001;
    }
    location /static {
    alias /app/myblog/static;
    }
    }

    重启nginx 服务,如果能够正常运行,代表nginx正常

    其中强调几点:

    1.include 必须指定为uwsgi_params;而uwsgi_pass指的IP 端口与myweb_uwsgi.ini配置文件中的必须一致,这是nginx和wsgi产生关联的关键。

    2.location /static 代表nginx处理静态页面

    3.80是nginx对外的端口

    [root@iZj6cbstl2n6r280a27eppZ myblog]# nohup python manage.py runserver 0.0.0.0:80 > /tmp/pythondy.log 2>&1 &

  • 相关阅读:
    2017/08/02 工作日志
    2017/08/01 工作日志
    http随笔
    window open() 方法
    asp.net中gridview控件的一些基本使用方法
    《java.util.concurrent 包源码阅读》04 ConcurrentMap
    《java.util.concurrent 包源码阅读》03 锁
    《java.util.concurrent 包源码阅读》02 关于java.util.concurrent.atomic包
    __stdcall 与 __cdecl
    iebugs产生的原因,zoom:1的作用
  • 原文地址:https://www.cnblogs.com/kingleoric/p/7523812.html
Copyright © 2020-2023  润新知