首頁 > 運維 > Nginx > 如何用nginx+uwsgi部署自己的django項目

如何用nginx+uwsgi部署自己的django項目

WBOY
發布: 2023-05-12 22:10:05
轉載
1405 人瀏覽過

    第一步:換源

    輸入指令換掉Ubuntu的下載來源

    sudo nano /etc/apt/sources.list
    登入後複製

    將以下全部替換掉原文件,我這裡用的是阿里的源,你也可以換其他的。

    deb http://mirrors.aliyun.com/ubuntu/ bionic main restricted
    deb http://mirrors.aliyun.com/ubuntu/ bionic-updates main restricted
    deb http://mirrors.aliyun.com/ubuntu/ bionic universe
    deb http://mirrors.aliyun.com/ubuntu/ bionic-updates universe
    deb http://mirrors.aliyun.com/ubuntu/ bionic multiverse
    deb http://mirrors.aliyun.com/ubuntu/ bionic-updates multiverse
    deb http://mirrors.aliyun.com/ubuntu/ bionic-backports main restricted universe multiverse
    deb http://mirrors.aliyun.com/ubuntu/ bionic-security main restricted
    deb http://mirrors.aliyun.com/ubuntu/ bionic-security universe
    deb [arch=amd64] https://mirrors.aliyun.com/docker-ce/linux/ubuntu bionic stable
    登入後複製
    分别输入以下命令,更新源
    sudo apt update
    sudo apt upgrade
    登入後複製

    第二步:安裝相關套件

    1.安裝python3

    # 安装python3
    sudo apt install python3
    # 查看python安装路径:
    which python
    # 查看python版本:建议使用3.6之后的版本,因为其他的笔者没试过,笔者用的是3.6.9版本
    python
    登入後複製

    2.安裝openssh-server和net-tools

    # 安装 openssh-server
    sudo apt install openssh-server
    #开启:
    sudo service ssh start
     
    # 安装net-tools  
    sudo apt install net-tools
    # 查看虚拟机ip:
    ifconfig
    登入後複製

    如下圖所示,就是我們的虛擬機器IP

    如何用nginx+uwsgi部署自己的django項目

     安裝django的運作環境

    #安装django运行环境:
    sudo apt install virtualenv
    # 创建环境
    virtualenv --python=/usr/bin/python3 myblog
    # 进入环境:
    cd myblog
    # 激活环境:
    source bin/activate
    登入後複製

    安裝django:pip3 install Django

    建立專案:django-admin.py startproject blog

    #啟動並且建立好專案之後就基本和下圖所示差不多了

    如何用nginx+uwsgi部署自己的django項目

    # 进入到blog中安装 uwsgi:
    pip3 install uwsgi
    登入後複製

    第三步:寫入測試文件並測試運行

    1.寫入測試文件

    安裝好之後我們再寫一個測試文件,用來測試我們專案的運作方式,實際專案也是一樣的。這裡我用的是nano編輯寫入方式,你也可以使用vim,方式不限,能建立寫入即可寫入指令為:

    sudo nano test.py

    需要寫入的檔案內容為:

    def application(env,start_response):
            start_response('200 ok',[('Content-Type','text/html')])
            return [b"Hello World"]
    登入後複製

    2.測試執行

    測試指令為:uwsgi --http :8000 --wsgi-file test.py

    #回車之後,我們在瀏覽器輸入ip加port埠號,我的是192.168.217.133:8000。在瀏覽器開啟發現報了以下錯誤。

    如何用nginx+uwsgi部署自己的django項目

     對於這個錯誤,我們只需要打開專案文件的settings.py文件,在ALLOWED_HOSTS裡面添加自己虛擬機器的地址,就ok了,然後我們再測試運行,發現正常,網頁輸出hello world。這裡說明uwsgi能夠正常運作測試檔。

    如何用nginx+uwsgi部署自己的django項目

    但是我們並不是為了運行test.py文件,我們是為了運行自己的django項目,這裡我們需要對上一個命令進行修改,改為:uwsgi - -http :8000 --module blog.wsgi

    ##第四步:引入nginx

    1、安裝啟動nginx

    ##為了避免輸入ip時,不輸入連接埠號也能正常使用,我們引入輕量級的nginx,這裡我們用命令列安裝並且啟動nginx

    安裝:

    sudo apt install nginx

    啟動:

    sudo service nginx start

    2、寫入conf設定檔

    #輸入指令:

    sudo nano /etc/nginx/sites-available/blog_nginx.conf

    新建一個conf文件,並且寫入以下內容,將裡面涉及路徑的地方全部改為你自己專案的路徑:

    upstream django {
        # server unix:///home/python/myblog/blog/blog.sock; # 这里的路径改为你自己项目路径
        server 127.0.0.1:8001; # for a web port socket (we'll use this first)
    }
    server {
        listen      8000;
        server_name 192.168.217.133; # 将这里的ip地址改为你自己的虚拟机或者服务器地址
        charset     utf-8;
        client_max_body_size 75M;   # adjust to taste
        location /media  {
            alias /home/python/myblog/blog/media;  # your Django project's media files - amend as required
        }
        location /static {
            alias /home/python/myblog/blog/static; # your Django project's static files - amend as required
        }
        location / {
            uwsgi_pass  django;
            include     /home/python/myblog/blog/uwsgi_params; # the uwsgi_params file you installed
        }
    }
    登入後複製

    創建好文件之後,我們需要對該文件創建一個軟鏈接,需要輸入以下命令:

    sudo ln -s /etc/nginx/sites-available/blog_nginx.conf /etc/nginx/sites-enabled

    #完成之後我們可以透過ll /etc/nginx/sites-enabled/這個指令來查看一下,是否設定正確,參考下圖

    ##3、建立uwsgi_params檔案和靜態資料夾配置如何用nginx+uwsgi部署自己的django項目

    1)、uwsgi_params

    這裡我們需要建立一個uwsgi_params文件,建立指令為:
    sudo nano uwsgi_params

    並且將下面內容一字不差的寫入到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;
    登入後複製

    檔案儲存之後重啟nginx即可

    2)、建立靜態資料夾

    #打開django專案的settings.py文件,新增靜態文件的路徑,如下圖: 

    然後儲存退出並複製映射靜態文件,指令為:如何用nginx+uwsgi部署自己的django項目python manage. py collectstatic

    建立media資料夾:mkdir  media

    最後輸入指令查看靜態資料夾是否設定正確:

    #第五步:建立uwsgi和nginx的管道通訊如何用nginx+uwsgi部署自己的django項目

    在uwsgi 中將http通訊改為socket通信,修改指令為:uwsgi --socket :8001 --wsgi-file test .py

    此時進入阻塞,在瀏覽器中輸入IP位址:192.168.217.133:8000,發現可以打開,顯示hello world成功。說明uesgi和nginx通訊正常

    進入nginx設定檔中:sudo nano /etc/nginx/sites-available/blog_nginx.conf

    #將檔案中下面兩行中的第二行註釋掉,開啟第一行,但是路徑一定要正確,改使用管道通訊

    server unix:///home/python/myblog/blog.sock; # for a file socket

    # server 127.0.0.1:8001; # for a web port socket (we'll use this first)

    保存退出,重启nginx:sudo service nginx restart

    将uwsgi参数套节字改为blog.sock

    uwsgi --socket blog.sock --wsgi-file test.py

    回到浏览器输入:192.168.217.133:8000得到502:如图

    如何用nginx+uwsgi部署自己的django項目

    我们查看一下错误日志,发现是因为权限问题,解决办法,在命令行后面加入--chmod=666

    uwsgi --socket blog.sock --wsgi-file test.py --chmod=666

    运行之后发现没有问题,并且正常显示Hello World界面。

    现在我们运行django项目,命令为:uwsgi --socket blog.sock --module blog.wsgi --chmod=666

    刷新192.168.217.133:8000得到django的基础页面。

    目前可以说明nginx和uwsgi管道通信正常。

    第六步:将项目改为后台运行

    创建一个uwsgi的配置文件:sudo nano blog_uwsgi.ini

    写入一下内容,将其中的路径改为自己的项目路径

    # mysite_uwsgi.ini file
    [uwsgi]
    # Django-related settings
    # the base directory (full path)
    chdir = /home/python/myblog/blog
    # Django's wsgi file
    module = blog.wsgi
    # the virtualenv (full path)
    home = /home/python/myblog
    # process-related settings
    # master
    master = true
    # maximum number of worker processes
    processes = 10
    # the socket (use the full path to be safe
    socket = /home/python/myblog/blog/mysite.sock
    # ... with appropriate permissions - may be needed
    chmod-socket = 664
    # clear environment on exit
    vacuum = true
    # daemonize uwsgi and write messages into given log
    daemonize = /home/python/myblog/blog/uwsgi.log
    登入後複製

    保存退出并且启动配置文件,命令为:uwsgi --ini blog_uwsgi.ini

    我们可以查看一下后台进程,是否正常启动,输入:ps aux

    如何用nginx+uwsgi部署自己的django項目

    最后回到nginx配置文件中,将监听端口改为80,重启nginx即可。在浏览器中输192.168.217.133得到django页面结果,表示项目运行正常。

    以上是如何用nginx+uwsgi部署自己的django項目的詳細內容。更多資訊請關注PHP中文網其他相關文章!

    相關標籤:
    來源:yisu.com
    本網站聲明
    本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
    熱門教學
    更多>
    最新下載
    更多>
    網站特效
    網站源碼
    網站素材
    前端模板