zoukankan      html  css  js  c++  java
  • 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 ---->可以查看错误日志

  • 相关阅读:
    苹果手机的SB系列(9)移动版的AAP个个都比桌面版大?
    初识Redis(四)
    初识Redis(三)
    初识Redis(二)
    初识Redis(一)
    Codeforces Round #589 (Div. 2)
    康拓展开学习笔记
    最短路模板
    K
    D
  • 原文地址:https://www.cnblogs.com/alecc1124/p/11934255.html
Copyright © 2011-2022 走看看