django开着uwsgi撞上了nginx

回复 收藏
本帖最后由 Yuhuangs 于 2015-6-1 17:48 编辑

Django 是Python的一个Web开发框架!
uWSGI  是用来解析Django的一个服务!

1.首先我们先做一些环境搭建的准备!
#yum groupinstall  "Development Tools" -y                           //安装一些必要的组件
#yum install -y openssl   openssl-devel  wget  sqlite-devel  zlib  zlib-devel    //安装open-ssl 否则pip无法下载东西、sqlite-devel 不安 装启动不了Django
#wget https://bootstrap.pypa.io/ez_setup.py -O - | python3          //安装ez_setup.py 否则无法安装pip动不了django

2.安装顺序 Python3->pip->pip安装uwsgi-> pip安装Django
~~~~~~~~~~~~~~~~~~Python3安装

#.configure --prefix=/usr/local/python3                                     //源码安装Python3到/usr/local/python3
#ln -s /usr/local/python3/bin/python3    /usr/bin/python3      //做一个连接方便使用python命令     

~~~~~~~~~~~~~~~~~~Pip安装

#python3   setup.py   install                                        //即可安装完毕
#ln -s /usr/local/python3/bin/pip3 /usr/bin/pip          //做一个连接方便使用pip命令
如果出现错误如:
           ImportError: No module named setuptools           //代表了没有安装ez_setup.py
#wget https://bootstrap.pypa.io/ez_setup.py -O - | python3  //用此命令解决
如果以上命令错误,那就只能下载ez_setup.py的源码安装了!

~~~~~~~~~~~~~~~~~~uwsgi安装

#pip install uwsgi                //安装uwsgi
        如果出现ImportError: cannot import name 'HTTPSHandler' 错误,没安装openssl   openssl-devel,认命吧安装后重新编译python3

测试uwsgi

def application(env, start_response):
    start_response('200 OK', [('Content-Type','text/html')])
    return ["Hello World"]

#wsgi --http :8000  --wsgi-file test.py  //curl一下返回200就成功了

~~~~~~~~~~~~~~~~~~Django安装

#pip install django                //安装django
        如果出现ImportError: cannot import name 'HTTPSHandler' 错误,没安装openssl   openssl-devel,认命吧安装后重新编译python3
#ln -s /usr/local/python3/bin/django-admin   /usr/bin/django-admin     //做一个链接方便使用
#django-admin  startproject  mysite                       //创建一个django
#python3 manage.py  runserver 0.0.0.0:8000           //测试django    //如果这一步起不来 提示sqllite有问题 就安装
                yum install   sqlite-devel  //然后重新安装编译安装python3

测试django和uwsgi 结合
切换到刚刚创建的mysite工程下
#uwsgi --http :8000 --module mysite.wsgi //浏览器查看,成功就成功了。失败查错呗

~~~~~~~~~~~~~~~~~~安装nginx省略

省略过程自己安装,最好源码

~~~~~~~~~~~~~~~~~~django+nginx+uwsgi 结合

配置nginx
#vim  /usr/local/nginx/conf/nginx.conf
--------------------------------------------------nginx.conf-------------------------------------------------------
user nobody nobody; #使用那个用户和组来启动子进程,主进程必须是root,原因是1~1023端口只有root能监听
worker_processes 2; #开启几个子进程
error_log /usr/local/nginx/logs/nginx_error.log crit; #开启错误日志,crit 是错误日志级别
#debug | info | notice | warn | error | crit  最详细->最简洁
pid /usr/local/nginx/logs/nginx.pid; #进程文件
worker_rlimit_nofile 51200; #打开的文件描述符的个数
events
{
    use epoll; #事件模型 ,默认使用epoll
#参考事件模型,use [ kqueue | rtsig | epoll | /dev/poll | select | poll ]; epoll模型是Linux 2.6以上版本内核中的高性能网络I/O模型,如果跑在FreeBSD上面,就用kqueue模型。
    worker_connections 6000; #每一个worker可以支持多少链接,如果太大就不行了。6000正好
}

http
{
    include mime.types;
    default_type application/octet-stream;
    server_names_hash_bucket_size 3526;
    server_names_hash_max_size 4096;
log_format combined_realip '$remote_addr|$http_x_forwarded_for|[$time_local]|'
    '$host|"$request_uri"|$status|'
    '"$http_referer"|"$http_user_agent"'; #日志的格式, 用 '|' 分割
    sendfile on;
    tcp_nopush on;
    keepalive_timeout 30;
    client_header_timeout 3m;
    client_body_timeout 3m;
    send_timeout 3m;
    connection_pool_size 256;
    client_header_buffer_size 1k;
    large_client_header_buffers 8 4k;
    request_pool_size 4k;
    output_buffers 4 32k;
    postpone_output 1460;
    client_max_body_size 10m;
    client_body_buffer_size 256k;
    client_body_temp_path /usr/local/nginx/client_body_temp;
    proxy_temp_path /usr/local/nginx/proxy_temp;
    fastcgi_temp_path /usr/local/nginx/fastcgi_temp;
    fastcgi_intercept_errors on;
    tcp_nodelay on;
    gzip on;
    gzip_min_length 1k;
    gzip_buffers 4 8k;
    gzip_comp_level 5;
    gzip_http_version 1.1;
    gzip_types text/plain application/x-javascript text/css text/htm application/xml;
    include vhosts/*.conf;
#限制IP登录 可以直接卸载这个文件中,当然也可以单独写一个文件,我们写在文件中
}
--------------------------------------------------------------------------------------------------------------------

#mkdir /usr/local/nginx/conf/vhosts   //创建目录
#vim  /usr/local/nginx/conf/vhosts/django.conf

------------------------------------------------django.conf---------------------------------------------------
server {
            listen 80 default;
            server_name aaa.com;

            location / {
                uwsgi_pass     unix:///tmp/mysite.sock;#这个文件一定要和uwsgi配置中的sock地址一致
                include /usr/local/nginx/conf/uwsgi_params;
#这个文件我也不知道干嘛的,不过可以用find 来查找
            }
}

-----------------------------------------------------uwsgi配置---------------------------------------------------

[uwsgi]
chdir           = /data/www/mysite/
  #网站目录
module          = mysite.wsgi
            
chmod-socket = 644
                      #sock文件权限
uid     = nobody                             #sock  uid  
gid     = nobody
                             #sock  gid
master          = true
processes       = 5
                           #开启多少线程
socket          = /tmp/mysite.sock
    #sock文件所在地,重要
vacuum          = true

#uwsgi --ini  test.ini //测试并运行
2015-05-31 14:54 举报
已邀请:
0

模范棒棒糖

赞同来自:

why are you so diao?
0

Yuhuangs

赞同来自:


嘿嘿

回复帖子,请先登录注册

退出全屏模式 全屏模式 回复
评分
可选评分理由: