Django项目(五、项目的部署)
一般我们的Django项目都是部署在Linux系统上的, 接下来我们来演示具体的部署步骤。
nginx的安装
nginx的作用主要是端口转发(负载均衡), 静态文件代理, 配置用户访问等等。
首先, 安装nginx服务器,安装前简易先执行sudo apt-get update命令更新软件源后再安装:
(ubuntu)sudo apt-get install nginx
安装完成后, 执行以下命令查看任务是否启动:
(ubuntu)ps aux|grep nginx
此时可以在命令行运行curl 127.0.0.1命令,系统返回下面的信息表示运行成功:
也可以直接打开浏览器填写IP看到如下页面:
表示nginx系统已成功安装并启动了。
安装uwsgi
(ubuntu)pip3 install uwsgi
测试
假设django的wsgi文件路径在projectname/projectname/wsgi.py,
则命令行进入根目录后,执行以下命令:
(ubuntu)uwsgi --http :8000 --module XXX.wsgi(xxx为你的项目名称)
出现以下页面则表示UWSGI
然后打开浏览器,输入当前IP:8000能正常打开页面,静态资源的加载问题先忽略。
nginx系统配置
在项目根目录下新建conf目录, 之后新建一个文件conf/nginx/uc_nginx.conf,输入以下配置内容:
##conf/nginx/uc_nginx.conf
# 端口转发, 将请求转发到这个端口
upstream django {
# server unix:///path/to/your/mysite/mysite.sock; # for a file socket
server 127.0.0.1:8000; # for a web port socket (we'll use this first)
}
# configuration of the server
server {
# the port your site will be served on
listen 80;
# the domain name it will serve for
server_name 你的ip地址 ; # substitute your machine's IP address or FQDN
charset utf-8;
# max upload size
client_max_body_size 75M; # adjust to taste
# Django media
location /media {
alias 你的目录路径/media; # 指向django的media目录
}
location /static {
alias 你的目录路径/static; # 指向django的static目录
}
# Finally, send all non-media requests to the Django server.
location / {
uwsgi_pass django;
include uwsgi_params; # the uwsgi_params file you installed
}
}
填好后保存退出,然后把这个文件软连接到nginx的配置文件里去:
sudo ln -s 你的目录路径/conf/nginx/uc_nginx.conf /etc/nginx/conf.d/
重启系统
sudo service nginx restart
如果没有报错,运行以下命令:
ps aux|grep nginx
看到以下画面,证明nginx启动正常了:
集中静态资源
上面我们将, 上线后nginx将开始管理所有的Django项目的静态文件, 但是nginx只会在上述配置的路径中找静态文件, 所以如果Django的静态文件分散在多个目录中时, 就需要集中到一个目录下, 这个目录就是配置文件settings.py中的STATIC_ROOT:
#settings.py
...
STATIC_ROOT = os.path.join(BASE_DIR, "static/")
注意:如果settings.py文件中配置过STATICFILES_DIRS的话一定要注释掉,这两行代码共存会报错。
一般在调试部署阶段用runserver时, 保留STATICFILES_DIRS, 在上线阶段保留STATIC_ROOT, 静态文件才能正常展示。
然后在项目的根目录下运行以下命令就会将所有静态文件都集中到STATIC_ROOT中:
python3 manage.py collectstatic
配置UWSGI
在项目根目录下,新建一个uwsgi.ini文件:
vim conf/uwsgi.ini
然后将以下内容粘贴进文件:
# conf/uwsgi.ini
[uwsgi]
# Django-related settings
# 项目文件路径
chdir = /blogs
# Django's wsgi file
module = blogs.wsgi
# the virtualenv (full path)
# process-related settings
# master
master = true
# maximum number of worker processes
processes = 10
# the socket (use the full path to be safe
socket = 127.0.0.1:8000
# ... with appropriate permissions - may be needed
# chmod-socket = 664
# clear environment on exit
vacuum = true
#虚拟环境路径, 如果没有虚拟环境这行可以注释掉
virtualenv = /home/bobby/.virtualenvs/mxonline
保存退出后,在conf目录下运行以下命令,启动这个配置文件即可:
uwsgi -i uwsgi.ini
nginx在访问某些文件时可能没有权限, 这时我们可以配置nginx的用户:
#/etc/nginx/nginx.conf
将第一行user www-data;改为user root;
另外, 启动nginx时直接使用:
nginx