CentOS7---部署Nginx+uwsgi+Django+python3環境

HHH_LLL發表於2020-08-03

前提

阿里雲CentOS7伺服器—寶塔Linux皮膚5.2.0
(CentOS Linux 7.4.1708 (Core))

開始

  1. 安裝python3(可使用寶塔Linux皮膚安裝python3)

    # 為centos系統增加編譯功能:
    yum -y install gcc gcc-c++
    
    # 防止編譯安裝python3出現各種異常:
    yum install wget openssl-devel bzip2-devel expat-devel gdbm-devel readline-devel sqlite-devel
    
    # 下載python3安裝包
    cd ~/Downloads/
    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
    
    # 建立軟連結:
    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. pip(python3)安裝 virtualenv

    # 更新pip
    pip3 install --upgrade pip
    
    # 安裝virtualenv
    pip3 install virtualenv
    
    # 賦予可執行許可權
    chmod 777 /usr/local/python3/lib/python3.6/site-packages/virtualenv.py
    
    # 建立軟鏈
    ln -s /usr/local/python3/lib/python3.6/site-packages/virtualenv.py /usr/bin/virtualenv
    
  3. 使用virtualenv建立python3的虛擬環境

    # 切換到使用者目錄下
    cd ~
    
    # 建立虛擬環境資料夾
    mkdir test_venv
    cd test_venv
    
    # 建立名稱為venv的虛擬環境
    virtualenv -p /usr/bin/python3 venv
    

    virtualenv -p /usr/bin/python3 venv 輸出結果:
    在這裡插入圖片描述

  4. 進入虛擬環境,在virtualenv中用pip3安裝django和uwsgi

    # 進入之前建立好的虛擬環境目錄
    cd ~/test_venv
    
    # 啟用虛擬環境
    source venv/bin/activate
    
    # 安裝Django與uwsgi 
    # 這裡安裝Django2.0的版本,Django高版本會有SQL版本報錯
    # 高版本SQL報錯解決方案地址https://blog.csdn.net/sunt2018/article/details/90712063
    pip3 install django==2.0 -i https://pypi.tuna.tsinghua.edu.cn/simple
    pip3 install uwsgi -i https://pypi.tuna.tsinghua.edu.cn/simple
    
    # 檢視Django是否安裝成功
    pip3 show django 
    
    # 檢視uwsgi是否安裝成功
    pip3 show uwsgi 
    
    # 退出virtualenv虛擬環境
    deactivate
    
  5. 安裝Nginx
    1.使用寶塔Linux皮膚安裝 - - - 後續配置.conf也在寶塔Linux皮膚快捷配置
    2.使用命令列安裝

    # 新增nginx儲存庫
    yum install epel-release
    
    # 安裝nginx
    yum install nginx
    
  6. 開始建立Django專案

    1. 切換到虛擬環境目錄下新建Django專案
      # 切換到工作目錄
      cd ~/test_venv
      
      # 啟用虛擬環境
      source venv/bin/activate
      
      # 建立Django專案,專案取名為hello_django
      django-admin.py startproject hello_django
      
       # 修改settings.py,允許所有HOST的訪問
       ALLOWED_HOSTS = [ ] #修改前
       ALLOWED_HOSTS = ['*'] #修改後
      
      在這裡插入圖片描述
      # 啟動Django的web伺服器
      cd hello_django
      python3 manage.py runserver <自己主機地址IP>:8080 #<自己主機地址IP>填自己主機地址,後面需要指定一個可用的埠(如8080)
      
    2. 在test_django下新建一個應用
      # 建立應用
      python3 manage.py startapp my_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',
      'my_app',
      ]
      
       # vi編輯應用中的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)
      
       # vi編輯專案中的urls.py檔案:
       from django.contrib import admin
       from django.urls import path
       
       from my_app import views as my_views
       
       urlpatterns = [
       path('admin/', admin.site.urls),
       path('hello',hello_views.hello),
       ]
      
    3. 測試
       # 啟動django自帶web伺服器
       cd hello_django
       python3 manage.py runserver <自己主機地址IP>:8080 #<自己主機地址IP>填自己主機地址,後面需要指定一個可用的埠(如8080)
       
       # 用瀏覽器訪問django,訪問方式為
       <自己主機地址IP>:8080/hello
       <自己主機地址IP>:8080/hello?user=123
       
       # 瀏覽器可以看到對應返回資訊,說明django專案新建成功
      
  7. 關聯nginx、uwsgi、django

    1. 開放80,8080埠,允許外網訪問

      # 查詢TCP/UDP的80, 8080埠占用情況
      # 如果返回結果為“no”,則表示該埠尚未開放
      firewall-cmd --query-port=80/tcp
      firewall-cmd --query-port=80/udp
      
      firewall-cmd --query-port=8080/tcp
      firewall-cmd --query-port=8080/udp
      
      # 永久開放 TCP/UDP 的80和8080埠
      firewall-cmd --permanent --zone=public --add-port=80/tcp
      firewall-cmd --permanent --zone=public --add-port=80/udp
      
      firewall-cmd --permanent --zone=public --add-port=8080/tcp
      firewall-cmd --permanent --zone=public --add-port=8080/udp
      
      # 重啟防火牆
      firewall-cmd --reload
      
    2. 開放允許http訪問的埠
      確保外網訪問nginx伺服器的http埠、nginx與uwsgi通訊的socket的埠都在http訪問埠的列表中。

      # 檢視http允許訪問的埠
      semanage port -l | grep http_port_t
      
      # 將需要開放的埠加入到如上埠列表中,例如開放5050埠作為nginx與uwsgi通訊的socket通道
      semanage port -a -t http_port_t  -p tcp 5050
      
    3. 關聯nginx與uwsgi

       # 為django站點建立一個nginx服務的配置檔案
       cd /etc/nginx/conf.d/
       touch django_site.conf
       vi django_site.conf
      
       # 在檔案 django_site.conf 中填入如下內容
      
       server {
           server_name [你的主機IP];            # 暴露給外部訪問的IP地址,根據實際情況改寫成自己主機IP
           listen 80;                           # 暴露給外部訪問的埠,確保埠在http訪問和防火牆訪問的允許列表中
           location / {
               include uwsgi_params;
               uwsgi_pass 127.0.0.1:5050;      # nginx與uwsgi通訊用的socket介面,確保埠在http訪問埠的列表中
           }
       }
       # 如遇到nginx服務啟動失敗,請檢查mysite_django.conf中指定的埠是否被佔用
      
    4. 關聯uwsgi與django

      # 建立uwsgi配置檔案
      
      cd ~/test_venv
      touch django_uwsgi.ini
      vi django_uwsgi.ini
      # 在django_uwsgi.ini檔案中填入如下內容
      
      # django_uwsgi.ini
      [uwsgi]
      
      # 與nginx通訊
      socket = 127.0.0.1:5050
      # 讓uwsgi作為單獨的web-server,這裡註釋掉
      # http = 127.0.0.1:5050
      
      # django專案根目錄,  根據實際情況改寫成自己django專案的路徑
      chdir = /home/YourProject/test_venv/hello_django
      
      # 本項指示uwsgi.py檔案的位置,其位於Django工程目錄下有個與工程名同名的子資料夾內(設定方式為:資料夾名.wsgi)
      # module = hello_django
      wsgi-file = hello_django/wsgi.py
      
      processes = 4
      threads = 2
      master = True
      pidfile = uwsgi.pid
      daemonize = uwsgi.log
      
      # 虛擬環境地址
      #virtualenv = /home/YourProject/test_venv/venv
      
    5. Nginx+uwsgi+Django聯調測試

       # 先關閉Nginx與uwsgi服務
       pkill -9 nginx
       pkill -9 uwsgi
       
       # 啟動nginx服務
       service nginx start
       
       # 啟動uwsgi服務
       cd ~/test_venv
       
       # 啟用虛擬環境
       source venv/bin/activate
       uwsgi --ini django_uwsgi.ini
       
       # 用瀏覽器訪問django,訪問方式為
       <自己主機地址IP>:80/hello
       <自己主機地址IP>:80/hello?user=123
       
       # 瀏覽器可以看到對應返回資訊,說明部署成功
      

相關文章