在部署前,先确定Django项目中的代码编写无误,确定通过了所有的功能测试后,在准备开始!

  1. 修改settings.py中的DEBUG为False
DEBUG = False
  1. 修改settings.py中的STATIC_ROOT,为静态文件的收集指定目录,STATIC_URL不用更改,默认为"/static/"即可
# 该静态目录与Django app同级
STATIC_ROOT = os.path.join(BASE_DIR, 'static_files')
  1. 收集静态文件,这里收集的静态文件就会存放到STATIC_ROOT指定的目录中了
python manage.py collectstatic
  1. 收集Django项目中所使用到的库,收集到的requirements.txt存放地与app目录同级
pip freeze > requirements.txt
  1. 将Django项目转移到服务器上
scp -r 项目目录 服务器目标地址
  1. 为Django项目新建虚拟环境,让服务器上面的项目互不干扰
virtualenv [虚拟环境名称]

# 如果不想使用系统的包,加上 --no-site-packeages参数
virtualenv --no-site-packeages 创建路径名
  1. 激活进入虚拟环境
cd [虚拟环境名称]
source ./bin/activate
  1. 进入虚拟环境之后,就可以为Django项目安装运行所需的库了,只有进入虚拟环境安装的库,才是安装在虚拟环境中的
pip install -r requirements.txt
  1. 新建配置nginx文件nginx_demo.conf,重点配置:(listen,access_log,error_log,location/static,uwsgi_pass
    listen监听端口号不要与uwsgi_pass端口号相同,若是没有log文件,可以先去新建一个,避免后面启动nginx时报错
user  xxx;  #账户名
worker_processes  2;
#pid        logs/nginx.pid;
events {
    worker_connections  1024;
}

http {
    include       /usr/local/nginx/conf/mime.types;
    default_type  application/octet-stream;
    sendfile        on;
    #tcp_nopush     on;
    #keepalive_timeout  0;
    keepalive_timeout  65;
    #gzip  on;
    server {
    	listen 10011;  # 配置nginx监听端口
    	server_name localhost;
    	charset     utf-8;
    	# access_log 与error_log日志输出地点
    	access_log      /home/xxx/www/Django_demo/log/nginx_access.log;
    	error_log       /home/xxx/www/Django_demo/log/nginx_error.log;
    	
        large_client_header_buffers 4 16k;     # 读取大型客户端请求头的缓冲区的最大数量和大小
        client_max_body_size 10000m;             #设置nginx能处理的最大请求主体大小。
        client_body_buffer_size 128k;          #请求主体的缓冲区大小。
        proxy_connect_timeout 600;
        proxy_read_timeout 600;
        proxy_send_timeout 600;
        proxy_buffer_size 64k;
        proxy_buffers   4 32k;
        proxy_busy_buffers_size 64k;
        proxy_temp_file_write_size 64k;

		# 指定静态文件目录,让nginx访问
    	location /static {
        	alias /home/xxx/www/Django_demo/static_files;
    	}

    	location / {
                uwsgi_send_timeout 600;        # 指定向uWSGI传送请求的超时时间,完成握手后向uWSGI传送请求的超时时间。
                uwsgi_connect_timeout 600;
                uwsgi_read_timeout 600;
        	include     /usr/local/nginx/conf/uwsgi_params;
        	# uwsgi 端口
        	uwsgi_pass  127.0.0.1:10010;
    	}
    }
}
  1. 新建配置uwsgi文件uwsgi_demo.ini,socket与nginx中的uwsgi_pass相同,
[uwsgi]

socket = 127.0.0.1:10010
chdir = /home/xxx/www/Django_demo
module = Django_demo.wsgi
master = true         
processes = 10
threads = 2
max-requests = 2000
chmod-socket = 664
pidfile= /home/xxx/www/Django_demo/demo.pid
vacuum = true
py-autoreload = 1
daemonize = /home/xxx/www/Django_demo/log/uwsgi.log
  1. 进入root账户,这样才可以启动nginx与uwsgi,进入命令是:su,然后输入密码就可以了
  2. 配置运行nginx
nginx -c 'nginx配置文件绝对路径' 后缀名为conf
nginx -c /home/xxx/www/Django_demo/nginx_demo.conf
  1. 运行uwsgi,这里可能出现uwsgi没有这个命令,有一个可能是因为没有进入虚拟环境,还有一个可能是因为没有安装uwsgi服务,需要执行pip install uwsgi
uwsgi --ini 'uwsgi配置文件绝对路径' 后缀名为ini
uwsgi --ini /home/xxx/www/Django_demo/uwsgi_demo.ini
或者:uwsgi -i /home/xxx/www/Django_demo/uwsgi_demo.ini

当出现下面这个信息时,就可以访问看下效果了

[uWSGI] getting INI configuration from /home/xxx/www/Django_demo/uwsgi_demo.ini

启动失败可能是因为端口被占用,可以换一个端口或者解除占用端口来解决,解除端口占用方法如下:

  • 查看端口号 lsof -i :端口号
  • 解除占用 kill -9 pid号

如果不了解端口号是否正在被运行的项目使用,推荐换一个端口的方法,不然正在跑的项目就会被关停了