云服务器下django的uwsgi + nginx部署
django的uwsgi部署方式该怎么操作,如何让uwsi在后台启动
uwsgi安装
默认uwsgi安装后会启动
pip install uwsgi
# 重启uWSGI服务器
$ sudo service uwsgi restart
# 查看所有uWSGI进程
$ ps aux | grep uwsgi
# 停止所有uWSGI进程
$ sudo pkill -f uwsgi -9
uwsgi服务测试
我们以在云服务中操作为例,测试uwsi作为web服务器运行python项目。
步骤1: 确定服务端口,例如8000,将端口加入服务器的安全组。否则后面将无法访问。
步骤2:在/root/www目录下创建test.py文件,文件中的测试项目内容如下:
# 大家就按下面的写法就好
def application(env, start_response):
start_response('200 OK', [('Content-Type','text/html')])
return [b"Hello World"]
步骤3:执行如下命令运行
uwsgi --http :8080 --wsgi-file test.py
或
uwsgi --http :8080 --wsgi-file /root/www/test.py
步骤4: 在浏览器中输入地址访问:ip:8080 , 返回test.py的return结果说明uwsgi作为web服务器已正常安装可以使用。
步骤5:按住Ctrl+C即可推出uwsgi服务,此时浏览器之前的访问将不再有效。除非重新启动服务。
uwsgi启动django
步骤1:在/root/www/路径下创建一个django项目djTest
django-admin startproject djTest

步骤2:修改项目djTest的settings.py文件中的ALLOED_HOST=[]为所有ip可链接,且将默认的数据库连接ei的配置信息都注释掉。
ALLOWED_HOSTS = ["*"]
DATABASES = {
# 'default': {
# 'ENGINE': 'django.db.backends.sqlite3',
# 'NAME': os.path.join(BASE_DIR, 'db.sqlite3'),
# }
}
步骤3:运行djTest项目
注意使用python3,否则报错:
python3 manage.py runserver 0.0.0.0:8080

步骤4:在浏览器端用ip:8080访问,即可看见django的运行,说明django的运行没有问题。
注意:可能需要等带十几秒才能刷新出django页面。这也说明了django自身的web服务性能很差!无法用于生产环境。

步骤5:在项目路径/root/www/djTest下,执行如下命令即可实现通过uwsgi访问django项目。
uwsgi --http :8080 --module djTest.wsgi
步骤6: 在浏览器中输入ip:8080即可打开django页面,说明通过uwsgi访问django项目成功。访问很快,这也就是为什么生产环境要用uwsgi的原因。
以上操作最终实现了通过命令行的操作使用uwsgi访问django项目,但实际生产中我们应用的是配置文件的方式,操作如下:
步骤1: 在项目目录下创建uwsgi配置文件uwsgi.ini, 文件名也可以是其他,后缀要为ini
[uwsgi]
#项目的绝对路径,定位到项目的第一层
chdir = /root/www/djTest
#指明项目的wsgi文件路径
module = djTest.wsgi
# http-socket服务端口指定,也可以用 http = 0.0.0.0:8000
http-socket = 0.0.0.0:8000
# 是否为主进程master
master = True
#指明通过uwsgi,启动多少个进程
processes = 5
#指明通过uwsgi,启动多少个线程
threads = 1
# clear environment on exit
vacuum = true
步骤2: 通过如下命令启动, 启动后可以在浏览器中正常访问django页面。
uwsgi --ini uwsgi.ini
以上操作最终实现了通过配置文件的方式使用uwsgi访问django项目,但仍然有问题,问题在于uwsgi是前台启动不是后台启动,因为uwsgi运行的进程和日志都在控制台展示。但是生产环境一般都需要将这些文件保存下来,因此我们要实现uwsgi的后台启动并保存相关日志和进程文件。操作如下:
步骤1: 在之前的uwsgi.ini文件中增加如下配置信息
# 如下内容的配置可实现uwsgi后台启动
# # 进程文件存放位置
pidfile= %(chdir)/pid/uwsgi_8000.pid
# # 以后台守护进程运行,并将log日志存下
daemonize = %(chdir)/log/uwsgi_8000.log
# # 日志大小 1G
log-maxsize = 1024*1024*1024
步骤2: 创建文件夹pid和log保存进程信息和日志记录
[root@WulianWord djTest]# mkdir log
[root@WulianWord djTest]# mkdir pid
[root@WulianWord djTest]# pwd
/root/www/djTest
[root@WulianWord djTest]# ls
djTest log manage.py pid uwsgi.ini
步骤3: 启动uwsgi
[root@WulianWord djTest]# uwsgi --ini uwsgi.ini
# 表示后台启动成功
[uWSGI] getting INI configuration from uwsgi.ini
[root@WulianWord djTest]#
步骤4: 访问浏览器可实现。
步骤5:后台启动的状况下 如果需要查询或者关闭uwsgi则命令如下。
注:如果是前台启动 Ctrl+C即可关闭uwsgi
# 停止进程后浏览器将无法访问。
uwsgi --stop pid/uwsgi_8000.pid
Nginx+uwsgi+django
上面的一系列操作解决了使用uwsgi访问django项目的问题。但是实际生产环境中我们还需要用nginx做反向代理和负载均衡。因此下面的步骤引入nginx的反向代理。
nginx的 安装和基本使用此处不再讲。
# 关闭nginx
nginx -s stop
# 强行关闭nginx的方法
killall nginx
在nginx已经可以正常运行在服务器的前提下,进行如下步骤:
步骤1: 查找到nginx配置文件
[root@WulianWord ~]# find / -name nginx.conf
/etc/nginx/nginx.conf
步骤2: 备份原有nginx.conf文件后,重写nginx.conf中server内容为自己要代理的内容,并且增加server同级的upstream 内容。如下所示:
注意:uwsgi_pass 和proxy_pass有区别,我们下面用的proxy_pass。
# 自定义的uwsgi访问
# uwsgi可以换为别的名字,但需要和location中的uwsgi_pass一致
upstream uwsgi {
# 设置的uwsgi启动的端口
server 127.0.0.1:8000;
}
# 自定义server
server {
listen 80;
# 有域名写域名,域名和localhost之间用逗号分隔就可以了
server_name locahost;
charset utf-8;
include /etc/nginx/default.d/*.conf;
location = / {
# 和upstream保持一致
# 注意:uwsgi_pass 和proxy_pass有区别,我们先用proxy_pass。
proxy_pass http://uwsgi;
}
}
步骤3:重启ngnix, 在浏览器中访问。发现浏览器中输入ip或者ip:80可以直接显示django页面。说明nginx成功代理。当然此时也可以ip:8000使用uwsgi访问。
步骤4: 配置nginx日志。需要在nginx.conf文件中配置此代理的日志
access_log /var/log/nginx/nginx_uwsgi.log;
步骤5: 重启nginx
nginx -s reload
步骤6:检查日志是否生效,执行下面的命令,浏览器访问刷新项目页面,会有日志输出。
tail -f /var/log/nginx/nginx_uwsgi.log

上面的步骤完成后会发现静态文件加载有问题,下面 收集静态文件。使nginx直接返回静态文件。
步骤1: 在项目的settings.py文件中加入如下内容设置静态文件存放路径。
STATIC_ROOT = os.path.join(BASE_DIR,'static/')
步骤2:运行如下命令收集静态文件。
python manage.py collectstatic
步骤3: 在nginx.conf中的server中配置静态文件路由
location = /static {
# 和upstream保持一致
alias static路径/static;
}
步骤4: 重启nginx,发现静态文件可见。
更多推荐




所有评论(0)