本文部署教程主要参照B站和djangoproject上的教程,及附上一些个人的踩坑记录
B站链接:https://www.bilibili.com/video/av31456425/?spm_id_from=333.788.videocard.0
官方教程:https://uwsgi.readthedocs.io/en/latest/tutorials/Django_and_nginx.html
系统环境:ubuntu 16.04
Django:2.1.4
Python:3.6.8
目录:
1. uwsgi
1.1 安装uwsgi
1.2 用文件测试uwsgi
1.3 用项目测试运行uwsgi
2. nginx
2.1 安装nginx
2.2 修改nginx.conf
2.3 编写项目配置文件
2.4 为自己的配置文件添加软连接
3. 编写uwsgi配置文件
3.1 检查当前uwsgi 状态
4 启动nginx
4.1 检查nginx状态
4.2 启动nginx
5 收集static
5.1 修改setting文件
5.2 收集静态文件
5.3 修改nginx配置文件
5.4 重启nginx
1 uwsgi
1.1 安装uwsgi
pip install uwsgi
1.2 测试uwsgi
①准备一个简单的python文件,比如 新建一个test.py
def application(env, start_response):
start_response('200 OK',[('Content-Type','text/html')])
return[b"Hello World"]
②用文件测试是否可用
uwsgi --http :8000 --wsgi-file test.py
到本地机器浏览器中输入服务器ip+8000看看是否出现HelloWorld
(如果是阿里云要到控制台安全组那里这是运行8000端口运行)
x.x.x.x:8000
③用项目测试是否可用
uwsgi --http (端口) :8000 --chdir 项目路径(即项目文件manage.py所在的文件夹的路径,比如/home/mysite) --home python路径,一般填写自己的虚拟环境的python的路径(即bin所在的文件夹的路径,比如/home/mysite_env/) --module (wsgi所在地方,一般写法为mysite.wsgi:application)
然后在浏览器输入服务器ip+8000看是否出现网站的主页(没有任何样式的主页)
x.x.x.x:8000
2. nginx
2.1 安装nginx
pip install nginx
2.2 修改nginx.conf
vim /etc/nginx/nginx.conf
!!!!把第一行user www-data里面的www-data改为自己的账户,如果是管理员则直接改为root,不然最后会因为当前账户权限不足而失败
2.3 编写项目配置文件
vim /etc/nginx/sites-available/mysite.conf
写入如下代码:
server{
listen 80;
server_name mysite;
charset utf-8;
client_max_body_size 75M;
location /static {
alias /root/mysite/static;
}
location /media {
alias /root/mysite/media;
}
location / {
uwsgi_pass 127.0.0.1:8001;
include /etc/nginx/uwsgi_params;
}
}
这里对这个文件说明一下:
server_name 可以填写自己网站的名称
location /static 下填写的是自己的网站下的static文件夹路径
location /media 下填写的是自己的网站下的media文件夹路径
2.4 为自己的配置文件添加软连接
ln -s /etc/nginx/sites-available/mysite.conf /etc/nginx/sites-enabled/mysite.conf
添加软连接而不是复制的目的是如果要修改配置文件的话可以直接修改available文件夹里面的即可以了,不用两个一起修改
3. 编写uwsgi配置文件
在一个自己喜欢的地方新建一个文件夹并添加ini文件
mkdir mysite_uwsgi
cd mysite_uwsgi
vim mysite.ini
添加下面代码:
[uwsgi]
chdir = /root/mysite
home = /root/env/py36
module = mysite.wsgi:application
master = True
processes = 4
harakiri = 60
max-requests = 5000
socket = 127.0.0.1:8001
pidfile = /root/mysite_uwsgi/master.pid
daemonize = /root/mysite_uwsgi/mysite.log
vacuum = True
这里说明一下:
mysite改为自己的项目
process 决定用多少个子进程运行uwsgi
socket的8001端口好改为自己喜欢的端口
其他参数可以参照本文开头的B站链接,那里说的很详细
编写完成后运行
uwsgi --ini /home/mysite_uwsgi/mysite.ini
3.1 检查当前uwsgi 状态
ps -aux | grep uwsgi
因为配置文件中process=4,如果uwsgi进程只有一个则说明没有启动,请检查uwsgi配置文件,如果有5个(一个主进程4个子进程)则说明成功启动
4 启动nginx
4.1 检查nginx状态
nginx -t
显示successful即通过测试
4.2 启动nginx
service nginx restart
5 收集static
5.1 修改setting文件
进入django项目中的setting.py,添加如下代码:
STATIC_ROOT = os.path.join("BASE_DIR","static_collected")
5.2 收集静态文件
到虚拟环境中,进入自己的项目文件夹
python manage.py collectstatic
5.3 修改nginx配置文件
把alias /root/mysite/static修改为alias /root/mysite/static_collect
5.4 重启nginx
至此,完成部署任务
下面讲解一些事情:
1. 对uwsgi进程进行操作 (重启、停止)
uwsgi --reload /root/mysite_uwsgi/master.pid
uwsgi --stop /root/mysite_uwsgi/master.pid
对项目文件进行修改之后必须使用第一条命令重启uwsgi!!!!!不然不能应用修改!!
2. 错误
一定要学会查日志!!!!nginx的日志文件在/var/log/nginx/中,有access.log和error.log两个文件,错误通常都在error.log文件当中。
我遇到的是403错误:
查看项目文件是否开放访问权限
chmod -R 755 /home/mysite
查看运行nginx的是不是自己当前用户
ps -aux | grep nginx
如果用户是www-data,请参照2.2