Django +uwsgi+python3+nginx + mysql 部署

 

 

 

 

 

環境:html

服務器ip:192.168.0.110前端

centos服務器 6.4 + mysql 5.6 + django1.11 +nginx 1.13.7 + uwsgi 2.0.18python

 

uwsgi介紹

uWSGI是一個Web服務器,它實現了WSGI協議、uwsgi、http等協議。Nginx中HttpUwsgiModule的做用是與uWSGI服務器進行交換。mysql

要注意 WSGI / uwsgi / uWSGI 這三個概念的區分。linux

  1. WSGI是一種Web服務器網關接口。它是一個Web服務器(如nginx,uWSGI等服務器)與web應用(如用Flask框架寫的程序)通訊的一種規範。
  2. uwsgi是一種線路協議而不是通訊協議,在此經常使用於在uWSGI服務器與其餘網絡服務器的數據通訊。
  3. 而uWSGI是實現了uwsgi和WSGI兩種協議的Web服務器。
  4. uwsgi協議是一個uWSGI服務器自有的協議,它用於定義傳輸信息的類型(type of information),每個uwsgi packet前4byte爲傳輸信息類型描述,它與WSGI相比是兩樣東西。

 

uWSGI的主要特色以下nginx

  1. 超快的性能
  2. 低內存佔用
  3. 多app管理
  4. 詳盡的日誌功能
  5. 高度可定製(內存大小限制,服務必定次數後重啓等)

 

nginx+uwsgi

工做原理:c++

  nginx負責創建一個本地的工做環境,就是本地服務器,相似於pycharm的 run調試django同樣,能夠打開一個 http:127.0.0.1的本地服務頁面web

並開啓一個可以使用的端口。sql

  uwsgi 負責轉發,將外網發過來的請求轉發給 nginx,nginx就像處理內部訪問同樣來處理請求。(因此他們的端口明顯不同django

 

nginx+uwsgi+django是咱們經常使用的django部署方式。nginx做爲最前端的服務器,他負責接收全部的客戶端請求,對於請求的靜態文件,由nginx服務器本身完成,由於它具備很好處理靜態文件的能力,性能進行過優化,支持高併發量;uWSGI服務器做爲支持服務器,是用來服務nginx的,nginx將請求的動態文件交給uWSGI進行處理。uWSGI實現了uwsgi、wsgi和http協議,uwsgi協議是uWSGI自定義的協議,定義的是框架(django)和服務器對接的接口

 

 

Nginx和uWSGI都是Web服務器 ,Nginx負責靜態內容,uWSGI負責Python這樣的動態內容,請求先交由Nginx,若是是靜態內容就本身處理了,若是是動態內容就交給uWSGI服務器,uWSGI服務器處理整個Django項目的Python代碼,響應請求,原路返回

nginx + uwsgi 提供高併發

mysql安裝 參考

 http://www.cnblogs.com/mingerlcm/p/6792503.html

 

爲centos系統增長編譯功能

yum install gcc-c++

 

 

安裝nginx依賴包

yum install pcre pcre-devel

安裝wget

yum install wget

 

安裝這個模塊是爲了讓uwsig支持使用「-x"選項,能經過xml文件啓動項目

yum install libxml*

 

安裝python3.6可能使用的依賴
# yum install openssl-devel bzip2-devel expat-devel gdbm-devel readline-devel sqlite-devel

 

 

下載python3

Python下載源 1.下載軟件包 # wget https://www.python.org/ftp/python/3.6.1/Python-3.6.1.tgz
2.解壓 # tar -xzvf Python-3.6.1.tgz 3.建立目錄 #mkdir -p /usr/local/python3.6    
4.把Python3.6安裝到 /usr/local/python3.6 目錄 # ./configure --prefix=/usr/local/python3.6 # make && make install

5.建立軟鏈接 ln -s /usr/local/python3.6/bin/python3.6 /usr/bin/python3 ln -s /usr/local/python3.6/bin/pip3 /usr/bin/pip3 6.查看Python版本 #python --version Python 3.6.1

 

給python3安裝django和uwsgi,pymysql以及配置啓動項目的xml文件

pip3 install pymysql

 

pip3 install django==1.11

 

pip3 install uwsgi

 

爲了在終端中使用uwsgi命令,執行如下命令

ln -s /usr/local/python3.6/bin/uwsgi /usr/bin/uwsgi3

 

專門用來放咱們的django項目

mkdir /www/

 

將你的django項目放到你想放的路徑下,例如/www/,假設咱們的Django項目名爲"myproject"
在你的django項目下新建 myproject.xml,內容以下:

 

[root@mysql myproject]# vim myproject.xml

 

 

<uwsgi>
    <socket>127.0.0.1:8002</socket><!-- 內部端口,自定義 -->
        <chdir>/www/myproject</chdir><!-- 項目路徑 -->
            <module>myproject.wsgi</module>
                <processes>4</processes> <!-- 進程數 --> 
    <daemonize>uwsgi.log</daemonize><!-- 日誌文件 -->
</uwsgi>

 

wq保存 

 

 

安裝nginx和配置nginx.conf文件

下載nginx,執行解壓命令

wget http://nginx.org/download/nginx-1.13.7.tar.gz
tar -zxvf nginx-1.13.7.tar.gz

 

進入解壓後的nginx-1.13.7文件夾,編譯安裝nginx

 

[root@mysql myproject]# cd /soft/ [root@mysql soft]# cd nginx-1.13.7 ./configure --prefix=/usr/local/nginx --with-http_ssl_module make && make install

 

nginx通常默認安裝好的路徑爲/usr/local/nginx
在/usr/local/nginx/conf/中打開nginx.conf,加入如下內容,先備份nginx.conf文件

 

 

[root@mysql nginx-1.13.7]# cd /usr/local/nginx/conf/ [root@mysql conf]# cp nginx.conf nginx.conf.bak

 

 

vim nginx.conf

 

 

server { listen 8001; # 暴露給外部訪問的端口 server_name localhost; charset utf-8; #access_log logs/host.access.log main; location / { include uwsgi_params; uwsgi_pass 127.0.0.1:8002; # 外部訪問8001就轉發到內部8002 } location /static/ { alias /www/myproject/statics/; #項目靜態路徑設置 }

 

關閉 selinux

vim /etc/selinux/config

 

SELINUX=enforcing

 

改成disabled

SELINUX=disabled

 

iptables加上容許8001,8002,3306,80端口

vim /etc/sysconfig/iptables

 

配置文件配置

-A INPUT -m state --state NEW -m tcp -p tcp --dport 22 -j ACCEPT -A INPUT -m state --state NEW -m tcp -p tcp --dport 3306 -j ACCEPT -A INPUT -m state --state NEW -m tcp -p tcp --dport 8001 -j ACCEPT -A INPUT -m state --state NEW -m tcp -p tcp --dport 80 -j ACCEPT -A INPUT -m state --state NEW -m tcp -p tcp --dport 8002 -j ACCEPT

配置好重啓iptables

[root@mysql myproject]# service iptables restart

 

啓動nginx

[root@mysql conf]# /usr/local/nginx/sbin/nginx

 

 

訪問項目頁面

進入你的django項目路徑,執行如下命令:

uwsgi3 -x myproject.xml

 

注:執行該xml後django就算是啓動了,內部的nginx服務也將被啓動,uwsgi將可以鏈接到nginx的服務了,此時網絡應該是通暢的了。

以上步驟都沒有出錯的話,打開你的瀏覽器,輸入如下連接,http://192.168.0.110:8001 (請將該ip替換成你的服務器ip)

網站訪問成功!

 

部署完成以後發現django後臺admin訪問時無樣式 

解決方法以下: 
1.先打開django項目中settings.py文件(/www/myproject/myproject/settings.py),添加以下配置

 

 

[root@mysql myproject]# vim settings.py

 

 

STATIC_ROOT = os.path.join(BASE_DIR, "statics")

2.而後在django項目下 執行 python3 manage.py collectstatic 此命令是蒐集靜態文件的命令,

 

[root@mysql myproject]# python3 manage.py collectstatic You have requested to collect static files at the destination location as specified in your settings: /www/myproject/statics This will overwrite existing files! Are you sure you want to do this? Type 'yes' to continue, or 'no' to cancel: yes

 

 

 

蒐集後的靜態文件存放在/home/myproject/statics/中 

 

3.從新啓動uwsgi和nginx

[root@mysql myproject]# /usr/local/nginx/sbin/nginx -s reload

 

[root@mysql myproject]# pkill uwsgi [root@mysql myproject]# uwsgi3 -x myproject.xml [uWSGI] parsing config file myproject.xml

 

 能夠看到admin樣式

相關文章
相關標籤/搜索