cmd命令連接資料庫「django數據遷移命令」

我們的相冊雖然還有不完善的地方,但是沒關係,越早把它部署到互聯網上,才能越早發現線上特有的問題,讓產品在迭代中成長。

注意:以下流程經過筆者驗證,能夠保證順利部署項目。如果你不知道每一步都是幹嘛的,那麼請嚴格按照文章的流程順序操作。

配置伺服器

要架設網站,首先你要有一台連接到互聯網的伺服器。國內比較出名的雲伺服器有阿里雲騰訊雲百度雲,三家各有優劣,大家自行了解比較,並選擇自己適合的購買。

和前章一樣,筆者用的是阿里雲全家桶,所以教程會以阿里雲ECS作為例子講解。新用戶通過此阿里雲ECS推廣鏈接註冊有折扣和現金券;學生有優惠伺服器每月9.5元,很划算。

阿里雲伺服器購買頁面變動頻繁,如果圖中展示的步驟和你購買時的不一樣也沒關係,核心步驟都是差不多,稍微找一下就OK了。

首先進入阿里雲ECS的購買頁面

Django搭建網路相冊:部署網站

圖片字很小,看不清楚的同學將就一下放大看吧。

挑重點說一下:

  • 實例從入門級里選一款便宜的(比如2核2G的),以後流量高了再升級也不遲(土豪請無視這條)。
  • 鏡像選擇 Ubuntu 。其他 Linux 版本也是可以的,根據你的使用習慣確定。
  • 系統盤先選個 20G,夠你用一陣了。數據盤暫時用不上,不用勾選。

點擊下一步,來到網路和安全組頁面:

Django搭建網路相冊:部署網站

這頁默認就行了,公網帶寬選最低的 1M ,初期夠用了。

如果有詢問是否購買公網 IP 的選項,記得勾上。沒公網 IP 就沒辦法連接到互聯網了。

點擊下一步,到系統配置頁面:

Django搭建網路相冊:部署網站

為了後面遠程連接伺服器更簡單,這裡勾選自定義密碼,也就是輸入用戶/密碼的認證方式了。實際上秘鑰對的認證方式更安全些,以後摸熟了再改回來吧。

點擊下一步,到分組設置頁面。這個頁面全部默認設置就好了。點擊下一步,確認訂單無誤後,就可以付款啦。

付款成功後,通過控制台就可以看到已購買的雲伺服器了:

Django搭建網路相冊:部署網站

這裡有時候會有黃字提醒你伺服器的網路埠沒開,點擊黃字鏈接進入安全組規則選項卡開通一下:

Django搭建網路相冊:部署網站

把 22(遠程連接埠)、443(HTTPS埠)、80(HTTP埠)都打開,3389埠順便也開了。

這一步很重要,如果不打開後續會始終連接不上站點。如果沒有黃字提醒,那就一定要到安全組中確認埠已打開。

至此伺服器的購買、配置就完成啦。稍等幾分鐘後等待初始化完成,就可以得到伺服器的公網 IP 地址,筆者的是 47.104.227.185 ,後面會用到。

準備工作

在正式部署前,還有些準備工作需要做。

修改後端配置

首先 Django 的配置要更改為線上狀態:

# /album/settings.py

...

# 修改項。關閉調試模式
# 關閉後 django 不再處理靜態資源
# 也不再提供錯誤提示頁面
DEBUG = False

# 修改項。允許所有的IP訪問網路服務
ALLOWED_HOSTS = ['*']

# 新增項。靜態文件收集目錄
STATIC_ROOT = os.path.join(BASE_DIR, 'collected_static')

然後在虛擬環境中執行:

(env)> pip freeze > requirements.txt

將後端所有的依賴庫記錄到 requirements.txt 中。

代碼上傳Github

將項目代碼拷貝到雲伺服器的方式有幾種。比較方便的是上傳到 Github ,再由 Github 將項目代碼下載到伺服器。因此你需要把項目上傳到 Github。

Github 經常會速度很慢或無法登錄。這時候你也可以嘗試用國內的 Gitee,或者直接點對點本地上傳伺服器。

如何上傳這裡就不細講了,請自行學習 Git 相關知識,註冊 Github 賬號等。

需要提醒的是,所有依賴的庫都不需要上傳,比如 env 目錄,它們可以在伺服器中很方便地安裝。

這就是前面生成的 requirements.txt 的作用。

接下來就是正式部署了。

遠程連接

部署的第一步就是想辦法連接到雲伺服器上去,否則一切都免談。鑒於項目是在 Windows 環境開發的,推薦用 XShell 來作為遠程連接的工具。XShell 有學校及家庭版本,填一下姓名和郵箱就可以免費使用了。

XShell 怎麼使用就不贅述了,以讀者的聰明才智,稍微查閱一下就明白了。

使用相當簡單,基本就是把主機 IP、埠號(22)以及登錄驗證填好就能連接了。

連接成功後,就能在 XShell 窗口中看到阿里雲的歡迎字樣了:

Welcome to Ubuntu 20.04.2 LTS (GNU/Linux 5.4.0-77-generic x86_64)

 * Documentation:  https://help.ubuntu.com
 * Management:     https://landscape.canonical.com
 * Support:        https://ubuntu.com/advantage

Welcome to Alibaba Cloud Elastic Compute Service !

root@dusai:~$ 

root@dusai:~$是命令提示符(root 是用戶名,dusai 是主機名),輸入命令時不需要你輸入這個。

本文後面把 root@dusai:字元省略掉,方便大家閱讀。

安裝項目及依賴

接下來的部署指令均在伺服器中執行,也就是在 XShell 中操作,別搞混了。

首先更新系統庫:

~$ apt-get update
~$ apt-get upgrade

部署到正式環境時,後端伺服器就不能用 Django 自帶的開發伺服器了(性能低下),而是改用 Nginx + Gunicorn + Django 配合提供網路服務:

  • 客戶端發來 http 請求,Nginx 作為直接對外的介面,對 http 請求進行分析;
  • 如果是靜態資源請求,則由Nginx自己處理(效率極高);
  • 如果是動態資源請求,則把它轉發給 Gunicorn 進行預處理後,再轉發給 Django,最終完成資源的返回。

除此之外,還要確保 Python3 、Git 和 virtualenv 也都正確安裝。

順序執行以下指令:

~$ apt-get install nginx
~$ apt-get install python3.8
~$ apt-get install python3-pip
~$ apt-get install git
~$ pip3 install virtualenv

均成功後,創建並跳轉到項目目錄:

~$ mkdir -p /home/sites/album
~$ cd /home/sites/album

# 進入的路徑如下所示
/home/sites/album$

接下來就可以從 Github 下載項目了:

# 以教程倉庫為例 django-vue-tutorial
../album$ git clone https://github.com/stacklens/django-album-tutorial.git

這裡就以教程的倉庫為例,讀者用自己項目時一定要注意路徑名稱正確。

如果你是從非公開項目下載,用戶名密碼的認證方式 Github 已經準備廢棄了。如遇報錯請以密鑰認證的形式下載。

下載好項目後,在同級路徑創建並進入虛擬環境:

../album$ virtualenv --python=3.8 venv
../album$ source venv/bin/activate

# 看到 (venv) 開頭就對了
(venv) ../album$ 

進入項目目錄,安裝依賴、收集靜態資源並遷移資料庫:

# 這裡的 django-album-tutorial 路徑是從 Github 拉取下來的項目路徑
# 記得改成你自己的
(venv) ../album$ cd django-album-tutorial

(venv) ../django-album-tutorial$ pip3 install -r requirements.txt
(venv) ../django-album-tutorial$ python3 manage.py collectstatic
(venv) ../django-album-tutorial$ python3 manage.py migrate

最後啟動 nginx:

# 為了閱讀方便,後續命令行均省略 $ 前面的路徑部分
(venv) ~$ service nginx start

在瀏覽器中訪問你的雲伺服器的公網 IP ,看看效果:

Django搭建網路相冊:部署網站

看到 Nginx 的歡迎頁面則成功一半了。繼續。

配置nginx

Nginx 歡迎界面這個默認配置顯然是不能用的,所以需要重新寫 Nginx 的配置文件。
/etc/nginx/sites-available 目錄是定義 Nginx 可用配置的地方。輸入指令創建配置文件 myblog 並打開 vim 編輯器

(venv) ~$ vim /etc/nginx/sites-available/album

關於 vim 編輯器如何使用也不多說了,這裡只說兩個最基本的操作:

  • 按 i 鍵切換到編輯模式,這時候才可以進行輸入、刪除、修改等操作
  • 按 Ctrl + c 退回到命令模式,然後輸入 :wq + Enter 保存文件修改並退回到伺服器命令行

回到正題,用 vim 在 album 文件中寫入:

server {
  charset utf-8;
  listen 80;
  server_name 47.104.227.185;  # 改成你的 IP

  location /static {
    # 這裡的 django-album-tutorial 路徑是從 Github 拉取下來的項目路徑
    # 記得改成你自己的
    alias /home/sites/album/django-album-tutorial/collected_static;
  }

  location /media {
    # 這裡的 django-album-tutorial 路徑是從 Github 拉取下來的項目路徑
    # 記得改成你自己的
    alias /home/sites/album/django-album-tutorial/media;
  }

  location / {
    proxy_set_header Host $host;
    proxy_pass http://unix:/tmp/47.104.227.185.socket;  # 改成你的 IP
  }
}

此配置會監聽 80 埠(通常 http 請求的埠),監聽的 IP 地址寫你自己的伺服器公網 IP

配置中有兩個核心規則:

  • 如果請求靜態資源,則直接轉發到對應目錄中尋找
  • 其他請求則轉發給 Gunicorn(再轉交給 Django)

如果你已經申請好域名了,就把配置中有 IP 的地方都修改為域名,比如:server_name www.dusaiphoto.com。

寫好後就退出 vim 編輯器,回到命令行。因為我們寫的只是 Nginx 的可用配置,所以還需要把這個配置文件鏈接到在用配置上去:

(venv) ~$ ln -s /etc/nginx/sites-available/album /etc/nginx/sites-enabled

測試下 nginx 配置是否正常:

(venv) ~$ nginx -t
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful

至此 Nginx 就配置好了,接下來搞定 Gunicorn。

有的讀者無論怎麼配置都只能看到 Nginx 歡迎頁面,有可能是 sites-enabled 目錄中的 default 文件覆蓋了你寫的配置。將 default 文件刪掉就可以正常代理自己的配置文件了。

Gunicorn及測試

Nginx 搞定後就只剩 Gunicorn 了。

下面的三條命令分別是安裝 Gunicorn 、 重啟 Nginx 和 啟動 Gunicorn:

(venv) ~$ pip3 install gunicorn
(venv) ~$ service nginx restart
# 將 IP 改為你的公網 IP
# .wsgi 前面為 Django 配置文件所在的目錄名
(venv) ~$ gunicorn --bind unix:/tmp/47.104.227.185.socket album.wsgi:application

# Gunicorn 成功啟動後命令行提示如下
[2021-07-29 15:09:22 +0800] [11945] [INFO] Starting gunicorn 20.1.0
[2021-07-29 15:09:22 +0800] [11945] [INFO] Listening at: unix:/tmp/47.104.227.185.socket (11945)
[2021-07-29 15:09:22 +0800] [11945] [INFO] Using worker: sync
[2021-07-29 15:09:22 +0800] [11947] [INFO] Booting worker with pid: 11947

Gunicorn 就啟動成功了。(注意啟動時命令行所在的路徑)

接下來用瀏覽器訪問試試:

Django搭建網路相冊:部署網站

大功告成,撒花慶祝!

此時你就可以對比本地存儲和 OSS 存儲的巨大鴻溝了。

收尾工作

後期運維

你的網站是需要不斷更新優化代碼的。每次修改代碼後,更新到伺服器上也很簡單。在虛擬環境中並進入項目目錄,依次(collectstatic 和 migrate 是可選的)執行以下命令:

git pull

python3 manage.py collectstatic
python3 manage.py migrate

# 重啟 gunicorn
pkill gunicorn
gunicorn --bind unix:/tmp/47.104.227.185.socket my_blog.wsgi:application

加上 cd 更改目錄的指令,部署過程有十幾條指令,手動輸入也太麻煩了。簡單粗暴的辦法是利用 XShell 的宏,把部署指令寫成順序執行的腳本,點幾個按鈕就完成了,非常方便。

更高級的做法是在伺服器上編寫自動化部署的腳本,這個就讀者以後慢慢研究吧。

如果你更改了 Nginx 的配置文件,還需要重啟 Nginx 服務:

service nginx restart

域名及優化

相對部署來說,域名配置就很容易了,各家雲服務商都有此業務。

有了域名之後要改的地方:

  • Nginx 中與 IP/域名 有關的位置
  • Gunicorn 中與 IP/域名 有關的位置

域名搞定之後,接著就可以著手考慮把網站升級為 https 版本了。

最後,在開發時我們往 settings.py 中寫入如 SECRET_KEY 、郵箱密碼等各種敏感信息,部署時千萬不要直接上傳到公開倉庫,而是把這些信息寫到伺服器本地,然後在 settings.py 中讀取。

進程託管

部署過程中還有個新手經常碰到的問題,就是當 SSH 終端一關閉,Web 服務也一起被關閉了,導致網站無法連接。這個問題在 @frostming 的文章 《Web 服務的進程託管》 中用了三種常見方法解決了,並且還實現了異常重啟和開機自啟動。有類似疑惑的同學可以前往圍觀。

總結

部署可以說是入門者最大的難關了,也是檢驗成果、獲取成就感的關鍵一步。

多查資料,要相信你遇到的問題別人早就遇到過了。

路漫漫其修遠兮,吾將上下而求索。

原創文章,作者:投稿專員,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/274982.html

(0)
打賞 微信掃一掃 微信掃一掃 支付寶掃一掃 支付寶掃一掃
投稿專員的頭像投稿專員
上一篇 2024-12-17 14:18
下一篇 2024-12-17 14:18

相關推薦

發表回復

登錄後才能評論