nginx + uwsgi + debian + django部署

準備工做

  1. 我使用的不是本機系統,而是運行docker鏡像庫中的debian系統,由於後面還想研究一下,docker自動化部署相關內容,若是你想直接部署,能夠跳過準備工做。
  2. 下載docker替換鏡像源,由於若是用docker本身的鏡像源下載速度會很慢。根據操做系統的不一樣,你們能夠自行百度,mac系統docker桌面版能夠在prefrence daemon 的registry mirrors:
  3. docker images 查看本地鏡像
  4. docker search debian 查找debian網絡鏡像
  5. docker pull debian從第三步的結果中拉取想要的鏡像
  6. docker run --name mytest -p 0.0.0.0:8000:8081/tcp -it debian /bin/bash
    • --name 爲容器取名字
    • -p 本機端口:容器端口
    • -it 交互
  7. docker ps 查看容器
    • -a 查看全部容器
  8. docker stop container_id 中止容器
  9. Docker rm -v containerid 刪除容器
  10. 將宿主機的項目拷貝到容器中:docker cp 宿主機中要拷貝的文件名及其路徑 容器名:要拷貝到容器裏面對應的路徑

系統鏡像

  1. 在容器中,一樣要先更新一下debian的下載源python

  2. sudo sed -i 's/deb.debian.org/mirrors.ustc.edu.cn/g' /etc/apt/sources.list
  3. 安裝nginx,python,pipnginx

uWSGI運行

  • 安裝 pip3 install uwsgiweb

  • 整理好本身的目錄:到目前爲止,你能夠不須要顧忌django本身生成以外的文件目錄結構,好比uwsgi_param應該放在哪裏,uwsgi.ini應該放在哪裏。只要你理解絕對路徑和相對路徑,可以找到配置文件裏你的文件就能夠。我本身是放在和manage.py同級目錄裏。
  • 確保你的django項目在 python manage.py runserver時不會報錯。
  • 如下兩個文件是運行uwsgi必須的文件docker

  1. uwsgi_paramdjango

    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;
  2. uwsgi.inibash

    [uwsgi]
    socket = 127.0.0.1:50000
    chdir = /home/httpServer/  # 能夠理解爲此文件的絕對路徑
    wsgi-file = httpServer/wsgi.py  # wsgi與chdir的相對路徑
    processes = 4
    daemonize = /home/log/httpServer.log  // 日誌
    pidfile = /tmp/uwsgi.pid
    master = True
  3. 用uwsgi代替wsgi運行django網絡

    uwsgi --ini uwsgi.ini // 寫uwsgi.ini相對路徑便可負載均衡

    出現:[uWSGI] getting INI configuration from uwsgi.ini 說明運行成功dom

    中止uwsgi服務命令:uwsgi --stop uwsgi.pidsocket

nginx

  1. apt-get nginx, 下載nginx ,輸入nginx便可啓動

  2. 關於nginx不能啓動 ==》 在bash欄裏輸入nginx 根據提示修改配置文件

  3. 你們能夠查看一下 /etc/nginx/nginx.conf 相關信息,第61,62行有兩個include,分別是引入配置和生效文件的,咱們等會本身配置的文件就要軟鏈接(至關於快捷方式引入)到62行的位置裏。因此

    /etc/nginx/sites-enabled/ 裏的全部文件都是你編輯後生效的,儘可能不要有重複的,可能會覆蓋不起做用

  4. 編寫本身項目的nginx轉發:

    upstream django { // 配置好被轉發到哪一個端口
        # server unix:///home/abc/uwsgi-tutorial/mysite/mysite.sock; # for a file socket
        server 0.0.0.0:3032; # for a web port socket (we'll use this first)
    }
    
    server {
        # the port your site will be served on
        listen      8002;  // nginx負責監聽的端口
        # the domain name it will serve for
        server_name localhost; # substitute your machine's IP address or FQDN
        charset     utf-8;
    
        # max upload size
        client_max_body_size 75M;   # adjust to taste
    
    
    
        # Finally, send all non-media requests to the Django server.
        location / {
            uwsgi_pass django;  // 轉發的路由
            include     /root/sxx_system/uwsgi_params; 
        }
    }
    • /etc/init.d/nginx start (restart stop)
  5. 注意:nginx轉發,先要啓動uwsgi,在uwsgi_pass中傳入uwsgi填入的接口網址

能夠完善的點:

  1. 利用docker實現自動化部署,利用dockerfile和sh腳本,docker_compose.yaml,完成環境的安裝。使你的包能夠直接安裝,不須要本身安裝相關依賴環境。
  2. nginx其餘的一些功能,以及有media和static文件如何處理;按權重分發路由實現負載均衡等。
  3. docker和nginx都是很大的點,在能夠完成基本配置後,能夠深刻研究一下里面的一些其餘實現功能。
相關文章
相關標籤/搜索