
靜態文件要這樣訪問 專業!!

上線之前要把 配置這樣修改
HOST="192.167.12.42" #改成在公網ip

DEBUG=false
所有人能訪問
測試版的 本地測試,不是上線版的


安裝python 3.6?? (看以前的筆記)

wsgiref的性能要差一點
第二個版本要裝uwsgi





UWSGI 缺點:處理I靜態文件有問題
當訪問量大的時候,需要有負載均衡
這個時候ngxj
能夠處理靜態文件
-- 做反向代理
--做負載均衡(處理多個接口)(LVS,hapropx也可以做負載均衡)

這個時候 可以這樣寫 因為他們是內部傳遞的 所以可以用socket來傳送數據


UWSgi中加上 &就可以后台運行
然后ngix做負載均衡 如下

uwsgi中的processes=1 這個數字跟cup核數有關, 能同時開啟的進程數



小白的項目部署
項目開發完畢后,需要將代碼放到服務器上,這樣用戶才能訪問。接下來我們一步一步來進行一波部署操作。
1. 簡單粗暴
項目開發完畢,在部署之前需要再配置文件中將 ALLOWED_HOSTS配置設置為:當前服務器IP或*,如:
|
1
|
ALLOWED_HOSTS
=
[
"*"
,]
|
示例源碼:猛擊下載
然后將源碼上傳至服務器指定目錄,如:/data/ ,然后執行命令來運行:
注: 上傳命令: scp /Users/wupeiqi/PycharmProjects/oldboy-1.zip root@192.168.10.33:/data/
解壓,進入目錄並執行以下命令:
|
1
|
python3 mange.py runserver
0.0
.
0.0
:
8000
|

2. uwsgi
Django框架運行依賴wsgi(本質提供socket服務端),眾多模塊實現了wsgi規范,而django框架中默認使用wsigiref模塊來實現,他由於性能比較低,所以用於本地開發和測試,而線上部署時需要使用uwsgi來代替。
a. 在服務器上安裝uwsgi
|
1
|
pip3 install uwsgi
|
需要先安裝:yum install python-devel
b. 單文件使用uwsgi
在服務器上編寫一個Python文件:
|
1
2
3
|
def
application(env, start_response):
start_response(
'200 OK'
, [(
'Content-Type'
,
'text/html'
)])
return
[b
"Hello World"
]
|
在服務器上執行命令啟動Web服務器:
|
1
2
3
|
uwsgi
-
-
http :
9001
-
-
wsgi
-
file
app.py
# 或
uwsgi
-
-
http :
9002
-
-
wsgi
-
file
foobar.py
-
-
master
-
-
processes
4
|
PS: flask需要再加 --callable app
訪問查看即可:

c. django程序使用uwsgi
將開發好的django程序拷貝到服務器目錄【同示例一】,即:/data/oldboy ,執行命令啟動:
|
1
|
uwsgi
-
-
http :
9005
-
-
chdir
/
data
/
oldboy
/
-
-
wsgi
-
file
oldboy
/
wsgi.py
-
-
master
-
-
processes
4
|
1. 創建配置文件 oldboy.ini [uwsgi] http = 0.0.0.0:9005 chdir = /data/oldboy/ wsgi-file = oldboy/wsgi.py processes = 4 static-map = /static=/data/oldboy/allstatic 2. 根據配置文件啟動uwsgi uwsigi --ini oldboy.ini
PS: 如果有虛擬環境可以添加上虛擬環境路徑配置: virtualenv = /env/oldboy_venv
此時訪問時,會出現找不到靜態文件的錯誤。
想要uwsgi處理靜態文件,需要先將django的靜態文件收集到制定目錄,然后再設置對應關系。
- 收集django靜態文件
- 在django的配置文件中添加:STATIC_ROOT = os.path.join(BASE_DIR,"allstatic")
- 執行 python3 manage.py collectstatic 命令,至此django項目所有相關靜態文件都會收集到制定目錄。
- 設置uwsgi靜態文件對應關系
- uwsgi --http :9005 --chdir /data/oldboy/ --wsgi-file oldboy/wsgi.py --master --processes 4 --static-map /static=/data/oldboy/allstatic
訪問地址,即可看到你的女朋友們了....
3. nginx
利用Nginx做反向代理、負載均衡以及處理靜態文件。
a. 安裝Nginx
|
1
|
yum install nginx
|
b. 配置nginx
user root; worker_processes 4; error_log /var/log/nginx/error.log; pid /var/run/nginx.pid; events { worker_connections 1024; } http { log_format main '$remote_addr - $remote_user [$time_local] "$request" ' '$status $body_bytes_sent "$http_referer" ' '"$http_user_agent" "$http_x_forwarded_for"'; access_log /var/log/nginx/access.log main; sendfile on; tcp_nopush on; tcp_nodelay on; keepalive_timeout 65; include /etc/nginx/mime.types; default_type application/octet-stream; upstream django { server 127.0.0.1:8001; # server 192.1.123.1; } server { listen 80; charset utf-8; # max upload size client_max_body_size 75M; location /static { alias /data/oldboy/allstatic; } location / { uwsgi_pass django; include uwsgi_params; } } }
確保nginx配置文件目錄下有uwsgi_params文件(默認)
c. 配置uwsgi
為了確保讓所有請求均通過80端口來訪問網站,將uwsgi的配置文件修改為:
|
1
2
3
4
5
6
|
[uwsgi]
socket
=
127.0
.
0.1
:
9005
chdir
=
/
data
/
oldboy
/
wsgi
-
file
=
oldboy
/
wsgi.py
processes
=
4
logto
=
/
tmp
/
oldboy.log
|
d. 啟動uwsgi和nginx
|
1
2
3
|
uwsgi --ini
/data/oldboy/oldboy
.ini &
/etc/init
.d
/nginx
start
|
3. supervisor
supervisor是一個對進程管理的軟件,可以幫助我們啟動uwsgi並維護(uwsgi進程關閉時,自動將其啟動起來)。
a. 安裝
|
1
|
yum
install
supervisor
|
b. 配置 vim /etc/supervisor.conf
6. 第三版本上線:uwsgi + nginx
nginx作用:
- 處理靜態文件
- 反向代理
- 負載均衡(LVS、haproxy)
uwsig作用:
- 處理動態請求
nginx配置:/etc/nginx/nginx.conf
user root; #進程數量 4 worker_processes 4; error_log /var/log/nginx/error.log; pid /var/run/nginx.pid; events { worker_connections 1024; } http { log_format main '$remote_addr - $remote_user [$time_local] "$request" ' '$status $body_bytes_sent "$http_referer" ' '"$http_user_agent" "$http_x_forwarded_for"'; access_log /var/log/nginx/access.log main; sendfile on; tcp_nopush on; tcp_nodelay on; keepalive_timeout 65; include /etc/nginx/mime.types; default_type application/octet-stream; upstream django { server 127.0.0.1:8001; server 127.0.0.1:8002; } server { #監聽80端口 listen 80; charset utf-8; # max upload size client_max_body_size 75M; location /static { alias /data/s8day145/allstatic; } location / { uwsgi_pass django; include uwsgi_params; } } }
uwsgi配置:/data/s8day145/
s8day145_uwsgi_8001.ini [uwsgi] socket = 127.0.0.1:8001 chdir = /data/s8day145/ wsgi-file = s8day145/wsgi.py processes = 1 s8day145_uwsgi_8002.ini [uwsgi] socket = 127.0.0.1:8002 chdir = /data/s8day145/ wsgi-file = s8day145/wsgi.py processes = 1
啟動:
nginx: /etc/init.d/nginx start /bin/systemctl restart nginx.service /bin/systemctl start nginx.service /bin/systemctl stop nginx.service uwsgi: #這里后邊加一個 & 表示在后端啟動,不會在前面打印一些日志 uwsgi --ini s8day145_uwsgi_8001.ini & uwsgi --ini s8day145_uwsgi_8002.ini &
7. 如果進程掛了,supervisor幫助你自動將服務重新啟動。
/etc/supervisord.conf [program:s8day145] command=/usr/local/bin/uwsgi --ini /data/s8day145/s8day145_uwsgi_8001.ini ;命令 priority=999 ; 優先級(越小越優先) autostart=true ; supervisord啟動時,該程序也啟動 autorestart=true ; 異常退出時,自動啟動 startsecs=10 ; 啟動后持續10s后未發生異常,才表示啟動成功 startretries=3 ; 異常后,自動重啟次數 exitcodes=0,2 ; exit異常拋出的是0、2時才認為是異常 stopsignal=QUIT ; 殺進程的信號 stopwaitsecs=10 ; 向進程發出stopsignal后等待OS向supervisord返回SIGCHILD 的時間。若超時則supervisord將 使用SIGKILL殺進程 user=root ; 設置啟動該程序的用戶 log_stdout=true ; 如果為True,則記錄程序日志 log_stderr=false ; 如果為True,則記錄程序錯誤日志 logfile=/var/log/cat.log ; 程序日志路徑 logfile_maxbytes=1MB ; 日志文件最大大小 logfile_backups=10 ; 日志文件最大數量 systemctl start supervisord.service
- 公司中的部署步驟及負責人:
- 開發提交代碼
- 測試人員開始測試
- 運維人員進行上線
使用軟件:jenkins+自己寫腳本,運維人員點點點。
- 從git上啦代碼到一個服務器,在該服務器上對代碼進行編譯(c/vue/java)
- 通過以下工具 將代碼同步到每台服務器上
- saltstack
- ansible
- 執行命令啟動程序
- 自己搭建yum源

