SLAM+語音機器人DIY系列:(八)高階拓展——2.centos7下部署Django(nginx+uwsgi+django+python3)

0.安裝步驟預覽
(1)系統默認自帶python2.x,因此須要先安裝python3.x
(2)python2對應pip,python3對應pip3,用源碼安裝python3後pip3也自動安裝了
(3)用pip3安裝virtualenv
(4)用virtualenv建立python3的虛擬環境
(5)在建立的虛擬環境中,用pip3安裝Django和uwsgi
(6)安裝nginxpython

(7)建立django項目nginx

(8)關聯nginx、uwsgi、djangoc++


#################使用root身份登陸系統執行#####################web

1.編譯安裝python3sql

(1)依賴安裝django

#爲centos系統增長編譯功能:
yum -y install gcc gcc-c++

#防止編譯安裝python3出現各類異常:
yum install wget openssl-devel bzip2-devel expat-devel gdbm-devel readline-devel sqlite-devel

(2)編譯安裝vim

#下載python3安裝包:
cd /home/<username>/Downloads/ #<username>用本身的用戶名代替
wget https://www.python.org/ftp/python/3.6.3/Python-3.6.3.tgz

#解壓:
tar -zxvf Python-3.6.3.tgz

#配置,將python3安裝到/usr/local/python3/路徑下:
cd Python-3.6.3
./configure --prefix=/usr/local/python3

#編譯安裝:
make -j2
make install -j2

#創建軟連接,方便在終端中直接使用python3和pip3命令:
ln -s /usr/local/python3/bin/python3.6 /usr/bin/python3
ln -s /usr/local/python3/bin/pip3 /usr/bin/pip3

#安裝成功性測試,顯示相應版本就表示成功了:
python3 -V
pip3 -V

2.用pip3安裝virtualenvcentos

#更新pip3至最新版本
pip3 install --upgrade pip

#安裝virtualenv
pip3 install virtualenv

#賦予可執行權限
chmod 777 /usr/local/python3/lib/python3.6/site-packages/virtualenv.py
#創建軟連接,方便在終端中直接使用virtualenv
ln -s /usr/local/python3/lib/python3.6/site-packages/virtualenv.py /usr/bin/virtualenv

3.用virtualenv建立python3的虛擬環境python3.x

#切換到用戶家目錄下
cd /home/<username>/

#新建文件夾
mkdir www_space_venv
cd www_space_venv

#建立名稱爲venv的虛擬環境
virtualenv -p /usr/bin/python3 venv

4.在建立的虛擬環境中,用pip3安裝django和uwsgi瀏覽器

cd /home/<username>/www_space_venv/

#激活虛擬環境
source venv/bin/activate

#安裝django與uwsgi 
pip3 install django
pip3 install uwsgi

#查看django安裝成功與否
pip3 show django 
#查看uwsgi安裝成功與否
pip3 show uwsgi 

#退出虛擬環境
deactivate

5.安裝nginx

#添加nginx存儲庫
yum install epel-release

#安裝nginx
yum install nginx

#使用Nginx的幾個好處:
安全:無論什麼請求都要通過代理服務器,這樣就避免了外部程序直接攻擊web服務器
負載均衡:根據請求狀況和服務器負載狀況,將請求分配給不一樣的web服務器,保證服務器性能
提升web服務器的IO性能:這個我也沒看懂,總結來講就是請求從客戶端傳到web服務器是須要時間的,傳遞多長時間就會讓這個進程阻塞多長時間,而經過反向代理,就能夠在反向代理這完整接受請求,而後再傳給web服務器,從而保證服務器性能,並且有的一些簡單的事情(好比靜態文件)能夠直接由反向代理處理,不通過web服務器

6.建立一個django的項目

(1)新建項目

#切換到工做目錄
cd /home/<username>/www_space_venv/

#激活虛擬環境
source venv/bin/activate

#建立本身的django項目,項目取名爲mysite_django
django-admin.py startproject mysite_django

#修改settings.py,容許全部HOST的訪問,否則瀏覽器訪問會報錯DisallowedHost at / Invalid HTTP_HOST header
ALLOWED_HOSTS = [ ] #修改前
ALLOWED_HOSTS = ['*'] #修改後

#啓動django自帶web服務器
cd mysite_django
python3 manage.py runserver <本身主機地址IP>:8080 #<本身主機地址IP>填本身主機地址,後面須要指定一個可用的端口(如8080)

#用瀏覽器訪問django,<本身主機地址IP>:8080,獲得以下消息說明成功
The install worked successfully! Congratulations!

(2)新建應用

#切換到工做目錄
cd /home/<username>/www_space_venv/

#激活虛擬環境
source venv/bin/activate

#新建應用
cd mysite_django
python3 manage.py startapp hello_app

#新定義的應用加到settings.py中的INSTALL_APPS中
INSTALLED_APPS = [
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'hello_app',
]

編輯應用中的views.py文件:

from django.http.response import HttpResponse

def hello(request):
    user = request.GET.get('user')
    if not user: user = 'world'
    return HttpResponse('hello %s' % user)

編輯項目中的urls.py文件:

from django.contrib import admin
from django.urls import path

from hello_app import views as hello_views

urlpatterns = [
path('admin/', admin.site.urls),
path('hello',hello_views.hello),
]

(3)測試

#啓動django自帶web服務器
cd mysite_django
python3 manage.py runserver <本身主機地址IP>:8080 #<本身主機地址IP>填本身主機地址,後面須要指定一個可用的端口(如8080)

#用瀏覽器訪問django,訪問方式爲
<本身主機地址IP>:8080/hello
<本身主機地址IP>:8080/hello?user=123

#瀏覽器能夠看到對應返回信息,說明django項目新建成功

7.關聯nginx、uwsgi、django

(1)防火牆中相應端口開放,容許外網訪問

默認開放給外網http訪問的端口是80,因此須要在服務器的防火牆中容許80端口,否則外網的請求進不了服務器;

若是想開放給外網http訪問的端口是其餘端口(如8080),依照下面的例子,在服務器的防火牆中容許該端口(8080),同時用步驟(2)方法開放容許http訪問的端口(8080)。

#以80端口爲例

#查詢TCP/UDP的80端口占用狀況
firewall-cmd --query-port=80/tcp
firewall-cmd --query-port=80/udp
#若是返回結果爲「no」,則表示該端口還沒有開放

#永久開放TCP/UDP的80端口
firewall-cmd --permanent --zone=public --add-port=80/tcp
firewall-cmd --permanent --zone=public --add-port=80/udp

#重啓防火牆
firewall-cmd --reload

(2)開放容許http訪問的端口

確保外網訪問nginx服務器的http端口、nginx與uwsgi通訊的socket的端口都在http訪問端口的列表中。

#查看http容許訪問的端口
semanage port -l | grep http_port_t
#輸出結果
http_port_t                    tcp      80, 81, 443, 488, 8008, 8009, 8443, 9000

#將須要開放的端口加入到如上端口列表中,例如開放7878端口做爲nginx與uwsgi通訊的socket通道
semanage port -a -t http_port_t  -p tcp 7878

(3)關聯nginx與uwsgi

#爲django站點建立一個nginx服務的配置文件

cd /etc/nginx/conf.d/
touch mysite_django.conf
vim mysite_django.conf

#在文件mysite_django.conf中填入以下內容

server {
    server_name 192.168.2.141; #暴露給外部訪問的IP地址,根據實際狀況改寫成本身主機IP
    listen 80; #暴露給外部訪問的端口,確保端口在http訪問和防火牆訪問的容許列表中
    location / {
        include uwsgi_params;
        uwsgi_pass 127.0.0.1:7878; #nginx與uwsgi通訊用的socket接口,確保端口在http訪問端口的列表中
    }
}

#如遇到nginx服務啓動失敗,請檢查mysite_django.conf中指定的端口是否被佔用

(4)關聯uwsgi與django

#建立uwsgi配置文件

cd /home/<username>/www_space_venv
touch mysite_django_uwsgi.ini
vim mysite_django_uwsgi.ini

#在mysite_django_uwsgi.ini文件中填入以下內容

#mysite_django_uwsgi.ini
[uwsgi]

#與nginx通訊
socket = 127.0.0.1:7878
#讓uwsgi做爲單獨的web-server,這裏註釋掉
#http = 127.0.0.1:7878

#django項目根目錄
chdir = /home/chatbot/www_space_venv/mysite_django #根據實際狀況改寫成本身django項目的路徑

#本項指示uwsgi.py文件的位置,其位於Django工程目錄下有個與工程名同名的子文件夾內(設置方式爲:文件夾名.wsgi)
#module = mysite_django
wsgi-file = mysite_django/wsgi.py

processes = 4
threads = 2
master = True
pidfile = uwsgi.pid
daemonize = uwsgi.log

# 虛擬環境地址
#virtualenv = /home/chatbot/www_space_venv/venv

(5)nginx+uwsgi+django聯調測試

#先關閉nginx與uwsgi服務
pkill -9 nginx
pkill -9 uwsgi

#啓動nginx服務
service nginx start

#啓動uwsgi服務
cd /home/chatbot/www_space_venv
source venv/bin/activate #激活虛擬環境
uwsgi --ini mysite_django_uwsgi.ini

#用瀏覽器訪問django,訪問方式爲
<本身主機地址IP>:80/hello
<本身主機地址IP>:80/hello?user=123

#瀏覽器能夠看到對應返回信息,說明部署成功,後面只需專一於django項目的開發了

聯調架構以下圖所示

 

後記                                                      

若是你們對博文的相關類容感興趣,或有什麼技術疑問,歡迎加入下面的《SLAM+語音機器人DIY》QQ技術交流羣,一塊兒討論學習^_^

關於咱們:

視頻教程:

 

https://www.bilibili.com/video/av61448040

相關文章
相關標籤/搜索