Django Web項目部署流程
大綱
- 環境說明
- 系統環境:Debian10
- 代碼運行環境:Python3.8
- 網絡服務器:Daphne(支持wsgi和asgi協議)
- 反向代理:Nginx
- 進程管理:Supervisor
- 項目說明:http+websocket,需要用到asgi協議
- 部署的流程
- 環境準備
- 代碼git同步
- 應用服務化
- 特殊的說明
一.環境準備
操作系統:Debian10
-
系統自行安裝即可
-
如果是在內網部署,需要更新源:
cd etc/apt/
vi source.list
# 對內容進行修改,註釋原url
# deb http//deb.debian.org/debian/ buster-updates man contrib
# deb-src http://deb,debian.org/debian/ buster-updates man contrib
# 添加內網源url
deb [trusted=yes] http://192.168.68.192/debian/ buster-updates main contrib
deb-src [trusted=yes] http://192.168.68.192/debian buster-updates main contrib
deb [trusted=yes] http://192.168.68.192/debian/ buster main contrib
deb-src [trusted=yes] http://192.168.68.192/debian buster main contrib
deb [trusted=yes] http://192.168.68.192/debian/ buster-backports main contrib
# 然後保存並退出
# 執行源檢查,因爲內網源可能會過期等問題,所以我們跳過源驗證
apt update -o Acquire::Check-Valid-Until=false --allow-insecure-repositories
apt upgrade --allow-unauthenticated
- 檢查ssh是否正常工作
systemctl status sshd
# 配置ssh,使可以root用戶登錄
vi /etc/ssh/sshd_config
將 #PermitRootLogin prohibit-password 更改爲 PermitRootLogin yes
將 #PasswordAuthentication yes 前面的#去掉
# 然後保存文件,重啓ssh即可,systemctl restart sshd
項目運行環境:Python3.8
debian10中自帶了python2.7和python3.7,但是我們的項目需要運行在python3.8的環境中。此處我們使用源碼包編譯的方式安裝python3.8
-
將源碼包
Python-3.8.10.tar
上傳至服務器,可使用scp命令:scp 本地路徑 user@ip:/絕對路徑
-
解壓源碼包:
tar xvf Python-3.8.10.tar
,如果是.tar.gz
結尾的話就用tar zxvf Python-3.8.10.tar
命令解壓,最終會解壓到當前目錄下的Python-3.8.10
目錄中 -
準備環境
# 確保 _ctypes
apt install libffi-dev
# 確保 _sqlite3
apt install libsqlite3-dev
# 確保 _ssl 這一步可以不先執行,出現 No module named '_ssl'再執行也可
根據博客:my.oschina.net/u/4050197/blog/5553562 操作即可
-
進入
Python-3.8.10.tar
目錄,執行./configure --prefix=/opt/python3.8
,prefix
參數用於指定python安裝路徑 -
編譯安裝:
make && make install
-
如果出現找不到gcc或make命令的問題,那麼執行
apt install gcc libc6-dev # 這一步確保gcc
apt install automake autoconf libtool make # 這一步確保安裝make
-
命令行中輸入
python3.8 --version
查看是否安裝成功 -
確認pip已安裝,
apt install python3-pip
,pip3 --version
網絡服務器
Daphne是python的一個庫,在後續代碼部署時安裝即可
反向代理
- 安裝Nginx:
apt install nginx
進程管理
- 安裝Supervisor:
apt install supervisor
二.開始部署
1. 使用git同步代碼
git clone 代碼地址
,如果出現權限問題請檢查用戶,如果出現ssh問題請檢查證書(證書問題請查看其他文檔)- 進入項目,切換至目標分支,
git checkout 分支名
- 配置git,使之不用每次拉代碼都要輸入用戶名和密碼(查閱其他文檔)
2. 準備python虛擬環境
python3.8 -m venv venv
,該命令會在當前目錄下創建一個名爲venv
的目錄,裏面就是python虛擬環境source venv/bin/activate
, 運行該命令後會進入虛擬環境,此時python
命令就能指代python3.8
3. 安裝項目
- 在進入虛擬環境的前提下進入項目目錄,執行
pip install -r requirements.txt
- 安裝項目:
python setup.py develop
- 測試運行:
daphne ly_web_server.asgi:application -b 0.0.0.0 -p 8001
,如果沒報錯即可;ctrl+c
退出
4. 項目服務化
- 配置supervisor
cd etc/supervisor
vi supervisord.conf
查看如下對應信息
[include]
files = /xxx/*.ini
也可以自己設定讀取路徑
[include]
files = /etc/supervisor/supervisord.d/*.ini
- 配置自己的配置,
vi /etc/supervisor/supervisord.d/asgi.ini
[program:daphne]
directory=/home/ly_web_server/ly_web_server # 項目路徑
command=/home/ly_web_server/ly_web_server/venv/bin/daphne -b 0.0.0.0 -p 8000 --proxy-headers ly_web_server.asgi:application
# daphne啓動命令 虛擬環境要指定daphne的絕對路徑
autostart=true
autorestart=true
stdout_logfile=/opt/websocket.log # 運行日誌保存路徑
redirect_stderr=true
- 運行服務,
supervisord -c /etc/supervisor/supervisord.d/asgi.ini
supervisorctl status # 查看啓動狀態
有如下消息說明正常啓動
daphne RUNNING pid 19997, uptime 0:21:53
- 服務管理:
supervisorctl # 進入supervisor環境
supervisorctl reread # 重載配置
supervisorctl update # 更新
supervisorctl start all # 開啓
supervisorctl status # 查看啓動狀態
6. 配置反向代理
nginx配置如下:
upstream channels-backend {
server 0.0.0.0:8000; # dephne配置的web服務地址
}
map $http_upgrade $connection_upgrade{
default upgrade;
"" close;
}
server {
listen 80; # 提供客戶端訪問的端口號
location / {
proxy_pass http://channels-backend;
proxy_http_version 1.1; # 設置websocket網絡協議支持
proxy_set_header Upgrade $http_upgrade; # 設置websocket網絡協議支持
proxy_set_header Connection "upgrade"; # 設置websocket網絡協議支持
proxy_redirect off; # 是否支持重定向
proxy_set_header Host $host; # 服務器本身的ip
proxy_set_header X-Real-IP $remote_addr; # 客戶端的ip
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; # 路由順序
proxy_set_header X-Forwarded-Host $server_name;
}
}
再systemctl restart nginx
或nginx -s reload
即可