您的位置:首页 > 运维架构 > Nginx

Django学习笔记五:通过nginx+uwsgi部署Django项目(暂时静态文件没有部署上去)

2017-07-30 00:34 1021 查看

概念

Nginx:是一款面向性能设计的HTTP服务器,相较于Apache、lighttpd具有占有内存少,稳定性高等优势

uwsgi::是一个Web服务器,它实现了WSGI协议、uwsgi、http等协议。Nginx中HttpUwsgiModule的作用是与uWSGI服务器进行交换。

运行过程:

nginx作为服务器的最前端,它将接受WEB的所有请求,统一管理请求。nginx把所有静态请求自己来处理(这是nginx的强项,静态文件像我们django博客项目中的static文件夹下面的图片,css,js)。然后nginx将所有的非静态请求(像显示文章的详细信息,通常这类信息都保存在数据库,因此需要调用数据库获取数据)通过uwsgi传递给Django,由django来处理,从而完成一次WEB请求。uwsgi的作用就类似一个桥接器,起到桥梁的作用。

部署环境

阿里云服务器ubuntu14.04 (域名买了还没备案,所以博客暂时是通过ip访问的)

python3.5.2
nginx 1.4.6
uwsgi 2.0.15
django 1.11.3
markdown 1.0.1


安装nginx

打开putty远程控制云服务器输入账号和密码:

sudo apt-get install update 更新ubuntu库资源
sudo apt-get install nginx  安装nginx:
service nginx restart  启动nginx(重启)这个命令在后面要常用到


访问:http://59.110.155.51(这是我的云服务器的ip)



出现上图,则说明nginx启动成功

安装uwsgi

sudo apt-get install python3-pip
pip3 install uwsgi


测试uwsgi,创建test.py文件(注意:linux创建目录的命令是:mkdir,创建test.py用 “vi test.py”命令)

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


函数名字application,这是默认的函数,uwsgi的python加载器将会搜索这个名字

把它部署到htto端口8000(现在运行uwsgi来启动一个会把请求传递给你的wsgi应用的http服务器):

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




出现上图,则说明测试成功:

从github上获取django项目

sudo apt-get install git 安装git
git clone https://github.com/xuna123/Django_study1.git


安装django和markdwon

pip3 install django
pip3 install markdown


将nginx+uwsgi部署到django博客项目

我们实现的目录:



在我们从git拉下来Django_study1项目的时候,在子目录下回自动帮我们生成wsgi.py文件,所以我们只需要创建

myweb_uwsgi.ini配置文件。

vim myweb_uwsgi.ini


文件内容:

# Django-related settings

socket = :8000

# the base directory (full path)
chdir           = /root/Django_study1

# Django s wsgi file
module          = easyblog.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


文件意思:

socket :指定项目执行的端口号

chadir :指定项目的目录

module :可以这么来理解,对于- myweb_uwsgi.ini文件来说,与它的平级的有一个easyblog目录,这个目录下有一个wsgi.py文件

master :允许主线程存在(true)

processes:开启的进程数量(这里是开启4个进程)

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

配置nginx:

接下来要做的就是修改nginx的配置文件,打开/etc/nginx/sites-available/default文件,删除所有内容,写入下面内容:

server {
listen         8099;
server_name    59.110.155.51
charset UTF-8;
access_log      /var/log/nginx/myweb_access.log;
error_log       /var/log/nginx/myweb_error.log;

client_max_body_size 75M;

location / {
include uwsgi_params;
uwsgi_pass 59.110.155.51:8000;
uwsgi_read_timeout 2;
}
location /static {
expires 30d;
autoindex on;
add_header Cache-Control private;
alias /Django_study1/blog/static;
}
}


listen 指定的是nginx代理uwsgi对外的端口号(这个要自己阿里云服务器的安全组中添加)

server_name : 服务器的名字,(因为暂时没有域名,就写的ip地址)

access_log :用来指定日志文件的存放路径

error_log :用来指定错误日志文件的存放路径

include uwsgi_params “一般来说,你只需包含uwsgi_params文件 (包含在nginx发行版本中),使用uwsgi_pass指令来设置uWSGI socket的地址。

uwsgi_pass 设置uwsgi服务器的协议和地址,协议可是uwsgi或suwsgi(uwsgi over ssl); 地址可以是ip地址,域名,和可选的端口。

uwsgi_read_timeout:指令的含义是如果视图函数处理的时间超时,uwsgi便会关闭连接,这个关闭只是针对Nginx这边的关闭,视图函数还会继续执行,处理完成后,视图函数那边会报IO写入。

expires 30d:意味着静态和媒体文件夹中的所有内容将在30天内由浏览器缓存,但不会删除任何内容,您将无需

重新生成服务器中的任何内容

autoindex on;启用目录流量, 默认为off,显示的文件时间为GMT时间。改为on后,显示的文件时间为文件的服务

器时间

add_header Cache-Control private: HTTP协议的Cache -Control指定请求和响应遵循的缓存机制。private(默认): 只能在浏览器中缓存, 只有在第一次请求的时候才访问服务器, 若有max-age, 则缓存期间不访问

服务器.

alias /Django_study1/blog/static; 静态文件的位置(暂时这么理解)

接下里还有 一部修改settings.py里面的8ALLOWED_HOSTS增加我们访问的ip,如下:

# SECURITY WARNING: don't run with debug turned on in production!
DEBUG = True

ALLOWED_HOSTS = ['localhost','59.110.155.51']


现在我们重启nginx 和uwsgi:

service nginx restart
uwsgi --ini myweb_uwsgi.ini




参考资料:

http://zmrenwu.com/post/20/#购买域名

nginx restart failed问题解决方法:http://www.linuxidc.com/Linux/2015-07/119754.htm

虫师博客:http://www.cnblogs.com/fnng/p/5268633.html

http://uwsgi-docs-cn.readthedocs.io/zh_CN/latest/WSGIquickstart.html
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: