uWSGI + nginx + django + virtualenv + supervisor發布web服務器
項目部署步驟
1.項目准備階段
1.准備項目代碼,從本地拷貝 2.將項目上傳到linux服務器中,也就是拖進linux中... 3.執行命令解壓縮項目文件
2.解決項目運行的環境問題
1.通過命令導出開發機器的所有模塊,可以在windows下通過命令,導出模塊文件 pip3 freeze > requirements.txt #這是開發者約定俗成的文件名 2.將這個文件上傳linux上.進行安裝
pip3 install -i https://pypi.douban.com/simple -r requirements.txt
3.數據庫操作
1.准備需要使用的數據庫db #例如mysql 沒有就下載 yum install mariadb-server mariadb -y 2.啟動數據庫 systemctl start maridb 3.修改項目中settings.py中配置文件,修改mysql數據庫驅動,還有ALL_HOSTS = [" * "],允許所有網段訪問 4.創建數據庫和項目對應的庫名
4.virtualenv虛擬環境配置
1.配置好python3虛擬環境
2.進入虛擬環境安裝uwsgi pip3 install uwsgi
python3虛擬環境配置虛擬環境,參照 --->https://www.cnblogs.com/CrazySheldon1/p/10488249.html
5.uwsgi准備和配置
uwsgi.ini配置參考這個博友https://blog.51cto.com/wangfeng7399/2341281
通過uwsgi啟動django項目
#1. 首先進入項目的第一層 cd 項目名 #2.執行命令啟動 django uwsgi --http :8000 --module 項目名.wsgi #也可以執行熱加載命令: uwsgi --http :8000 --module 項目名.wsgi --py-autoreload=1 #--py-autoreload=1 就是檢測到項目中修改代碼后進行自動重啟進行同步 #3.使用nginx的話就需要通過配置文件啟動uwsgi,在項目第一層創建一個uwsgi.ini的文件 touch uwsgi.ini 4.手動配置uwsgi.ini文件
[uwsgi] # Django-related settings # the base directory (full path) #這里寫入項目的絕對路徑 chdir= /opt/項目名 # Django's wsgi file #寫入django的第二層文件夾,和wsgi.py文件 module = 項目名.wsgi # the virtualenv (full path) #虛擬環境的絕對路徑 home= /root/Envs/虛擬環境名 # process-related settings # master master= true # maximum number of worker processes processes= 1 #如果你沒用nginx,想直接訪問django后台,可以使用http協議 #http = 0.0.0.0:8000 #如果你用了nginx進行反向代理,請使用socket協議,注釋掉http協議 socket= 0.0.0.0:8000 # ... with appropriate permissions - may be needed # chmod-socket= 664 # clear environment on exit vacuum= true
6.nginx配置結合uwsgi啟動
1.修改nginx配置文件.nginx.conf #如下nginx的反向代理 location /{ include uwsgi_params; uwsgi_pass 0.0.0.0:8000; } #http://192.168.11.250/static/admin/css/base.css#當請求url,從 static路徑開始時,我們就讓他去找某一個文件夾解決靜態文件的配置方式 location /static{ alias /opt/自定義名稱 #(存放static靜態文件) } 2.修改django的settings.py,收集靜態資源 STATIC_ROOT = '/opt/project_name_static' #在settings.py中添加(自定義名稱) #同時保證以下兩個配置存在 STATIC_URL = '/static/' STATICFILES_DIRS = [ os.path.join(BASE_DIR, 'static') ] 3.使用命令收集django的靜態文件 python3 manage.py collectstatic #注意在manage.py同級目錄執行
7.使用supervisor啟動uwsgi
#1.首先退出虛擬環境,安裝supervisor, 注意python3不支持supervisor,因此要使用物理環境的python2進行安裝, #yum - install python-setuptools #easy_install supervisor #2.安裝完畢后,生成配置文件 echo_supervisord_conf > /etc/supervisord.conf #3.在配置文件中,添加任務,管理uwsgi vim /etc/supervisord.conf #在最底行,寫入配置如下 [program:自定義名稱] command=/root/Envs/虛擬環境名稱/bin/uwsgi --ini /opt/項目名稱/uwsgi.ini stopasgroup=true killasgroup=true #4.啟動supervisor服務 supervisord -c /etc/supervisord.conf #5.通過命令進行管理uwsgi supervisorctl -c /etc/supervisord.conf #6.學習管理supervisor的命令 start 任務名 stop 任務名 stop all start all status 任務名
此時項目部署完畢,如果沒有差錯,便可以通過ip正常跑起來了...
項目細節部分
不用nginx也能實現項目部署,通過uwsgi熱加載也可以啟動django項目,為什么要用nginx?
- 安全問題:程序不能直接被瀏覽器訪問,而是通過nginx,nginx只開放某個接口,uwsgi本身是內網接口,這樣運維人員在nginx上加上安全性限制,可以達到保護程序的作用
- 負載均衡問題:一個uwsgi 很可能不夠用,即使開了多個work也不行,畢竟一台機器的cpu內存是有限的,有了nginx做代理,一個nginx可以代理多台uwsgi完成uwsgi的負載均衡
- 靜態問題:使用django或是uwsgi來負責靜態文件是很浪費的行為,而且他們本身對文件的處理也不如nginx好,所以整個靜態文件的處理都直接由nginx完成.
...