ubuntu配置Python Django+Nginx+uwsgi 安裝配置

安裝Nginx

sudo apt-get install nginx

若是不能使用apt-get  html

sudo apt-get update(更新源)

ubantu安裝完Nginx後,文件結構大體爲:
  全部的配置文件都在 /etc/nginx下;
  啓動程序文件在 /usr/sbin/nginx下;
  日誌文件在 /var/log/nginx/下,分別是access.log和error.log;
  而且在 /etc/init.d下建立了啓動腳本nginx。前端

sudo /etc/init.d/nginx start    # 啓動
sudo /etc/init.d/nginx stop     # 中止
sudo /etc/init.d/nginx restart  # 重啓

使用瀏覽器訪問  localhost  出現界面    (局域網經過地址輸入ip地址,如:http://192.168.1.90/ )python

sudo apt-get install python3-dev
sudo pip3 install uwsgi

注意:nginx

若是未安裝python3 ,web

使用:sudo apt-get install python3.6shell

若是pip3 提示:django

wuchao@ubuntu:~$ pip3 install uwsig

Command 'pip3' not found, but can be installed with:

sudo apt install python3-pip
解決方案使用: sudo apt install python3-pipubuntu

至於爲何要使用uwsgi,能夠參見這邊博客:快速部署Python應用:Nginx+uWSGI配置詳解(1)
這樣大致的流程是:nginx做爲服務器最前端,負責接收client的全部請求,統一管理。靜態請求由Nginx本身處理。非靜態請求經過uwsgi傳遞給Django,由Django來進行處理,從而完成一次WEB請求。
通訊原理是:
the web client <-> the web server(nginx) <-> the socket <-> uwsgi <-> Django
the web client <-> the web server(nginx) <-> the socket <-> uwsgi <-> Django

測試uwsgi

在Django項目下新建test.py文件,瀏覽器

# test.py
def application(env, start_response):
    start_response('200 OK', [('Content-Type','text/html')])
    #return ["Hello World"] # python2
    return [b"Hello World"] # python3

而後執行shell命令:bash

uwsgi --http-socket :8001 --plugin python --wsgi-file test.py

注意:若是uwsgi提示無命令 ,使用pip3 uninstall uwsgi 卸載 ,再使用 pip3 install uwsgi 從新安裝

加上--plugin python3是告訴uWSGI在使用python插件,否則頗有可能會出現相似這樣的錯誤:

uwsgi: unrecognized option '--wsgi-file' getopt_long() error

執行成功在瀏覽器中打開:http://localhost:8001顯示Hello World說明uwsgi正常運行。

測試Django

首先得保證Django項目沒有問題

sudo apt install python-django #安裝django
django-admin startproject blog #建立blog項目
cd blog #進入項目
python3 manage.py runserver 0.0.0.0:8001 #運行django項目

若是不能使用django-admin startproject blog 時,建立軟鏈接:sudo ln -s /usr/python3/bin/django-admin.py /usr/bin/django-admin

瀏覽器訪問:localhost:8001

而後連接Django和uwsgi,實現簡單的web服務器,到Django項目目錄下執行shell:

uwsgi --http localhost:8001 --plugin python3 --module blog(項目名).wsgi

blog爲你的項目名。訪問http://localhost:8001,項目正常。注意這時項目的靜態文件是不會被加載的,須要用nginx作靜態文件代理。

配置uwsgi

uwsgi支持經過配置文件的方式啓動,能夠接受更多的參數,高度可定製。咱們在Django項目目錄下新建uwsgi.ini

在django項目project目錄下(manage.py下)建立配置文件分兩種 ini
# myweb_uwsgi.ini file
    [uwsgi]
    # 指定IP端口
    socket = :8080
    # 項目目錄
    chdir = /home/ubuntu/xiangmu
    # 指定項目的 wsgi 文件
    module = xiangmu.wsgi
    # process-related settings
    # 啓用主進程
    master = true
    # maximum number of worker processes
    processes = 4
    # ... with appropriate permissions - may be needed
    chmod-socket    = 664
    # clear environment on exit
    vacuum          = true
    # pidfile for record run pid
    pidfile =pid.uwsgi
    # 設置日誌目錄
    daemonize = UWSGI.log

 

在shell中執行:

sudo uwsgi --ini uwsgi.ini 

ps:若是實在不想配置nginx的話,單uwsgi就已經能完成部署了(把socket換成http),你能夠把Django中的靜態文件放到雲平臺中如七牛等等,這樣你的Web也能被正常訪問。

配置nginx

nginx默認會讀取/etc/nginx/sites-enabled/default文件中的配置,修改其配置以下:追加內容以下

注意:若是文件爲只讀 使用chmod修改權限: sudo chmod 777  /etc/nginx/sites-enabled/default

server {
        # 你的網站將會監聽的端口號,若是監聽80端口,部署後訪問localhost自動跳轉到nginx默認的歡迎界面
        listen      80;
        # 綁定的域名
        server_name 10.32.170.124; # substitute your machine's IP address or FQDN
        charset     utf-8;

        # 最大上傳速率
        client_max_body_size 75M;   # adjust to taste

        # Django media(設置成本身的路徑)
        location /media  {
            alias /home/ubuntu/xiangmu/media;  # 您的Django項目的媒體文件——根據須要進行修改
        }
        #Django 靜態文件路徑(設置成本身的路徑)
        location /static {
            alias /home/ubuntu/xiangmu/static; # 您的Django項目的靜態文件——根據須要進行修改
        }

        # 最後,將全部非媒體請求發送到Django服務器
        location / {
            include     /etc/nginx/uwsgi_params; # the uwsgi_params file you installed
            uwsgi_pass 127.0.0.1:8080;
        }
    }

 

重啓nginx

sudo /etc/init.d/nginx restart

注意:重啓失敗則配置文件修改錯誤

修改項目中setting.py 配置文件28行:

ALLOWED_HOSTS = ['*']

經過本地ip地址訪問。如:10.32.170.124/index 

相關文章
相關標籤/搜索