天天看點

【網站搭建】完整部署django+uwsgi+nginx

上次記錄了雲伺服器上運作django的過程,成功打開HelloWorld界面,但是這樣每次運作都需要使用python3 manage.py runserver指令,不能在背景運作,而且加載頁面速度較慢。是以本次記錄新增兩個服務的部署,即nginx + uwsgi。

前兩次記錄:

【網站搭建】用阿裡雲伺服器搭建個人網站

【網站搭建】雲伺服器上運作django

本次記錄對nginx 和 uwsgi沒有過多介紹,想要了解其概念的可閱讀另一個博友的文章 nginx與uwsgi,uwsgi的應用

文章目錄

    • 部署過程如下 :
      • 1 準備工作:
      • 2 詳細過程:
        • (1)uwsgi配置
        • (2)nginx的配置
        • (3)啟動
        • (4)執行個體
        • (5) 顯示靜态檔案的方式
      • 3 總結

部署過程如下 :

1 準備工作:

注意:上次已經部署的django【網站搭建】雲伺服器上運作django

(1) 啟動阿裡雲 “輕量應用伺服器”

(2) 打開阿裡雲控制台開啟遠端連接配接

(3) 打開寶塔面闆

2 詳細過程:

(1)uwsgi配置

  • 安裝uwsgi
pip3 install uwsgi
           
  • 建立軟連結
ln -s /usr/local/python3/bin/uwsgi /usr/bin/uwsgi
           

如果提示連結存在,可跳過,或者改變連結名稱,比如改為myuwsgi。相應的後面調用指令時也要用myuwsgi。

  • 配置xml檔案

    在項目檔案夾下建立一個socket.xml檔案,輸入以下代碼:

<uwsgi>
    <socket>:9090</socket>
    <chdir>/www/myweb/HelloWorld</chdir>
    <module>HelloWorld.wsgi</module><!--項目中的wsgi檔案-->
    <processes>4</processes> <!-- 程序數 --> 
    <daemonize>uwsgi.log</daemonize>
</uwsgi>
           

(2)nginx的配置

打開nginx.conf檔案(路徑為/www/server/nginx/conf/nginx.conf)

注釋掉server裡面的内容,加入以下代碼(需要提前建立一個static檔案夾):

listen       80;
        server_name 115.16.72.213; #IP位址
        charset utf-8;
        access_log off;
        
        location /static {
        	'''要與之前django的setting.py中添加的static靜态檔案轉移目錄一緻'''
            alias /www/HelloWorld/static/; 
        }
        
        location / {
        	'''端口與原來的uwsgi中設定的端口一緻'''
            uwsgi_pass  115.16.72.213:9090; 
            include     /www/server/nginx/conf/uwsgi_params;
        }
           

(3)啟動

指令行中依次輸入以下指令:

killall -9 uwsgi #結束所有uwsgi
    uwsgi -x socket.xml #啟動uwsgi
    service nginx reload #重新開機nginx
           
  • 浏覽器中輸入IP位址,不需要加端口,比如直接輸入101.16.94.224,啟動成功:
    【網站搭建】完整部署django+uwsgi+nginx

(4)執行個體

進入項目檔案夾cd HelloWorld

  • 建立django app
django-admin startapp myapp
           
  • 建立templates檔案夾
  • 向templates檔案夾中上傳用于測試的html檔案 test.html
  • 配置setting.py檔案

    ①添加app

    找到INSTALLED_APPS,在後面加入’myapp’,

INSTALLED_APPS = [
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    'myapp',
]
           

②設定templates

注意’DIRS’

TEMPLATES = [
    {
        'BACKEND': 'django.template.backends.django.DjangoTemplates',
        'DIRS': [os.path.join(BASE_DIR,"templates")],
        'APP_DIRS': True,
        'OPTIONS': {
            'context_processors': [
                'django.template.context_processors.debug',
                'django.template.context_processors.request',
                'django.contrib.auth.context_processors.auth',
                'django.contrib.messages.context_processors.messages',
            ],
        },
    },
]
           
  • 配置myapp中的views.py檔案
def test(request):
	return render(request, "test.html")
           
  • 配置HelloWorld中的urls.py檔案
from django.contrib import admin
from django.urls import path
from myapp import views #導入views

urlpatterns = [
    path('admin/', admin.site.urls),
    path('test/', views.test, name='test'),
]
           
  • 儲存,然後重新開機uwsgi和nginx
killall -9 uwsgi #結束
    uwsgi -x socket.xml #啟動
    service nginx reload #重新開機
           
  • 在浏覽器中輸入 “IP位址/test" 即可打開test.html檔案

    如 102.19.42.221/test

(5) 顯示靜态檔案的方式

将靜态檔案(圖檔、視訊等)放在static檔案夾下面,html檔案中顯示圖檔的路徑需要“…/static/"

比如要顯示圖檔

(pictures為static下建立的檔案夾,plan.jpg是其中的一張圖檔)

【網站搭建】完整部署django+uwsgi+nginx

3 總結

python web運作環境的部署并不複雜,重點注意nginx.conf和setting.py檔案的配置,大部分錯誤都是因為這兩個檔案配置錯誤。錯誤原因一般是檔案路徑錯誤,是以在配置環境時,一定要時刻關注項目檔案結構。

後續會記錄一些關于資料庫配置的執行個體,比如 “使用者登入注冊”、“留言闆”、“資料可視化”、“資訊管理” 等等。用python實作這些demo,将會十分簡單。

繼續閱讀