静态文件
•当 Django 运行在生产模式时,将不再提供静态文件的支持,需要将静态文件交给静态文件服务器。
•我们需要收集这些静态文件,集中一起放到静态文件服务器中。
•先创建目录 static。
•Django 提供了收集静态文件的方法。先在配置文件中配置收集之后存放的目录。
STATIC_ROOT = os.path.join(os.path.dirname(os.path.dirname(BASE_DIR)), 'web/static')
然后执行收集命令
python manage.py collectstatic
我们使用 Nginx 服务器作为静态文件服务器。
Nginx 有两种安装方法,一种是 sudo apt-get nginx 命令安装,一种是通过下载 Nginx 源文件安装。以下方法是源文件安装。
#下载:
wget http://nginx.org/download/nginx-1.11.3.tar.gz
#解压:
tar -zxvf nginx-1.11.3.tar.gz
#进入解压目录:
cd nginx-1.11.3
#配置:
./configure --prefix=/usr/local/nginx
注意:这里可能会报错,提示“pcre.h No such file or directory”,具体详见: http://stackoverflow.com/questions/22555561/error-building-fatal-error-pcre-h-no-such-file-or-directory
需要安装 libpcre3-dev,命令为:
sudo apt-get install libpcre3-dev
#安装 nginx:
sudo make install
#启动 nginx:
sudo /usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf
注意:-c 指定配置文件的路径,不加的话,nginx 会自动加载默认路径的配置文件,可以通过 -h 查看帮助命令。
#查看 nginx 进程:
ps -ef|grep nginx
•打开 Nginx 的配置文件
sudo subl /usr/local/nginx/conf/nginx.conf
•在 server 部分中配置
server {
listen 80;
server_name www.xxx.xxx;
location / {
root /home/python/Desktop/web;
index index.html index.htm;
}
#余下省略
}
•重启 Nginx 服务器
sudo /usr/local/nginx/sbin/nginx -s reload
参考命令:
首次启动 nginx 服务器
sudo /usr/local/nginx/sbin/nginx
停止 nginx 服务器
sudo /usr/local/nginx/sbin/nginx -s stop
暴力停止 nginx 服务器
sudo pkill -9 nginx
uwsgi
django 的程序通常使用 uwsgi 服务器来运行
•安装 uwsgi
pip install uwsgi
•在项目目录/meiduo_mall 下创建 uwsgi 配置文件 uwsgi.ini
[uwsgi]
#使用 nginx 连接时使用,Django 程序所在服务器地址 socket=127.0.0.1:8001
#直接做 web 服务器使用,Django 程序所在服务器地址http=127.0.0.1:8001
#项目目录
chdir=/Users/Desktop/test
#项目中 wsgi.py 文件的目录,相对于项目目录
wsgi-file=test/wsgi.py
#进程数
processes=4
#线程数
threads=2
#uwsgi 服务器的角色
master=True
#存放进程编号的文件
pidfile=uwsgi.pid
#日志文件,因为 uwsgi 可以脱离终端在后台运行,日志看不见。
daemonize=uwsgi.log
#指定依赖的虚拟环境
virtualenv=/Users/.virtualenv/test
•启动 uwsgi 服务器
uwsgi --ini uwsgi.ini
注意如果想要停止服务器,除了可以使用 kill 命令之外,还可以通过
uwsgi --stop uwsgi.pid
通过命令查看开启状态:
ps aux|grey uwsgi
•修改 Nginx 配置文件,让 Nginx 接收到请求后转发给 uwsgi 服务器
sudo subl /usr/local/nginx/conf/nginx.conf
•调整结果如下
upstream test {
#如果 Nignx 和 uwsgi 均部署在虚拟机的 ubuntu 中,端口号不能为 8000,否则会 Nignx 服务器监听端口 8000 冲突。
server 127.0.0.1:8001; # 此处为 uwsgi 运行的 ip 地址和端口号
#如果有多台服务器,可以在此处继续添加服务器地址
}
server {
listen 8000;
server_name api.xxx.xxx;
location / {
include uwsgi_params;
uwsgi_pass test;
}
}
server {
listen 80;
server_name www.xxx.xxx;
#charset koi8-r;
#access_log logs/host.access.log main;
location / {
root /User/Desktop/web;
index index.html index.htm;
}
#error_page 500 502 503 504 /50x.html;
#location = /50x.html {
#root html;
#}
}
•重启 nginx
sudo /usr/local/nginx/sbin/nginx -s reload
多台服务器配置
•修改 Nginx 配置文件
sudo subl /usr/local/nginx/conf/nginx.conf
•调整结果如下
upstream test{
server 127.0.0.1:8001; # 此处为 uwsgi 运行的 ip 地址和端口号
#如果有多台服务器,可以在此处继续添加服务器地址
server 127.0.0.1:8002;
}
•重启 nginx
sudo /usr/local/nginx/sbin/nginx -s reload
问题处理:
Nginx 服务器无法启动
uwsgi 服务器无法启动
问题原因:uwsgi.ini 中的端口号和 Nginx 服务器端口号冲突,比如都是 8000;处理方法:
(1)调整 uwsgi.ini 中的端口号,不要和 Nginx 服务器冲突
socket=127.0.0.1:8001
(2)调整 Nginx 配置文件的端口号
upstream test {
server 127.0.0.1:8001; # 此处为 uwsgi 运行的 ip 地址和端口号
#如果有多台服务器,可以在此处继续添加服务器地址
}
(3)关闭相关服务
sudo pkill -9 uwsgi
sudo pkill -9 nginx
(4)启动相关服务
开启 uwsgi:
uwsgi --ini uwsgi.ini
开启 Nginx:
sudo /usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf