在Django项目的开发中,Django框架集成了开发者的服务器,但是在实际生产环境中并不能作为网站的服务器。项目开发完成,需要将它放到服务器上,这个服务器有固定的ip,通过域名绑定,浏览器在访问域名时就可以通过DNS解析出对应的服务器ip地址。服务器分为私有服务器和公有服务器,私有服务器需要自己维护,购买和专业维护的成本高。公有服务器事先已经分配好了ip地址,如阿里云、腾讯云、青云等,通过销售服务器空间或者主机,远程连接公有云服务,只需要安装服务器软件,就可以将自己的项目部署到公有服务器上。
我们使用的是Nginx和uWSGI作为服务器,浏览器访问的流程: 浏览器发起请求,如果是静态文件,Nginx服务器直接读取磁盘并返回给浏览器显示;如果是动态文件,则将请求信息转发给后面的uWSGI服务器,uwSGI进行url匹配,找出视图执行返回响应。
uWSGI安装和配置
1.安装
pip install uwsgi
2.配置,在项目目录下创建uwsgi.ini文件,配置如下
[uwsgi]
#使用nginx连接时使用
socket=127.0.0.1:8080
#直接做web服务器使用
#http=127.0.0.1:8080
#项目目录
chdir=/home/python/Desktop/pytest/test6
#项目中wsgi.py文件的目录,相对于项目目录
wsgi-file=test6/wsgi.py
processes=4
threads=2
master=True
pidfile=uwsgi.pid
daemonize=uwsgi.log
3.操作命令
启动:uwsgi --ini uwsgi.ini
结束:uwsgi --stop uwsgi.pid
查看: ps aux | grep uwsgi
Nginx安装和配置
1.安装
进入软件安装的文件夹:cd /usr/local/
下载压缩包:sudo wget http://nginx.org/download/nginx-1.5.6.
解压:tar.gztar xf nginx-1.5.6.tar.gz
执行安装文件:cd nginx-1.5.6 sudo ./configure sudo make install
在usr/local 目录下多出来一个Nginx文件夹。说明:如果安装报错,可能缺少依赖文件,下载pcre-8.33.tar.gz,执行解压安装同Nginx。
错误解决:
(1)问题内容:
checking for C compiler ... found but is not working
./configure error : C compiler gcc is not found
(2)原因分析:
configure首先会编译一个小测试程序,通过测试其运行结果来判断编译器是否能正常工作,由于交叉编译器所编译出的程序是无法在编译主机上运行的,故而产生此错误。
(3)解决办法:
编辑auto/cc/name文件,将21行的“exit 1”注释掉(令测试程序不会报错)。
(1)问题内容:
执行./configure时显示:/configure: line 2407: config.log: Permission denied
(2)解决办法:
在配置时需要加sudo,否则权限不足,安装不成功。
2.配置
找到配置文件:cd nginx/conf
编辑配置文件:sudo vi nginx.conf
server{
listen 80; 监听端口号
server_name localhost; 服务器地址
location /{
include uwsgi_params; 将所有参数转移到uwsgi下
uwsgi_pass 127.0.0.1:8080; uwsgi的ip和端口,这样Nginx就可以转给uwsgi
}
location /static{
alias /var/www/dailyfresh/static/; 静态文件的位置,Nginx查找静态文件的路径
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
创建静态文件夹: sudo mkdir -vp /var/www/dailyfresh/static/
修改目录权限:sudo chomd 777 /var/www/dailyfresh/static/
在项目中注册静态文件地址:STATIC_ROOT = '/var/www/dailyfresh/static'
3.操作命令
收集静态文件命令:Python manage.py collectstatic
启动Nginx:sudo /usr/local/nginx/sbin/nginx
关闭Nginx:sudo /usr/local/nginx/sbin/nginx -s stop