• 基于Nginx 和 uwsgi 搭建 django.


    第一篇博客,不是很懂语法之类的,希望通过多写点东西,记录自己的成长,早点成为一个pyer.

    就写下这两天折腾的这个nginx-uwsgi-django.

    首先附上官方文档链接 http://uwsgi-docs.readthedocs.io/en/latest/tutorials/Django_and_nginx.html

    环境 python == Python 2.7.3, os == centos6.5 x86_64

          django == 1.8.1

          uwsgi == uWSGI 2.0.15 (64bit) #都是pip 直接安装的

          nginx == 1.10.1      #yum install -y 

      1.刚刚创建的project 

    $django-admin startproject test_nginx_uwsgi
    $cd test_nginx_uwsgi/
    $tree
    .
    ├── manage.py
    └── test_nginx_uwsgi
        ├── __init__.py
        ├── settings.py
        ├── urls.py
        └── wsgi.py

    2.当前目录下创建test.py文件,代码如下:

    #test.py 
    def application(env, start_response):
        start_response('200 OK', [('Content-Type','text/html')])
        return "Hello World" #国际惯例,helloworld
    

     运行代码:

    $uwsgi --http :9111 --wsgi-file test.py
    ##中间东西很多,又看不懂,乱七八糟的,我就不贴了##
    *** uWSGI is running in multiple interpreter mode ***
    spawned uWSGI worker 1 (and the only) (pid: 19381, cores: 1)

    参数含义简介:

    • :9111 > 想必大家都知道,运行的端口
    • wsgi-file > 指定加载的文件
    • 报错[uwsgi: command not found]的话,ln -s /your-python-dir/bin/* /usr/bin/*

     如图所示,第一步完成!

    3.测试您的django 是否能够正常运行!ps:为了方便起见我们直接用admin网站测试好了~~

    $python manage.py syncdb #创建superuser
    $python manage.py makemigration
    $python manage.py migrate
    $python manage.py runserver 0.0.0.0:9111

    大家有目共睹

    4.使用Uwsgi 跑 django项目

    cmd: (其中test_nginx_uwsgi.wsgi指的就是test_nginx_uwsgi目录下的wsgi.py,django1.8自动生成)

    $ uwsgi --http :9111 --module test_nginx_uwsgi.wsgi

     又成功了一步~可以对比上面的,同样的url,这里却很难看,是因为没有加载static文件

       但是可以说明  web-client <-> Uwsgi <-> Django 是连通的,下面的就要看Nginx.

    5.配置Nginx.

    由于版本的问题,如果这里也用官方的源码就不行了。

    1. 收集静态文件
      #首先setting.py中添加
      STATIC_ROOT = '/root/django/test_nginx_uwsgi/static_root/'
      ------------------------------我是换行------------------------------
      $python manage.py collectstatic You have requested to collect static files at the destination location as specified in your settings: /root/django/test_nginx_uwsgi/static_root This will overwrite existing files! Are you sure you want to do this? Type 'yes' to continue, or 'no' to cancel: yes #·······省略~ 62 static files copied to '/root/django/test_nginx_uwsgi/static_root'.
    2. nginx配置文件在 /etc/nginx/nginx.conf ,其中include -> /etc/nginx/conf.d/*.conf  [这个,相信大多数linux服务如出一辙]
    3. vi /etc/nginx/conf.d/test_nginx_uwsgi.conf,代码如下
      # test_nginx_uwsgi.conf
      
      # the upstream component nginx needs to connect to
      upstream django_test { #加上_test,因为和原来的冲突了,这里备注下
          # server unix:///path/to/your/mysite/mysite.sock; # for a file socket
          server 127.0.0.1:9111; # for a web port socket (we'll use this first) 类似uwsgi端口
      }
      # configuration of the server
      server {
          # the port your site will be served on
          listen      8090;  #nginx 运行端口
          # the domain name it will serve for
          server_name .example.com; # substitute your machine's IP address or FQDN
          charset     utf-8;
      
          # max upload size
          client_max_body_size 75M;   # adjust to taste
      
          # Django media
          location /media  {
              alias /root/django/test_nginx_uwsgi/media;  # 加载你的meida,
          }
          location /static {
              alias /root/django/test_nginx_uwsgi/static_root; # 加载你的静态文件
          }
          # Finally, send all non-media requests to the Django server.
          location / {
              uwsgi_pass  django_test;
              include     /etc/nginx/uwsgi_params; #官方说要把文件cp到项目目录,感觉没必要
          }
      }
    4. 重启 nginx (不知道是我这机器有毛病还是····,光restart不行) 
    [root@lzy test_nginx_uwsgi]# /etc/init.d/nginx restart
    stopping nginx.... Done.
    starting nginx..
    [root@lzy test_nginx_uwsgi]# nginx -c /etc/nginx/nginx.conf
    [root@lzy test_nginx_uwsgi]# nginx -s reload
    [root@lzy test_nginx_uwsgi]# lsof -i :8090
    COMMAND  PID USER   FD   TYPE   DEVICE SIZE/OFF NODE NAME
    nginx   1354 root    9u  IPv4 87392561      0t0  TCP *:8090 (LISTEN)
    nginx   1383 root    9u  IPv4 87392561      0t0  TCP *:8090 (LISTEN)
    nginx   1384 root    9u  IPv4 87392561      0t0  TCP *:8090 (LISTEN)
    nginx   1386 root    9u  IPv4 87392561      0t0  TCP *:8090 (LISTEN)
    nginx   1387 root    9u  IPv4 87392561      0t0  TCP *:8090 (LISTEN)
    nginx   1388 root    9u  IPv4 87392561      0t0  TCP *:8090 (LISTEN)
    nginx   1390 root    9u  IPv4 87392561      0t0  TCP *:8090 (LISTEN)
    nginx   1391 root    9u  IPv4 87392561      0t0  TCP *:8090 (LISTEN)
    nginx   1392 root    9u  IPv4 87392561      0t0  TCP *:8090 (LISTEN)
    nginx   1393 root    9u  IPv4 87392561      0t0  TCP *:8090 (LISTEN)
    nginx   1398 root    9u  IPv4 87392561      0t0  TCP *:8090 (LISTEN)
    nginx   1399 root    9u  IPv4 87392561      0t0  TCP *:8090 (LISTEN)
    nginx   1400 root    9u  IPv4 87392561      0t0  TCP *:8090 (LISTEN)
    nginx   1401 root    9u  IPv4 87392561      0t0  TCP *:8090 (LISTEN)
    nginx   1402 root    9u  IPv4 87392561      0t0  TCP *:8090 (LISTEN)
    nginx   1403 root    9u  IPv4 87392561      0t0  TCP *:8090 (LISTEN)
    nginx   1404 root    9u  IPv4 87392561      0t0  TCP *:8090 (LISTEN)
    #可以看到8090端口已经在运行 nginx 了,说明配置文件有效果了

    6.接下来官网Balala了一堆,我这种fish压根不懂,我也没按他的做,跳过这一步··

    7.配置test_nginx_uwsgi_uwsgi.ini 启动配置文件

      ps:参考了http://www.runoob.com/django/django-nginx-uwsgi.html

      创建test_nginx_uwsgi_uwsgi.ini  就在项目根目录

    #test_nginx_uwsgi.ini file
    [uwsgi]
    
    # Django-related settings
    
    socket = :9111
    # the base directory (full path)
    chdir = /root/django/test_nginx_uwsgi
    
    # Django s wsgi file
    module = test_nginx_uwsgi.wsgi
    
    # process-related settings
    # master
    master = true
    
    # maximum number of worker processes
    processes = 4
    
    # ... with appropriate permissions - may be needed
    chmod-socket = 664
    # clear environment on exit
    vacuum = true

    8.配置完成,就剩下启动了

     启动就很简单呢

    #首先启动uwsgi 指定配置文件ini
    $uwsgi --ini test_nginx_uwsgi.ini #也可以 nohup uwsgi --ini test_nginx_uwsgi.ini & 后台执行,无输出
    #其次重启Nginx,参照上面重启步骤
    
    #浏览器打开 192.168.8.199:8090/admin

     

    大功告成~现在就是通过nginx端口打开的django,如果nginx Listen 80,那么浏览器不用输端口也行呢

    #error: /var/log/nginx/nginx.log提示 13 Pemmer deied【权限问题】,修改/etc/nginx/nginx.conf,user nginx -> user root

  • 相关阅读:
    JavaScript 技巧
    网页打开客户端本机程序,未安装则提示要求安装
    IIS(World Wide Web Publishing Service)127 无法响应的解决方法
    Jquery hover事件 示例
    JavaScript MVC
    jquery调用基于.NET Framework 3.5的WebService返回JSON数据
    文件下载类
    网页打印局部示例
    未能执行URL(FCK)
    网页中各种宽高
  • 原文地址:https://www.cnblogs.com/simplezy/p/6705340.html
Copyright © 2020-2023  润新知