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

上次記錄了雲服務器上運行django的過程,成功打開HelloWorld界面,但是這樣每次運行都需要使用python3 manage.py runserver命令,不能在後臺運行,而且加載頁面速度較慢。因此本次記錄新增兩個服務的部署,即nginx + uwsgi
前兩次記錄:
【網站搭建】用阿里雲服務器搭建個人網站
【網站搭建】雲服務器上運行django




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

部署過程如下 :

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,啓動成功:
    在這裏插入圖片描述

(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是其中的一張圖片)

<img ALT="Altium" src="../static/pictures/plan.jpg">

在這裏插入圖片描述

3 總結

python web運行環境的部署並不複雜,重點注意nginx.confsetting.py文件的配置,大部分錯誤都是因爲這兩個文件配置錯誤。錯誤原因一般是文件路徑錯誤,所以在配置環境時,一定要時刻關注項目文件結構。
後續會記錄一些關於數據庫配置的實例,比如 “用戶登錄註冊”、“留言板”、“數據可視化”、“信息管理” 等等。用python實現這些demo,將會十分簡單。

以上就是部署django環境的全部記錄了。喜歡搞事情、DIY、學技術的同學可以關注下面這個的公衆號,瞭解更多有更趣的項目。
在這裏插入圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章