Django項目 uwsgi+Nginx 保姆級部署教程

寫在最前:

很是抱歉的是,由於突如其來的疫情,個人hadoop系列斷更了,很難受,由於個人分佈式環境在學校,個人筆記本配置帶不起來,代碼跑不起來我是不敢寫博客的,而後寒假在家寫代碼也沒啥意思,看了很是多的書,把計網和操做系統從新學了一遍。由於實習的須要,將來我更多的技術可能在Python這塊,可是java相關的內容我也會努力保持更新,同時也會出更多的入門教程給你們謝謝你們。php

背景:

最近在學習django的過程當中,用django作了一個小demo,因此試試看能不能部署到服務器上,本身順便也熟悉一下Django整個部署的流程,由於以前學習flask的時候,就使用的uwsgi來做爲python web服務器來部署的,因此此次也就選擇了nginx+uwsgi這樣的一個組合。css

當時買完雲服務器以後,就順手把寶塔裝上了,以前用寶塔部署php項目是真的很容易,因此就偷懶試試寶塔能不能部署django,苦試一個小時,無果,遂放棄,仍是老老實實用原生的uwsgi配合Nginx來部署吧。而後下面的流程我會爭取把有多是坑的地方重點標註出來,未來若是發博客或者本身須要再次部署的時候,也能夠少寫不少配置文件。java

環境:

系統版本:centos7.5python

python版本:3.6.5linux

nginx版本:1.16.1nginx

uwsgi版本:2.0.18web

如環境不一樣,還請查閱其餘資料另行配置。sql

環境準備:

在部署以前,請確保你的linux服務器正確安裝了對應的python版本,若是須要python3版本,請自行查閱資料進行升級安裝。django

首先爲了更好的獨立部署,避免對其餘的項目產生干擾,咱們須要安裝python 虛擬環境:json

sudo pip install virtualenv
sudo pip install virtualenvwrapper
複製代碼

virtualenvwrapper 是virtualenv的擴展管理包,能夠將全部的虛擬環境整合在一個目錄下。

配置虛擬環境:

mkdir ~/.virtualenvs
複製代碼

打開.bashrc:

sudo vim ~/.bashrc
複製代碼

在.bashrc的末尾增長下面內容:

export WORKON_HOME=$HOME/.virtualenvs  # 全部虛擬環境存儲的目錄
source /usr/local/python3/bin/virtualenvwrapper.sh
複製代碼

注意!:這裏的/usr/local/bin/virtualenvwrapper.sh只是針對於我當前系統環境的一個位置,並非全部的服務器都是在這個位置,若是本身不知道virtualenvwrapper.sh在哪裏,能夠搜索文件來找到它在系統中的位置,而且修改.bashrc。

啓用配置文件:

source ~/.bashrc
複製代碼

這個時候若是不報錯,就表明咱們的虛擬環境配置成功了,通常常見的報錯就是virtualenvwrapper.sh文件找不對。

建立虛擬環境:

找一個你本身以爲能記住的地方,新建一個env 文件夾:

cd /www
mkdir env
cd env #進入env目錄
複製代碼

新建一個虛擬環境:

mkvirtualenv -p /usr/bin/python3 orange_env    # my_env是虛擬環境的名稱
複製代碼

注意:若是你的軟鏈接/usr/bin/python3沒有的話,會報錯誤,找不到/usr/bin/python3,這個時候就須要你本身新建一個軟鏈接:

若是報錯:

ln -s /usr/local/python3/bin/python3 /usr/bin/python3 # 路徑要改爲本身的python安裝路徑
複製代碼

以後即可以進入咱們的虛擬環境了:

source /www/env/orange_env/bin/activate
複製代碼

進去虛擬環境以後,前面會出現一個括號,裏面是你虛擬環境的名字:

(orange_env) [root@iz2ze1cvux96riiwfh05qqz ~]# 
複製代碼

在虛擬環境中安裝uwsgi:

pip install uwsgi
複製代碼

退出虛擬環境:

deactivate
複製代碼

再次在主環境中安裝uwsgi:

pip install uwsgi
複製代碼

注意:若是你有其餘的依賴,好比django,msqlclient這些,記得必定要在虛擬環境裏pip安裝一下。

部署過程:

找一個你認爲比較合適的地方,新建一個文件夾,將你的Django項目上傳進去:

以我爲例:

cd /www
mkdir orange
複製代碼

上傳解壓操做略,記得是上傳項目根目錄,就是直接帶manage.py的那個目錄。

新建一個uswgi配置文件,uswgi支持多種配置文件類型,好比yaml,xml,json,ini,這裏我選的是xml。

vim mysite.xml #記得mysite.xml 要和你項目的manage.py 在一個目錄下。
複製代碼

mysite.xml內容以下:

<uwsgi>    
   <socket>127.0.0.1:8080</socket><!-- 內部端口,自定義 --> 
   <chdir>/www/orange/</chdir><!-- 項目路徑 -->            
   <module>orangeproject.wsgi</module> <!-- 通常模塊名 項目名+wsgi -->  
   <processes>4</processes> <!-- 進程數 -->     
   <daemonize>uwsgi.log</daemonize><!-- 日誌文件 -->
</uwsgi>
複製代碼

安裝Nginx:

Nginx 我以前有寫過一系列的基礎入門教程,若是對安裝啓動重啓這些不是很熟練的能夠看下面這篇文章:

連接:寫給後端的Nginx初級入門教程:實戰篇

查看nginx 配置文件路徑:

nginx -t
複製代碼

記得備份nginx以前的配置文件,而後把以前的配置所有刪了,直接加入下面內容:

worker_processes  1;
events {
    worker_connections  1024;
}
http {
    include       mime.types;
    default_type  application/octet-stream;
    sendfile        on;
    server {
        listen       8000;
        server_name 你的域名;
        charset utf-8;
        location / {
           include uwsgi_params;
           uwsgi_pass 127.0.0.1:8080;
           uwsgi_param UWSGI_SCRIPT orangeproject.wsgi;
           uwsgi_param UWSGI_CHDIR /www/orange/;
           
        }
        location /static/ {
        alias /www/orange/transfer/static/; 
        }
    }
}
複製代碼

注意模塊名要保持一致,並且你nginx監聽的端口不能和你django啓動的端口同樣,要不uswgi會由於nginx佔用端口啓動失敗。alias /www/orange/transfer/static/; 這個是你的靜態文件地址,css,img這些。

檢查nginx是否配置成功:

nginx -t
複製代碼

重啓nginx:

nginx -s reload
複製代碼

以後,再次進入咱們的虛擬環境orange_env中,啓動咱們的uwsgi服務器:

cd /www/orange
uwsgi -x mysite.xml
複製代碼

而後打開咱們的本地瀏覽器,輸入:域名:8000,備案過的能夠改nginx配置文件成80。

大功告成:

相關文章
相關標籤/搜索