美文网首页
Ubuntu16.04上部署Django项目nginx+uwsg

Ubuntu16.04上部署Django项目nginx+uwsg

作者: 皓浩丶 | 来源:发表于2019-01-13 21:27 被阅读0次

    更新ubuntu系统

    sudo apt-get update
    sudo apt-get upgrade

    安装nginx

    • 安装

    apt-get install nginx

    • 查看版本

    nginx -V

    创建虚拟环境

    • 安装pip

    sudo apt-get install python3-pip

    • 升级pip

    sudo pip3 install --upgrade pip

    • 安装virtualenv虚拟环境

    sudo pip3 install virtualenv

    • 安装virtualenvwrapper

    sudo pip3 install virtualenvwrapper

    • 创建目录保存虚拟环境

    mkdir $HOME/.virtualenvs

    • 如果在更新pip3后使用出现
    ImportError: cannot import name main
    

    解决方法:进入/usr/bin/pip3 进行修改修改
    将这三行

    from pip import main
    if __name__ == '__main__':
        sys.exit(main())
    

    修改为下面内容后就可以了(ps:如果还是不行,可以尝试退出重新连接一下)

    from pip import __main__
    if __name__ == '__main__':
        sys.exit(__main__.main())
    
    • 接下来在~/.bashrc中添加以下内容
    export WORKON_HOME=$HOME/.virtualenvs
    export VIRTUALENVWRAPPER_PYTHON=/usr/bin/python3
    export VIRTUALENVWRAPPER_VIRTUALENV=/usr/local/bin/virtualenv
    source /usr/local/bin/virtualenvwrapper.sh
    
    • 运行

    source ~/.bashrc

    • 创建虚拟环境

    mkvirtualenv [虚拟环境名]

    • 进入虚拟环境

    workon myblog_env/bin/activate

    安装uwsgi

    • 安装

    pip install uwsgi

    • 查看uwsgi版本

    uwsgi --version

    • 测试uwsgi,创建test.py
    def application(env, start_response):
        start_response('200 OK', [('Content-Type','text/html')])
        return [b"Hello World"] # python3
    
    • 用uwsgi运行test.py

    uwsgi --http :8000 --wsgi-file test.py

    • 访问服务器ip:8000,如果出现hello world则说明uwsgi已经能够正常使用了

    配置nginx和uwsgi

    • 在/home/ubuntu/中创建nginx.conf并在文件中添加以下内容
     upstream django{
            server 127.0.0.1:8001; # 设置socket端口
    }
    
    
    server {
    
        listen      80; # 监听端口
        server_name .hluner.cn;# 自己的域名
        charset     utf-8;
        client_max_body_size 75M;  # 最大上传
    
        location /media  {
            alias /home/ubuntu/myblog/media;  # Django项目的media
        }
    
        location /static {
            alias /home/ubuntu/myblog/static; # Django项目的静态目录
        }
    
        location / {
            include     /home/ubuntu/uwsgi_params; # uwsgi_params绝对路径
            uwsgi_pass  django; # 对应最上面设置的socket套接字
        }
    }
    

    创建uwsgi.ini添加

    [uwsgi]
    # 项目目录
    chdir=/home/ubuntu/myblog/
    # 指定项目的application
    module=myblog.wsgi:application
    # 进程个数
    workers=5
    # 指定静态文件
    static-map=/static=/home/ubuntu/myblog/static
    # 启用主进程,对应使用的虚拟环境
    home=/root/.virtualenvs/myblog_env
    master=true
    # 启用线程
    enable-threads=true
    # 设置自中断时间
    harakiri=30
    # 设置缓冲
    post-buffering=4096
    # 指定socket的文件路径
    socket=:8001
    vacuum = true
    
    

    创建uwsgi_params 添加

    uwsgi_param  QUERY_STRING       $query_string;
    uwsgi_param  REQUEST_METHOD     $request_method;
    uwsgi_param  CONTENT_TYPE       $content_type;
    uwsgi_param  CONTENT_LENGTH     $content_length;
    
    uwsgi_param  REQUEST_URI        $request_uri;
    uwsgi_param  PATH_INFO          $document_uri;
    uwsgi_param  DOCUMENT_ROOT      $document_root;
    uwsgi_param  SERVER_PROTOCOL    $server_protocol;
    uwsgi_param  REQUEST_SCHEME     $scheme;
    uwsgi_param  HTTPS              $https if_not_empty;
    
    uwsgi_param  REMOTE_ADDR        $remote_addr;
    uwsgi_param  REMOTE_PORT        $remote_port;
    uwsgi_param  SERVER_PORT        $server_port;
    uwsgi_param  SERVER_NAME        $server_name;
    
    

    其中uwsgi_params的内容是固定的,其余两个要根据项目自己编写
    在setting.py中添加

    STATIC_ROOT ='静态文件的存储位置'
    

    然后需要收集静态文件

    python manage.py collectstatic

    让nginx.conf生效

    • 进入目录

    cd /etc/nginx/sites-enabled/

    • 删除其中默认的文件

    rm default

    • 创建软链接

    ln -s /home/ubuntu/nginx.conf [重命名名称]

    • 重启nginx服务

    /etc/init.d/nginx restart

    • 进入到/home/ubuntu启动uwsgi

    uwsgi --ini uwsgi.ini

    输入ip:80查看如果项目启动成功就可以了

    • 退出虚拟环境,在真实环境中安装uwsgi,通过外部的uwsgi连接到虚拟环境中的uwsgi

    pip3 install uwsgi

    • 为了让项目在后台直接运行可以将启动命令写到 /etc/rc.local中

    cd /etc/rc.local

    在其中添加

     /usr/local/bin/uwsgi --ini /home/ubuntu/uwsgi.ini
    
    • 重启服务器

    reboot

    如果重启成功后访问ip就可以看到项目正常运行则说明已经部署成功

    相关文章

      网友评论

          本文标题:Ubuntu16.04上部署Django项目nginx+uwsg

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