ubuntu16.4+nginx+uwsgi+Django 部署上線

Nginx概述

Nginx是一款輕量級的HTTP服務器,採用事件驅動和異步非阻塞處理方式框架,這讓其具備極好的IO性能,市場用於服務端的反向代理和負載均衡html

Nginx優勢

  • 高併發鏈接:官方測試Nginx可以支撐5萬併發鏈接,實際生產環境中更能夠支撐2~4萬併發鏈接數。python

  • 內存消耗少:在主流的服務器中Nginx目前是內存消耗最小mysql

  • 無償使用能夠商業化:開源linux

  • 配置文件簡單:網絡和程序配置通俗易懂nginx

環境搭建

Ubuntu下載nginx配置(下載最新版nginx)

http://nginx.org/en/linux_packages.html#stable (nginx官網)

  • 對於Ubuntu,請將如下內容追加到/etc/apt/source.list文件的末尾sql

deb http://nginx.org/packages/ubuntu/ codename nginx
deb-src http://nginx.org/packages/ubuntu/ codename nginx

codename爲Ubuntu版本數據庫

Version codename Supported Platforms
16.04 xenial x86_64, i386, ppc64el, aarch64/arm64
17.10 artful x86_64, i386
18.04 bionic x86_64
  • 下載nginx

apt-get update apt-get install nginx

推薦:http://nginx.org/en/download.html 選擇Stable version穩定版下載

 

  • 下載所需密鑰,在/etc/apt目錄下

wget http://nginx.org/keys/nginx_signing.key 
sudo apt-key add nginx_signing.key
  • 在同級目錄下解壓安裝其餘擴展庫,而後配置,編譯安裝:

    pcre,用於解析正則

    https://nchc.dl.sourceforge.net/project/pcre/pcre/8.42/pcre-8.42.tar.gz

    zlib,用於壓縮文件

    http://www.zlib.net/zlib-1.2.11.tar.gz

    openssl,用於支持https協議(這個是github的源碼,在他releases已發佈版本中找一箇舊一點的版本如1.01右鍵複製連接)

    https://github.com/openssl/openssl

    進入nginx目錄,進行編譯配置

    ./configure 
    --prefix=/usr/local/nginx
    --with-http_ssl_module
    --with-http_flv_module
    --with-http_stub_status_module
    --with-http_gzip_static_module
    --with-pcre=../pcre-8.42
    --with-zlib=../zlib-1.2.11
    --with-openssl=../openssl-OpenSSL_1_0_1r

    安裝

    make && sudo make install

    打開瀏覽器訪問此機器的 IP,若是瀏覽器出現 Welcome to nginx! 則表示 Nginx 已經安裝並運行成功

    sudo /usr/local/nginx/sbin/nginx

     

 

nginx命令

sudu apt-get update # 更新 ​ sudo apt-get install nginx # 下載 sudo apt-get remove nginx nginx-common # 卸載刪除除了配置文件之外的全部文件。 ​ sudo apt-get purge nginx nginx-common # 卸載全部東東,包括刪除配置文件。 ​ sudo apt-get autoremove # 在上面命令結束後執行,主要是卸載刪除Nginx的再也不被使用的依賴包。 ​ sudo apt-get remove nginx-full nginx-common #卸載刪除兩個主要的包。 nginx -V # 查看版本 1.14穩定版 nginx # 運行 killall nginx # 終止運行

 

此時瀏覽器打開 服務器公網ip 能夠看到nginx歡迎頁面

uwsgi概述

web服務器和web框架

web服務器是用來接收客戶端請求,創建鏈接,轉發響應的程序 web框架是處理業務邏輯 舉例: web服務器:nginx web框架:flask

uWSGI和WSGI

WSGI:通訊協議 uWSGI:屬於WSGI協議的web服務器(nginx、nginx都是web服務器)

爲何須要nginx+uWSGI

利用nginx能夠實現反向代理的能力,能夠實現分佈式服務器功能能夠解決網絡訪問量過大的問題。

安裝 pip

通常默認Ubuntu服務器自帶python3.5可是卻沒有自帶pip

sudo apt-get install python3-pip

 

安裝 uwsgi

pip3 install uwsgi

 

Django自帶wsgi爲何不直接使用,Django自帶wsgi只是爲了開發使用的是單進程的,不適合上線使用。

在項目根目錄(manage.py同目錄)下建立 uwsgi.ini 文件

uwsgi官網

[uwsgi] socket = 127.0.0.1:3031 chdir = /home/foobar/myproject/ wsgi-file = myproject/wsgi.py processes = 4 threads = 2 stats = 127.0.0.1:9191

 

在etc/nginx/conf.d/default.conf 配置nginx

將其中以下代碼註釋

#location / { # root /usr/share/nginx/html; # index index.html index.htm; #}

 

替換爲

location / { include uwsgi_params; uwsgi_pass 127.0.0.1:8080; } 運行Django程序

 

  • 檢查項目異常

python3 manage.py runserver

 

  • 下載項目所依賴包裹

  • 安裝數據庫

sudo apt-get install mysql-server

 


#期間設置數據庫密碼
DEBUG = FALSE ALLOWED_HOSTS = ['*']

 

+ static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)

 

數據庫經常使用命令

mysql -u root -p # 登陸數據庫 show databases; # 查看數據庫 CREATE DATABASE db_name DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci; # 建立數據庫 quit; # 退出數據庫

 

執行遷移

python manage.py migrate

 

uwsgi運行

uwsgi uwsgi.ini

 

到此服務器部署成功,接下來就是設置靜態文件了。

設置靜態文件

由於此時服務器路由統一由nginx管理,因此咱們須要進行配置nginx,etc/nginx/conf.d/default.conf

location  /static { autoindex on; alias /home/ydh/<項目根目錄>/static; }

 

將項目中的文件同一管理

  • 在項目settion.py中設置STATIC_ROOT 靜態文件根目錄

STATIC_ROOT = os.path.join(BASE_DIR,'static')

 

  • 在項目根目錄建立 static

  • 執行命令

python3 manage.py collectstatic # 將靜態文件收集到STATIC_ROOT

 

重啓nginx

相關文章
相關標籤/搜索