1. 程式人生 > 實用技巧 >Django健康打卡系統專案部署

Django健康打卡系統專案部署

前言:前兩次幫大學生部署專案嘛,然後做了一下筆記記錄一下嘛,或許能幫到大家,可以結合我的上一篇來看。本次通過阿里雲伺服器部署專案,主要架構是Django+nginx+uwsgi,採用pycharm將專案上傳到雲端

前言: 登入阿里雲 https://account.aliyun.com/login/login.htm?oauth_callback=https%3A%2F%2Fhomenew.console.aliyun.com%2F

賬號:13030xxx 密碼:xxxxxx

公網ip(ssh連結) 112.124.18.209(可以檢視一下)

登入密碼 xxx

1 進入伺服器

1 進入首頁後 點選雲伺服器

2 找到伺服器

3 檢視伺服器例項資訊,點選更多 密碼/重置例項密碼 ---- 這裡的密碼是你root登入的密碼

4 點選遠端連線,進入伺服器。 遠端密碼 A1B2c3

在輸入了6位遠端連結密碼後,我們選擇登入root使用者,然後輸入root使用者的密碼。

如果忘記root密碼可在控制檯重置密碼,重置完記得重啟雲主機!

成功進入

2 安裝python3.6

一般的linux系統都會預設安裝python2.7,而現在python3已經大行其道,我們的專案也是使用python3的,所以我們來給雲主機安裝python3.6。

  • 進入到終端伺服器中,我們先檢查一下雲主機目前的python版本,使用命令:python --version
    ,檢視:

提醒千萬不要將python2刪除,因為有些系統功能依賴python2,所以我們只要新增python3.6就可以

安裝:

又經歷了一次踩坑,始終裝不上python環境,最後查閱各種資料,成功了

1 加裝含有python3.6.4的PPA

1 apt-get install software-properties-common

1.1、sudo add-apt-repository ppa:deadsnakes/ppa

更新系統軟體包並安裝python3.6.4

1、sudo apt-get update
2、sudo apt-get install python3.6

驗證python3.6.4安裝成功

1、python3.6 -V

修改ubuntu16.04系統python命令預設的python版本

1、列出系統當前存在的python版本及python預設的版本

ls -l /usr/bin | grep python

從上圖我們可以發現python命令實際上是到python2.7的軟連結

2、刪除原有python軟連線

sudo rm /usr/bin/python

3、建立python到python3.6.4新的軟連結

sudo ln -s /usr/bin/python3.6 /usr/bin/python

4、測試系統預設python命令已經指向python3.6.4
python -V

安裝Nginx

Nginx 是網站負載均衡,後期要結合網站使用

  • nginx 是一個開源的高效能的 HTTP 伺服器和反向代理:

  • 作為 web 伺服器,它處理靜態檔案和索引檔案效果非常高;

  • 強大的反向代理和負載均衡功能,平衡叢集中各個伺服器的負載壓力應用

1 安裝Nginx

sudo apt-get install nginx

2 執行Nginx 預設埠80

nginx

3 執行檢視狀態

curl 112.124.18.209:80

執行成功:

3 部署專案

首先,部署專案有兩種,第一種是通過pycharm直譯器來進行將專案上傳到 雲端中。 第二種是通過ssh 遠端上傳。這裡兩種都會講到,首選的話推薦第一種。

一 使用 pycharm 專案部署

1.上傳專案

  • 首先我們在雲伺服器上建立一個目錄,用於放置專案檔案,使用命令mkdir /data/mysite 建立專案,在實際工作中我們會將專案相關的東西放在/data`
    目錄中。

注意只有Pycharm專業版才具有部署的功能,社群版(無需破解)是沒有此功能。

新增一個配置,名字隨意

所有都配置好了之後,我們來上傳專案

成功上傳

進入伺服器檢視

稍微總結上面的點,以上就是通過pycharm 把專案部署到雲伺服器中,但是我們現在還不能夠執行,因為還需要修改下Django專案中配置。然後把修改的檔案在通過剛才的方式上傳,最終執行起來。

二、下載專案庫

  • 安裝Django2.2

pip3 install Django==2.2

  • 安裝 django-simple-captcha

pip3 install django-simple-captcha

三 Django專案部署配置

1 settings.py 配置

settings.py 裡面配置需要改動的地方

DEBUG = False  # 改為False 

# 填寫自己的域名或ip 或者直接*
ALLOWED_HOSTS = ["127.0.0.1", ”112.124.18.209“]
# 或者下面操作,接收全部 ------ 推薦這種
ALLOWED_HOSTS = ["*"]

# 還有郵箱,因為在生產環境中(上線中)郵箱需要改埠
# 配置傳送郵件的基本資訊
EMAIL_BACKEND = 'django.core.mail.backends.smtp.EmailBackend'
EMAIL_HOST = 'smtp.qq.com'
EMAIL_PORT = 587  # 埠要改,根據阿里雲官方解釋為:因伺服器的25埠預設封閉,需要使用SSL加密埠(通常是465和587)來對外發信,呼叫的郵箱伺服器需要支援SSL加密

############################################
#### 這個地方,我刪掉了,我之前是使用的我的郵箱,您可以加上您的郵箱,並
#### 開啟您郵箱的smtp服務,然後獲得授權碼
# 網站郵件的傳送方
EMAIL_HOST_USER = ''
# 網站郵件傳送方配置的授權碼
EMAIL_HOST_PASSWORD = ''

EMAIL_USE_TLS = True  # 傳送的模式

點選上傳到雲端,然後就可以同步了

此時我們可以通過Python啟動我們的專案了(確保安裝所需庫),還需注意的點是,去阿里雲把埠開放(安全組)才能執行起來

python3 manage.py runserver 0.0.0.0:8000

2 雲伺服器中安裝uwsgi

概念:uWSGI 是一個 Web 伺服器,它實現了 WSGI 協議、uwsgi、http 等協議。Nginx 中 HttpUwsgiModule 的作用是與 uWSGI 伺服器進行交換。 簡單來說:uwsgi 是處理 web應用中的動態資源型別(資料庫的資源),uwsgi 會根據自己的uwsgi和WSGI協議 到對應的Django框架,Django框架下應用進行邏輯處理,然後將返回值進行傳送到uwsgi伺服器,然後uwsgi伺服器傳送給nginx伺服器,最後nginx伺服器將返回值給瀏覽器進行渲染展示給使用者。

安裝:

sudo apt-get install uwsgi

新增一個檔案test.py 到 manage.py 同級目錄下 測試uwsgi是否安裝成功:

# 測試py檔案
# test.py
def application(env, start_response):
    start_response('200 OK', [('Content-Type','text/html')])
    return [b"Hello World"] # python3
    #return ["Hello World"] # python2

執行uwsgi測試:

uwsgi --http :8001 --wsgi-file test.py
# 顯示 [uWSGI] getting INI configuration from uwsgi.ini 表示執行uwsgi成功

檢視確認uwsgi程序是否啟動成功:

ps -ef|grep uwsgi

注意: 端口占用使用:

lsof -i :8001   

殺掉佔用埠

sudo	kill -9 pid # pid 埠號

測試uwsgi執行是否正常:

curl 127.0.0.1:8001    # curl 是一種命令列工具,作用是發出網路請求,然後獲取資料,顯示在"標準輸出"(stdout)上面

在manage同級目錄 中建立一個uwsgi.ini 檔案,用來在雲伺服器執行 的uwsgi.ini

uswgi檔案如下

[uwsgi]
;使用nginx連線時使用,Django程式所在伺服器地址
;選擇內網IP和埠
;http = :8001  # -- 這裡是 單獨uwsgi 執行開啟的
socket = 0.0.0.0:8001   # ----這裡是與nginx伺服器相通進行寫的

; 專案所在根目錄,與manage.py同級, 查詢自己存放的路徑, pwd (-----要修改為自己的路徑-----)
chdir = /data/mysite

; 環境所在目錄(-----要修改為自己的路徑-----)  使用which 'python3'
home = /usr/
PYTHONHOME = /usr/bin/

; 主應用中的wsgi檔案(-----要修改為自己的路徑-----)
wsgi-file = mysite/wsgi.py

; 啟動一個master程序,來管理其餘的子程序
master = True

# 程序
processes = 4
# 執行緒
threads = 2

; 儲存主程序的pid,用來控制uwsgi服務
pidfile = uwsgi.pid

; 設定後臺執行,儲存日誌
daemonize = uwsgi.log

--enable-threads

啟動uwsgi

# 啟動專案 uwsgi --ini uwsgi.ini
# uwsgi --stop/reload xxx.pid  停止/重啟uwsgi
# ps -ef|grep uwsgi 檢視確認是否uwsgi啟動
3 雲伺服器中安裝nginx

概念:nginx是一個HTTP伺服器和反向代理伺服器。是實現網站的負載均衡,減輕伺服器壓力, nginx處理靜態檔案(html、css、js)索引效率非常高。通常nginx是結合uwsgi一起使用的。

sudo apt-get update  #  更新
sudo apt-get nginx

2 啟動nginx 預設開啟的是80埠

# 啟動
nginx
# 停止
nginx -s stop
# 重啟
nginx -s reload

可以檢視下nginx執行的程序

ps -ef|grep uwsgi

ps -ef  # 檢視的是伺服器中所有執行的程序

kill 程序

sudo	kill -9 pid # pid 埠號

可以通過瀏覽器訪問下 或者 使用 curl -I 112.124.18.209:80 顯示 200 OK 表示成功開啟

瀏覽器顯示的是:

3 查詢nginx路徑

nginx -t   # 騰訊雲的同學要加sudo
# 第一個檔案路徑是等會我們要去新增配置的檔案
# nginx: the configuration file /etc/nginx/nginx.conf syntax is ok 
# nginx: configuration file /etc/nginx/nginx.conf test is successful

修改nginx.conf 檔案 /etc/nginx/nginx.conf 使用sudo vim

nginx.conf配置檔案部分截圖內容:

注意重要的一點,這裡部分截圖的最後有兩行檔案

include /etc/nginx/conf.d/*.conf;

include /etc/nginx/sites-enabled/*; 

先說下原因: 因為nginx中有個預設配置檔案default, 裡面的預設監聽埠是80埠,那麼我們需要在阿里雲配置的埠也是80埠,此時就會出現上我們自身配置的80埠是起衝突的,也就是說最終我們配置好了nginx資訊,訪問的時候還是nginx最初的頁面 welcome to nginx 。 所以我們需要刪除掉nginx預設的配置檔案,讓nginx訪問我們配置的埠資訊。

步驟:

步驟:

cd 進入 /etc/nginx/sites-enabled/ 路徑下能夠看到有個default檔案, 通過cat default 能夠看到預設配置資訊, 我們需要做的就是 刪除 或者 對檔案進行移動到上一層, mv deault ../ 此時nginx就不會載入預設的配置了,通過curl 122.51.67.247:80 是不會訪問最初的配置了,而是顯示的拒絕連線的了。

現在我們要做的就是載入Nginx 配置資訊,在上面截圖 include /etc/nginx/sites-enabled/*; 下新增如下資訊,路徑你需要自己改成自己專案存放的路徑。

步驟:

  • nginx -t 檢視檔案路徑

2 vim 編輯 vim /etc/nginx/nginx.conf (不行就加sudo) 進行新增配置

server {
            # 監聽埠
            listen      80;

            # 伺服器域名或者ip地址 -- 沒有就填localhost
            server_name localhost;

            # 編碼
            charset     utf-8;

            # 靜態檔案 
            location /static {
                alias  /data/mysite/static/;
           }

           # 主目錄
           location / {
           # 此處為uwsgi執行的ip地址和埠號
           uwsgi_pass  112.124.18.209:8001;  # 這裡請讀者修改自己的ip地址
           include uwsgi_params;
         }
}

3 配置好nginx資訊後 通過 nginx -t 檢測配置是否正確

# 測試nginx配置檔案是否正確
sudo nginx -t

# 如列印以下內容,表示配置沒有問題
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful
  
# 這時我們需要重新載入下nginx配置
sudo nginx -s reload 

4 然後訪問 ip 地址就可以成功執行專案了

四 、後期維護

後面我們需要改寫程式碼的時候,肯定要上傳到伺服器。那麼這裡選擇的是 pycahrm 直譯器進行上傳

粟子:

1 結合 2步驟 pycharm 專案上傳到阿里雲伺服器截圖

2 後期我們改動程式碼

栗子:

然後我們在伺服器中,需要重啟nginx 。

如果網站中還沒有看到我們改動程式碼後的效果的話

進入專案目錄 cd /data/mytest

重啟uwsgi之後,

uwsgi -- reload uwsgi.pid

再次重啟下nginx 。

nginx -s

最近訪問網站就可以看到效果了。

五、額外篇 -- 從伺服器下載專案到本地

以上的操作,我是將django專案 上傳到了到伺服器中,然後你的話就不需要再次上傳到伺服器,避免衝突,你要做的就是,從伺服器中下載專案到我們的本地中,然後後期你要改程式碼的話那就直接上傳就行(看四、後期維護)

步驟一:pycharm 建立一個專案,用於存放我們從伺服器下載下來的檔案

第二、pycharm連線伺服器 ip 112.124.18.209 密碼 Python123

起個名字

配置資訊

將專案下載到我們的本地

下載成功