django+uwsgi+nginx+ubuntu(高并发网站部署)

-------------------------------------------------------------(这是分隔符)

django如果直接搭建到Ubuntu上的话会出现访问量稍微大一点服务器就吃不消了的情况,所以需要借助别人的力量(uWSGI,nginx),uWSGI就是nginx和django的中间人,其实uWSGI也可以做到能够高并发的,但是为什么还要用nginx就不是我等研究的问题了。

第一步:安装uWSGI,什么?你没有django?那这不关我的事了

命令

sudo pip3 install uwsgi

这一步大概花个5分钟左右吧,安装成功后

测试一下?

刚就完事了为什么要测试。

进入某个项目中:命令 ,mysite是你自己的项目名字 ,:8000前面一定要有空格(我好像因为这个出过错)

uwsgi --http :8000 --module mysite.wsgi

------------------------------------------------------------------------------------

第二步:正式点:创建项目的uwsgi的配置文件

cd进入项目根目录

vim uwsgi.ini

-------------(配置内容)

[uwsgi]

http = :9000 #讲道理这个端口在配置了nginx以后就没用了
#这里的端口用于和nginx通信(保持py(朋友)关系)
socket = 127.0.0.1:8001
#在此写入项目地址
chdir = /home/ubuntu/school_Project
# 这里放你项目中的主文件的wsgi.py文件
wsgi-file = school_Project/wsgi.py
# 最大进程数,我腾讯云的cpu核少就放两,据说两个也能带动小几千的并发量
processes = 2
#每个进程最大线程数
threads = 1

#监听端口,等会有个工具可以直接看到负载率
stats = 127.0.0.1:9191
# clear environment on exit
vacuum = true

-------------------------

编辑完成后先按一下Esc,再按shift+:组合键,输入wq,回车

配置文件编辑完成,

(如果想更改配置可以在项目根目录重新运行vim uwsgi.ini  这时候可以点击两下回车或者按o键进入界面,进入后按i键进入编辑模式,编辑完成后esc退出编辑模式,再shift+:组合键

然后输入wq!,此命令为强制保存,回车)

在项目根目录输入uwsgi uwsgi.ini ,回车,运行uwsgi

可以在浏览器上面测试一下有没有运行成功

浏览器中输入(ip:9000)端口为第一个http后面那个端口

成功后ubuntu中界面

 如图开启两进程数

-------------------------------------------------------------------------------------------

我不知道uwsgi如何加载静态文件,所以你的css等文件都无法加载出来,如果想知道的话可以尝试百度一下,但是没有必要,因为我们最终使用的是nginx

uwsgi开启后就不要关掉,开启另一个终端。

运行ps -ef|grep uwsgi 可以看到uwsgi运行的端口

----------------

在此可以安装一个插件看到每个进程的负载率

sudo pip3 install uwsgitop

然后运行 uwsgitop:9191       ----->这个端口为上面的监听端口

------------------------------------------------------------------------------------------

如果上述完成后开始下一步:安装nginx

命令:sudo apt-get install nginx

命令:sudo /etc/init.d/nginx start       --->开启nginx

-------------->开启后可以在浏览器输入你的ip然后直接看到效果,也可以输入ps -ef| grep nginx看到开启效果

命令:/etc/init.d/nginx restart           ----重启nginx---->修改了nginx后就要重启一下

--------------------------------------------------------------------------------------------

下一步:项目配置文件

cd进入需要部署的项目

命令:vim school_nginx.conf              -----》创建一个conf配置文件

--------------内容

upstream django {

server 127.0.0.1:8010; #这个端口和uwsgi的那个socket端口一致
}

# configuration of the server
server {
# 能够在客户端浏览器输入的端口
listen 8007;
# the domain name it will serve for
server_name school_Project.example.com; # 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 /path/to/your/mysite/media; # your Django project's media files - amend
as required

...skipping 1 line

location /static {
alias /home/ubuntu/school_Project/all_static_files; # 静态文件地址
}

# Finally, send all non-media requests to the Django server.
location / {
uwsgi_pass django;
include /home/ubuntu/school_Project/uwsgi_params; # 根目录下,uwsgi_params下面会教给你怎么添加
}
}

----------------------------------------------------------------------

下一步:

配置好配置文件后需要生成一份软连接到nginx的目录中,方法如下

进入项目根目录
sudo ln -s school_nginx.conf /etc/nginx/sites-enabled/ --》生成软连接到nginx目录下(快捷方式)-->alex老师这么教的,但是我尝试的不行,报错说路径太复杂,所以麻烦点直接cp一份到那个目录下,问题是如果项目中的文件改动的话还要去nginx目录下也改动,方法如下
先进入项目根目录
cp school_nginx.conf /etc/nginx/sites-enabled/

--------------------------------------------------------------------

下一步:上面不是说了uwsgi_params文件吗

还需要在nginx中cp一份uwsgi_params文件到项目根目录中,方法如下
先去项目根目录
cp /etc/nginx/uwsgi_params .                                          ---》后面有个.

 此时项目下的文件

-----------------------------------------------------------------------

重启nginx,基本完成,但是,但是,但是,重要的事情说三遍,
静态文件,会出问题,因为配置文件中只配置了一个静态文件,而且只能配置一个
所以,有个很好的解决办法,
把所有静态文件放一个目录,生成一个新的静态文件目录

方法:
先在项目中的settings中加个配置,STATIC_ROOT="...",中间加项目所有静态文件的路径,这里不能和上面的static名字重复,我上述的项目中all_static_files就是这么生成的
然后在项目根目录执行 python3 manage.py collectstatic -->django封装的方法,可以将所有静态文件拷进来
然后需要改nginx的配置文件中的静态文件目录地址

重启nginx。

完美

-------------------------------------------------------------

sudo service nginx status -l --->可以查看当前nginx状态,如果重启报错可以用此命令查看错误类型
tail -f /var/log/nginx/error.log ---->可以查看错误日志

原文地址:https://www.cnblogs.com/alecc1124/p/11934255.html