Django+MySQL+uwsgi+Nginx部署

配置环境:

System:CentOS6.8 64位
Database Server version: 5.7.73 
Nginx version1.10.2
Python version:python 3.4.1
Django version1.11.2

Nginx

Nginx 是一个高性能的 Web 和反向代理服务器, 它具有有很多非常优越的特性:

当它作为 Web 服务器,相比 Apache来说,Nginx 使用更少的资源,支持更多的并发连接,体现更高的效率,能够支持高达 50,000 个并发连接数的响应。

当它作为负载均衡服务器,Nginx 既可以在内部直接支持 Rails 和 PHP,也可以支持作为 HTTP代理服务器 对外进行服务。Nginx 用 C 编写, 不论是系统资源开销还是 CPU 使用效率都比 Perlbal 要好的多。

当它作为邮件代理服务器, Nginx 同时也是一个非常优秀的邮件代理服务器(最早开发这个产品的目的之一也是作为邮件代理服务器)。

Nginx 安装非常的简单,配置文件 非常简洁(还能够支持perl语法),Bugs非常少的服务器。 Nginx 启动特别容易,并且几乎可以做到7*24不间断运行,即使运行数个月也不需要重新启动。

安装

使用源码编译安装,编译环境gcc g++ 开发库之类的需要提前装好,这里默认你已经装好。一般我们都需要先装pcre和 zlib,pcre为了重写rewrite,zlib为了gzip压缩。如果没有ssl的话应该先装上。

cd /usr/local/src
wget http://nginx.org/download/nginx-1.4.2.tar.gz
tar -zxvf nginx-1.4.2.tar.gz
cd nginx-1.4.2

./configure --sbin-path=/usr/local/nginx/nginx \
--conf-path=/usr/local/nginx/nginx.conf \
--pid-path=/usr/local/nginx/nginx.pid \
--with-http_ssl_module \
--with-pcre=/opt/app/openet/oetal1/chenhe/pcre-8.37 \
--with-zlib=/opt/app/openet/oetal1/chenhe/zlib-1.2.8 \
--with-openssl=/opt/app/openet/oetal1/chenhe/openssl-1.0.1t

make
make install

--with-pcre=/usr/src/pcre-8.34 指的是pcre-8.34 的源码路径。
--with-zlib=/usr/src/zlib-1.2.7 指的是zlib-1.2.7 的源码路径。

确保系统的 80 端口没被其他程序占用,运行/usr/local/nginx/nginx 命令来启动 Nginx,然后打开浏览器访问此机器的 IP,如果浏览器出现 Welcome to nginx! 则表示 Nginx 已经安装并运行成功。

Nginx基本配置文件为nginx.conf文件,当然,也可以使用include包含其余的.conf文件。可以根据不同的需求添加配置,只需要在include写好配置文件的路径。

几个常用的Nginx命令:

  • service nginx start –>启动服务器
  • service nginx stop –>关闭服务器
  • nginx -s reload –>服务器重启
  • nginx -t –>服务器配置文件语法检查

安装使用参考网站:http://www.nginx.cn/doc/index.html


uwsgi

uWSGI,既不用wsgi协议也不用fcgi协议,而是自创了一个uwsgi的协议,据说该协议大约是fcgi协议的10倍,性能超好,内存占用低等诸多好处,而且和Nginx配合可以解决负载均衡等问题,是一种比较经典的配置方式。

安装uwsgi

安装方式也很简单,直接使用python的经典安装方式pip
pip install uwsgi
就OK了。

测试uwsgi

安装后应该进行测试是否使用OK:
首先可以在项目根目录下创建一个test.py文件,源码如下:

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

直接使用8000端口和测试文件test.py运行uwsgi:

uwsgi --http :8000 --wsgi-file test.py

然后通过浏览器访问http://[ip]:8000可以看到测试文件的”Hello World”则uwsgi运行正常。


Django+uwsgi+Nginx配置

下面进行亲测成功的经典配置Django+uwsgi+Nginx。

Django+Nginx

使用Django内置服务器与Nginx反向代理可以测试Nginx能否正常工作。
首先,将Django项目运行起来,python manage.py runserver 0.0.0.0:8000运行起来。

然后,开始配置Nginx的相关文件:Nginx的配置文件为nginx.conf,我们可以单独设置项目文件的Nginx配置,然后将其include到原文件中。

比如,我们的nginx.conf/etc/nginx路径下,我们可以在这个目录下创建一个conf.d目录,然后再/etc/nginx/conf.f下创建default.conf文件,然后再***.conf文件中配置Nginx对这个项目的代理。

blogproject.conf文件如下:

#
# The default server
#

#server {
#    listen       80 default_server;
#    listen       [::]:80 default_server;
#    server_name  _;
#    root         /usr/share/nginx/html;
#
#    # Load configuration files for the default server block.
#    include /etc/nginx/default.d/*.conf;
#
#    location / {
#    }
#
#    error_page 404 /404.html;
#        location = /40x.html {
#    }
#
#    error_page 500 502 503 504 /50x.html;
#        location = /50x.html {
#    }
#
#}

#配置开始
server{
    listen 80;
    server_name 106.14.215.47;
    rewrite ^/$ /blog/index/ break;
    location / {
        proxy_pass http://[ip地址]:8000;  
    }
}
#配置结束

然后重启服务器,nginx -s reload(确保内置服务器在运行中)然后就可以通过默认的80端口访问项目了。http://[ip]

Django+uswgi

首先,将用uwsgi服务器运行Django项目,这里我们使用之前创建的项目blogproject来进行测试。当然Django项目本身需要可以正常使用,也就是使用python manage.py runserver 0.0.0.0:8000可以正常访问。然后更改配置使用uwsgi做服务器:

  1. 更改wsgi.py文件

    import os
    
    from django.core.wsgi import get_wsgi_application
    
    #from django.core.handlers.wsgi import WSGIHandler
    
    
    os.environ.setdefault("DJANGO_SETTINGS_MODULE", "blogproject.settings")
    
    application = get_wsgi_application()
    
    
    #application = WSGIHandler() #注释掉的是原自动生成的manage.py的配置
    
  2. 启动uwsgi服务器
    在项目根目录下运行uwsgi --http :8000 --module blogproject.wsgi
  3. 打开浏览器,输入http://[ip]:8000+[django的内部urls]测试项目是否可访问。
Django+uswgi+Nginx

将以上两个服务器与Django配置连接。
保证nginx.conf同级目录下有uwsgi_params文件这是连接Nginx和uwsgi的关键。

首先,用uwsgi与django项目启动起来,配置与上文一样,不过只有最后不是直接用HTTP访问,而是和Nginx建立socket连接。也就是Django+uwsgi第二步改成运行uwsgi --socket :8000 --module blogproject.wsgi。然后通过8000端口和Nginx连接,下面配置Nginx:

在这里直接更改上文创建的blogproject.conf为:

upstream django{
    server [ip]:8000;#与uwsgi的连接端口
}

server{
    listen 80;#外部客户端默认接入端口
    server_name [ip];
    charset utf-8;
    rewrite ^/$ /blog/index/ break;#默认输入域名或ip(默认的80端口)时跳转的网址

    client_max_body_size 75M;

    #Django media
    location /media{
        alias /usr/local/www/blogproject/blog/media;
    }

    #Django static
    location /static{
        alias /usr/local/www/blogproject/blog/static;
    }

    #Django server
    location / {
        uwsgi_pass django;
        include /etc/nginx/uwsgi_params; 
    }
}

然后重启Nginx服务器,(注意uwsgi服务器需要一直在运行状态)就可以通过http://[ip]或者域名访问编写的Django网站了。

配置完成。

Django+MySQL配置

Django默认的数据库为SQLite,如果需要更改自己的数据库时,需要自己重新配置。下面以MySQL为例:

首先,Django无法创建数据库,需要通过命令行或其他MySQL的软件创建一个需要的数据库,不需要创建table,Django可以创建。

  1. 创建数据库
    mysql>CREATE DATABASE blogproject;
  2. 更改settings.py中关于数据库的设置
    找到DATABASS设置,更改为:
DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.mysql',
        'NAME': 'blogproject',#创建的数据库名
        'USER':'root',#数据库用户名
        'PASSWORD':'*******'#数据库密码

    }
}

然后执行python manage.py makemigrationspython manage.py migrate进行数据库迁移,就可以使用MySQL数据库进行数据库存取使用了。

ps:当使用数据库时,遇到问题:Can't connect to local MySQL server through socket '/var/lib/mysql/mysql.sock' (2)可能是数据库未启动使用初始启动命令service mysqld start

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值