在部署前,先确定Django项目中的代码编写无误,确定通过了所有的功能测试后,在准备开始!
- 修改settings.py中的DEBUG为False
DEBUG = False
- 修改settings.py中的STATIC_ROOT,为静态文件的收集指定目录,STATIC_URL不用更改,默认为"/static/"即可
# 该静态目录与Django app同级
STATIC_ROOT = os.path.join(BASE_DIR, 'static_files')
- 收集静态文件,这里收集的静态文件就会存放到STATIC_ROOT指定的目录中了
python manage.py collectstatic
- 收集Django项目中所使用到的库,收集到的requirements.txt存放地与app目录同级
pip freeze > requirements.txt
- 将Django项目转移到服务器上
scp -r 项目目录 服务器目标地址
- 为Django项目新建虚拟环境,让服务器上面的项目互不干扰
virtualenv [虚拟环境名称]
# 如果不想使用系统的包,加上 --no-site-packeages参数
virtualenv --no-site-packeages 创建路径名
- 激活进入虚拟环境
cd [虚拟环境名称]
source ./bin/activate
- 进入虚拟环境之后,就可以为Django项目安装运行所需的库了,只有进入虚拟环境安装的库,才是安装在虚拟环境中的
pip install -r requirements.txt
- 新建配置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;
}
}
}
- 新建配置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
- 进入root账户,这样才可以启动nginx与uwsgi,进入命令是:su,然后输入密码就可以了
- 配置运行nginx
nginx -c 'nginx配置文件绝对路径' 后缀名为conf
nginx -c /home/xxx/www/Django_demo/nginx_demo.conf
- 运行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号
如果不了解端口号是否正在被运行的项目使用,推荐换一个端口的方法,不然正在跑的项目就会被关停了