腾讯云Ubuntu 16.04 配置Django+Uwsgi+Nginx

本文服务器为腾讯云 Ubuntu 16.04 64位

服务器环境:Python2.7 Django==1.8.4 或 1.9.2 virtualenv,Virtualenv安装教程

1.安装nginx

sudo apt-get install nginx

我在安装的时候提示没有权限写入文件,所以是在su 转为root超级用户的情况下进行安装的

安装后文件存放在/usr/sbin/nginx

配置文件在 /etc/nginx/nginx.conf

nginx常用命令(在root用户下)

启动nginx

/usr/sbin/nginx
关闭nginx

/usr/sbin/nginx -s stop

在安装nginx的时候可能还需要一些依赖包

安装openssl

sudo apt-get install openssl libssl-dev  
安装pcre

sudo apt-get install libpcre3 libpcre3-dev 
安装zlib

sudo apt-get install zlib1g-dev  

2. 安装uwsgi,在virtualenv环境下安装,也可以不使用virtualenv

workon 环境名
pip install uwsgi

uwsgi的常用命令:

启动uwsgi

uwsgi --ini 文件名.ini
关闭uwsgi

uwsgi --stop 文件名.pid

安装完之后可以在项目根目录下新建一个测试文件对uwsgi进行测试

文件名为test.py

def application(env, start_response):
        start_response('200 OK',[('Content-Type', 'text/html')])
        #return ['Hello world'] # Python2
        return [b'Hello world'] # Python3
通过命令采用http方式来进行测试

uwsgi --http 0.0.0.0:8000 --wsgi-file test.py
然后打开浏览器输入你的ip地址:8000就能看到Hello world
如果出现端口占用的情况可以用命令

ps -ajx|grep 端口号
查看当前的占用情况,然后再用

kill -9 pid号
关闭占用的进程

3.在django项目文件下新建uwsgi.ini(名字可以任意起,后缀是固定的)

关于django项目的创建,大家都到环境部署了,应该都会了,这里就不赘述

django的static文件的配置:

在settings.py中添加

STATIC_ROOT = '/var/www/项目名/static/'  ‘’内的地址为服务器存放static的地址,还必须有读写权限,没有的话就给个chmod 777 文件夹名

然后再运行下静态文件收集 python manage.py collectstatic

进行uwsgi.ini的配置

[uwsgi]
socket=0.0.0.0:8000  #0.0.0.0这个网上的文章都说要填自己的ip, 但实际上我是填了0.0.0.0才能访问,8000这个端口号就自己设置,通过nginx配置的话一定要socket
#http=0.0.0.0:8008   #如果不通过nginx代理的话就注释socket,把http写上
chdir=/home/ubuntu/项目名 #这个填写django项目所在的文件夹
wsgi-file=项目名/wsgi.py  #django项目文件中wsgi.py的位置
processes=1 #进程数,根据自己服务器的配置进行设置
threads=1   #线程数,根据自己服务器的配置进行设置
master=True
pidfile=uwsgi.pid   #uwsgi.pid 记录uwsgi的pid,在关闭uwsgi的时候需要用到
daemonize=uwsgi.log #uwsgi的日志存放地址,可以自己选择文件地址

要进行测试配置之前,需要在django中runserver一下,确保项目是能正常运行的(接下来的调试都是在virtualenv环境下进行的,因为uwsgi是安装在virtualenv环境下的)

因为现在还没配置nginx,所以我们可以先用http进行测试,将uwsgi.ini中的socket注释掉,把http写出来,然后输入命令

uwsgi --ini uwsgi.ini

此时可以打开浏览器,输入服务器ip地址:端口号,如118.24.xx.165:8000 进行查看,如果能显示页面,那说明uwsgi配置正常

如果打不开,可查看uwsgi.log文件,查看原因,基本会出现的情况是:①端口被占用,kill占用端口的进程就可以②ip地址不能被assignment,ip地址(即socket跟http)改为0.0.0.0就可以

如果测试的时候选用的是用socket的话,页面会打不开,查看日志会显示

spawned uWSGI worker 3 (pid: 10771, cores: 1)
spawned uWSGI worker 4 (pid: 10772, cores: 1)
spawned uWSGI worker 5 (pid: 10773, cores: 1)
invalid request block size: 21573 (max 4096)...skip
invalid request block size: 21573 (max 4096)...skip

这是正常情况,因为本来需要接受nginx传送过来的socket,但是因为nginx还没配置,接受到的是http,所以就会报错


4.配置nginx

打开nginx的配置文件,地址为/etc/nginx/nginx.conf,我把我整个配置都拷出来

user www-data;
worker_processes auto;
pid /run/nginx.pid;

events {
        worker_connections 768;
        # multi_accept on;
}

http {

        ##
        # Basic Settings
        ##

        sendfile on;
        tcp_nopush on;
        tcp_nodelay on;
        keepalive_timeout 65;
        types_hash_max_size 2048;
        # server_tokens off;

        # server_names_hash_bucket_size 64;
        # server_name_in_redirect off;

        include /etc/nginx/mime.types;
        default_type application/octet-stream;

        ##
        # SSL Settings
        ##

        ssl_protocols TLSv1 TLSv1.1 TLSv1.2; # Dropping SSLv3, ref: POODLE
        ssl_prefer_server_ciphers on;

        ##
        # Logging Settings
        ##

        access_log /var/log/nginx/access.log;
        error_log /var/log/nginx/error.log;
//这段是我们要添加的
        
server {
    listen         80;                  # 监听端口,也是我们访问网站时输入的端口号,默认为80
    server_name    118.24.xx.165;	# 服务器名字,也就是我们访问网站时在地址栏输入的名字,填自己ip
    server_name    www.xxxxo.club;	# 跟上面一样,可以填写自己的域名,监听的是80端口时,server_name一定要填正确的ip跟地址,如果是监听其他端口就可以随意填

    client_max_body_size 75M;

    location / {
        include /etc/nginx/uwsgi_params; # 填写uwsgi_params的地址,这个文件用来关联uwsgi
        uwsgi_pass 0.0.0.0:8000;	 # 填写在uwsgi.ini中socket一样的地址,网上说填自己的ip,但试验过要填0.0.0.0才能正常使用
        uwsgi_read_timeout 2;		
    }

    location /static {
        alias /var/www/online21/static/; # 填写static的存放目录
    }
    location /media {
        alias /var/www/online21/media/;  # 填写media的存放目录
    }
}//
        ##
        # Gzip Settings
        ##

        gzip on;
        gzip_disable "msie6";

        # gzip_vary on;
        # gzip_proxied any;
        # gzip_comp_level 6;
        # gzip_buffers 16 8k;
        # gzip_http_version 1.1;
        # gzip_types text/plain text/css application/json application/javascript text/xml application/xml application/xml+rss text/javascript;

        ##
        # Virtual Host Configs
        ##

        include /etc/nginx/conf.d/*.conf;
        include /etc/nginx/sites-enabled/*;

}


#mail {
#       # See sample authentication script at:
#       # http://wiki.nginx.org/ImapAuthenticateWithApachePhpScript
# 
#       # auth_http localhost/auth.php;
#       # pop3_capabilities "TOP" "USER";
#       # imap_capabilities "IMAP4rev1" "UIDPLUS";
# 
#       server {
#               listen     localhost:110;
#               protocol   pop3;
#               proxy      on;
#       }
# 
#       server {
#               listen     localhost:143;
#               protocol   imap;
#               proxy      on;
#       }
#}
配置完成之后,重启nginx跟uwsgi就可以正常访问了,在浏览器中输入你的服务器ip或者域名就能访问,如果出现的是nginx的页面,那就是uwsgi没配置好,如果访问不了,就是nginx或nginx跟uwsgi都出问题了







猜你喜欢

转载自blog.csdn.net/zhaogeno1/article/details/78934905
今日推荐