django 项目部署
0x000
- 在django开发的过程中我们使用的是django自带的 ‘runserver’服务器进行开发(请允许我这么叫它)。但是在工程项目中是不会使用它的。通常我们会使用 nginx+uwsgi的架构。如下图所示:
0x001 安装nginx
- 准备工作:
- 下载nginx. https://pan.baidu.com/s/1WcCNf0oa9zdZ3bC6dAe_SA 提取码:7o8q
- 安装gcc编译器.
sudo apt-get install build-essential
-
进行安装
解压缩
tar -xzvf nginx-1.8.1.tar.gz
进入 nginx目录中
cd nginx-1.8.1/
-
执行以下命令
sudo ./configure --prefix=/usr/local/nginx/ sudo ./make sudo ./make install # 如果你安装中出现错误,不要放弃。在百度和google一定会有解决你问题的方法。有失败才有成长 # 以上就安装完成 # 配置文件目录为 /usr/local/nginx/conf/nginx.conf # 启动nginx sudo /usr/local/nginx/sbin/nginx # 停止nginx ps -aux | grep ngnix 查找出nginx pid 号。 sudo kill -9 pid
0x002 安装uwsgi
重要,在安装uwsgi的时候。电脑上一定不要安装anaconda。不然就会出现各种问题导致安装不上。如果使用环境管理器,请使用
virtualenv
.-
下面附上安装
virtualenv
的方法和卸载conda
的方法.# 在删除之前如果需要保存虚拟环境安装的包可以使用以下命令 pip freeze > packages.txt # 1. 找到anaconda文件夹 sudo rm-rd anaconda # 2. 找到环境变量文件 ~/.bashrc vim ~/.baserc # 删除最后跟anaconda环境相关的语句 # 3. 重启 /.bashrc source .bashec
sudo pip3 install virtualenv # 安装虚拟环境 sudo pip3 install virtualenvwrapper #安装虚拟环境的扩展包(可以简化一些操作) # 编辑家目录下的.bashrc文件.添加下面代码 export WORKON_HOME=$HOME/.virtualenvs source /usr/local/bin/virtualenvwrapper.sh # 常用的命令 mkvirtualenv #创建虚拟环境 # mkvirtualenv -p (Python的版本) (虚拟环境的名称) mkvirtualenv -p python3.6 django_1.8 workon 虚拟环境名 # 进入虚拟环境 workon django_1.8 deactivate # 退出虚拟环境 rmvirtualenv 虚拟环境名 # 删除虚拟环境 # 安装之前导出的Python包 pip install -r packages.txt # 参考文档:https://pythonguidecn.readthedocs.io/zh/latest/dev/virtualenvs.html
-
安装uwsgi
- 前提: 安装了
gcc编译器和Python
. -
pip install uwsgi
进行安装
- 前提: 安装了
0x003 配置uwsgi
-
在django项目部署之前。首先要吧
settings.py
文件下的:DEBUG=FALSE # 调试关闭 ALLOWED_HOSTS=[‘*’] # 允许任何ip访问
-
编写uwsgi的配置文件
[uwsgi] #使用nginx连接时使用 #socket=127.0.0.1:8080 #直接做web服务器使用 # http=127.0.0.1:8080 socket=127.0.0.1:8080 #项目目录 chdir=/home/yangaoteng/桌面/blog #项目中wsgi.py文件的目录,相对于项目目录 wsgi-file=blog/wsgi.py # 指定启动的工作进程数(当启动后会发现启动了不止四个.因为有管理的进程) processes=4 # 制定工作进程的线程数 threads=2 # 主进程,为True不占用命令台,直接输入到log日志的文件中 master=True # 保存启动后进程的pid(进程号) pidfile=uwsgi.pid # 设置uwsgi在后台,保存日志信息 daemonize=uwsgi.log # 设置虚拟环境的路径 virtualenv= /home/yangaoteng/.virtualenvs/django_1.8 # 参考文档: https://uwsgi-docs-zh.readthedocs.io/zh_CN/latest/
-
uwsgi 的启动和停止
# 启动 uwsgi --ini 配置文件的路径 # 停止 uwsgi --stop uwsgi.pid的路径
如果我们现在把
ini 文件中的 socket=127.0.0.1:8080.改为 http=127.0.0.1:8080
,打开网页就会发现网页的样式和js都没有加载出来。这是因为在我们使用uwsgi以后django就不会跟我们管理静态文件。这里我们就需要自己管理静态文件。这是nginx
就派上了用场。
0x004 配置nginx
-
首先设置 nginx 与 uwsgi进行通信
打开 nginx 的配置文件
sudo vim /use/local/nginx/conf/nginx.conf
-
修改配置文件
server { listen 80; # 监听80端口 server_name localhost; # 公网ip location / { # 包含uwsgi的请求参数 include uwsgi_params; # 转交给uwsgi ip post uwsgi_pass 127.0.0.1:8080; } # 因精力有限具体的配置说明请查看 http://www.nginx.cn/doc/
这样我们就把所有的信息转交给了uwsgi。接下来我们就要在 nginx 拦截静态文件,让他直接访问 硬盘上的静态文件目录就好.
-
设置静态文件
创建文件夹
mkdir /var/www/blog/static
-
搜集django的静态文件
# 在项目文件目录 setting.py 中添加如下设置 STATIC_ROOT= '/var/www/blog/static' # 在命令台输入以下命令收集静态文件。收集到上面的目录 python manage.py collectstatic
-
在 nginx配置文件中添加以下配置选项
location /static { alias /var/www/blog/static/; # 刚设置文件的目录 }
0x005 nginx实现转发和负载均衡
-
Nginx实现转发另外的地址 (因为我的首页在另外一台静态服务器上,我需要进行转发.)
# 进行精确匹配 location = / { proxy_pass http://192.168.1.103:80; }
-
有多台业务处理服务器进行负载均衡
upstream blog{ server 192.168.1.104:80; server 192.168.1.105:80; } location / { # 包含uwsgi的请求参数 include uwsgi_params; # 转交给uwsgi ip post # uwsgi_pass 127.0.0.1:8080; uwsgi_pass blog # 设置的名字为blog }