美文网首页python大法攻略
Django项目(五、项目的部署)

Django项目(五、项目的部署)

作者: 眼君 | 来源:发表于2020-09-11 09:00 被阅读0次

    一般我们的Django项目都是部署在Linux系统上的, 接下来我们来演示具体的部署步骤。

    nginx的安装

    nginx的作用主要是端口转发(负载均衡), 静态文件代理, 配置用户访问等等。

    首先, 安装nginx服务器,安装前简易先执行sudo apt-get update命令更新软件源后再安装:

    (ubuntu)sudo apt-get install nginx
    

    安装完成后, 执行以下命令查看任务是否启动:

    (ubuntu)ps aux|grep nginx
    

    此时可以在命令行运行curl 127.0.0.1命令,系统返回下面的信息表示运行成功:



    也可以直接打开浏览器填写IP看到如下页面:



    表示nginx系统已成功安装并启动了。

    安装uwsgi

    (ubuntu)pip3 install uwsgi
    
    测试

    假设django的wsgi文件路径在projectname/projectname/wsgi.py,

    则命令行进入根目录后,执行以下命令:

    (ubuntu)uwsgi --http :8000 --module XXX.wsgi(xxx为你的项目名称)
    

    出现以下页面则表示UWSGI


    然后打开浏览器,输入当前IP:8000能正常打开页面,静态资源的加载问题先忽略。

    nginx系统配置

    在项目根目录下新建conf目录, 之后新建一个文件conf/nginx/uc_nginx.conf,输入以下配置内容:

    ##conf/nginx/uc_nginx.conf
    
    # 端口转发, 将请求转发到这个端口
    upstream django {
    # server unix:///path/to/your/mysite/mysite.sock; # for a file socket
    server 127.0.0.1:8000; # for a web port socket (we'll use this first)
    }
    
    # configuration of the server
    server {
    # the port your site will be served on
    listen      80;
    # the domain name it will serve for
    server_name 你的ip地址 ; # 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 你的目录路径/media;  # 指向django的media目录
    }
    location /static {
    alias 你的目录路径/static; # 指向django的static目录
    }
    # Finally, send all non-media requests to the Django server.
    location / {
    uwsgi_pass  django;
    include    uwsgi_params; # the uwsgi_params file you installed
    }
    }
    

    填好后保存退出,然后把这个文件软连接到nginx的配置文件里去:

    sudo ln -s 你的目录路径/conf/nginx/uc_nginx.conf /etc/nginx/conf.d/
    
    重启系统
    sudo service nginx restart
    

    如果没有报错,运行以下命令:

    ps aux|grep nginx
    

    看到以下画面,证明nginx启动正常了:


    集中静态资源

    上面我们将, 上线后nginx将开始管理所有的Django项目的静态文件, 但是nginx只会在上述配置的路径中找静态文件, 所以如果Django的静态文件分散在多个目录中时, 就需要集中到一个目录下, 这个目录就是配置文件settings.py中的STATIC_ROOT:

    #settings.py
    ...
    STATIC_ROOT = os.path.join(BASE_DIR, "static/")
    

    注意:如果settings.py文件中配置过STATICFILES_DIRS的话一定要注释掉,这两行代码共存会报错。

    一般在调试部署阶段用runserver时, 保留STATICFILES_DIRS, 在上线阶段保留STATIC_ROOT, 静态文件才能正常展示。

    然后在项目的根目录下运行以下命令就会将所有静态文件都集中到STATIC_ROOT中:

    python3 manage.py collectstatic
    
    配置UWSGI

    在项目根目录下,新建一个uwsgi.ini文件:

    vim conf/uwsgi.ini
    

    然后将以下内容粘贴进文件:

    # conf/uwsgi.ini
    [uwsgi]
    # Django-related settings
    # 项目文件路径
    chdir          = /blogs
    # Django's wsgi file
    module          = blogs.wsgi
    # the virtualenv (full path)
    # process-related settings
    # master
    master          = true
    # maximum number of worker processes
    processes      = 10
    # the socket (use the full path to be safe
    socket          = 127.0.0.1:8000
    # ... with appropriate permissions - may be needed
    # chmod-socket    = 664
    # clear environment on exit
    vacuum          = true
    #虚拟环境路径, 如果没有虚拟环境这行可以注释掉
    virtualenv = /home/bobby/.virtualenvs/mxonline
    

    保存退出后,在conf目录下运行以下命令,启动这个配置文件即可:

    uwsgi -i uwsgi.ini
    

    nginx在访问某些文件时可能没有权限, 这时我们可以配置nginx的用户:

    #/etc/nginx/nginx.conf
    将第一行user www-data;改为user root;
    

    另外, 启动nginx时直接使用:

    nginx
    

    相关文章

      网友评论

        本文标题:Django项目(五、项目的部署)

        本文链接:https://www.haomeiwen.com/subject/fdrjektx.html