python web服務器開發使用WSGI協議(Web Server Gateway Interface)python
python web項目默認會生成一個wsgi.py文件,肯定好應用模塊。mysql
生產環境中使用的是uWSGI,實現了WSGI全部接口,C語言編寫,效率很高的web服務器。linux
uWSGI是一個全功能的HTTP服務器,實現了WSGI協議、uwsgi協議、http協議等。它要作的就是把HTTP協議轉化成語言支持的網絡協議。好比把HTTP協議轉化成WSGI協議,讓Python能夠直接使用。ios
使用nginx是爲了它的反向代理功能,項目會經過Django+uWSGI+Nginx進行服務器線上部署。nginx
1.打包項目CRM文件夾,壓縮文件web
2.經過xftp、scp、lrzsz等上傳文件至Centos服務器sql
1.經過xshell或者iTerm等軟件,多終端操做你的linxu,這樣對uwsgi、nginx、項目代碼調試的時候,避免來回切換目錄,提供工做效率。shell
2.注意修改了linux軟件的配置文件,都要重啓服務才能生效。數據庫
構建一個乾淨,隔離的python解釋器環境,防止軟件依賴,衝突等問題,建議使用。django
Supervisor(http://supervisord.org/)是用Python開發的一個client/server服務,是Linux/Unix系統下的一個進程管理工具,不支持Windows系統。它能夠很方便的監聽、啓動、中止、重啓一個或多個進程。用Supervisor管理的進程,當一個進程意外被殺死,supervisort監聽到進程死後,會自動將它從新拉起,很方便的作到進程自動恢復的功能,再也不須要本身寫shell腳原本控制。
使用xftp工具,進項上傳文件夾,將knight代碼,傳到linux服務器當中
vim ~/.bashrc 最下面添加以下內容 WORKON_HOME=~/Envs #設置virtualenv的統一管理目錄,之後自動下載的虛擬環境,全都放這了 VIRTUALENVWRAPPER_VIRTUALENV_ARGS='--no-site-packages' #添加virtualenvwrapper的參數,生成乾淨隔絕的環境 VIRTUALENVWRAPPER_PYTHON=/opt/python36/bin/python3 #指定python解釋器的本體 #必需要有這個參數,纔會在每次登錄linux的時候,加載這個虛擬環境腳本工具 source /opt/python36/bin/virtualenvwrapper.sh #執行virtualenvwrapper安裝腳本
1.新建一個knight虛擬環境用於運行 crm項目 cd /opt/knight mkvirtualenv knight
#centos7底下,mariadb就是mysql數據庫,只是包名的不一樣 yum install mariadb-server mariadb -y #啓動mariadb服務端 systemctl start mariadb #使用客戶端去連接mysql服務端 1.mysql -uroot -p #注意,linux的數據庫,須要對root用戶設置遠程連接的權限, #受權全部的權限,在全部庫,全部表 對 root用戶在全部的主機上, 設置權限密碼是 redhat grant all privileges on *.* to root@'%' identified by 'redhat'; #刷新受權表 flush privileges; 注意2,linux的防火牆要給關閉,不然windows去連接linux的3306端口可能被拒絕 在linux服務端,mysql,導入knight的數據 1.mysql數據的導出,與導入 這個命令是在linux/windows中敲的 mysqldump -u root -p --all-databases > knight.dump 2.上傳這個數據文件到linux系統的/opt/目錄中 3.在linux的mysql,導入這個數據文件 mysql -uroot -p < /opt/knight.dump #會出現這個報錯,是兼容問題,不影響 ERROR 1911 (HY000) at line 5417: Unknown option 'STATS_PERSISTENT'
pip3 install django==1.11.16 pip3 install pymysql pip3 install -i htttps://pypi.douban.com/simple django-multiselectield(注意安裝的是django-multiselectield,錯誤提示的是缺乏的是multiselectield) 改setings裏面的數據庫配置ip 還有ALLOWED_HOSTS = ['*'] python3 manage.py runserver 0.0.0.0:8000
1.安裝uwsgi pip3 install uwsgi 2.使用學習uwsgi命令,如何啓動python應用 經過uwsgi運行一個python web文件 3.經過命令去啓動python web應用 uwsgi --http :8000 --wsgi-file test.py --http 指定http協議 --wsgi-file 指定一個支持python wsgi協議的文件 4.經過uwsgi啓動django項目(注意這裏要進入knight項目目錄) uwsgi --http :8000 --module knight.wsgi
5.uwsgi自動重啓python程序
uwsgi --http :8000 --module knight.wsgi --py-autoreload=1
在生產中,您能夠監視文件/目錄更改以觸發從新加載(touch-reload,fs-reload ...)。
在開發過程當中,能夠方便地使用全部已加載/使用的python模塊的監視器。但請僅在開發期間使用它。
檢查由一個以指定頻率掃描模塊列表的線程完成:
[uwsgi]
...
py-autoreload = 2
將每2秒檢查python模塊更改並最終從新啓動實例。
[uwsgi] # Django-related settings # the base directory (full path) #寫上項目的絕對路徑 chdir = /opt/knight # Django's wsgi file #填寫找到django的wsgi文件,填寫相對路徑,以chdir參數爲相對路徑 module = knight.wsgi # the virtualenv (full path) #填寫虛擬環境的絕對路徑 home = /root/Envs/knight/ # process-related settings # master #啓動uwsgi主進程 master = true # maximum number of worker processes processes = 5 #若是你使用了nginx,作反向代理,必須填寫socket連接,而不是http參數 # the socket (use the full path to be safe #socket = 0.0.0.0:8000 #若是你不用nginx,直接使用uwsgi,運行一個http服務端,就用這個http參數 http = 0.0.0.0:8000 # ... with appropriate permissions - may be needed # chmod-socket = 664 # clear environment on exit vacuum = true
uwsgi --ini uwsgi.ini (注意寫清配置文件位置)
1.設置django的靜態文件目錄,收集一下 修改knight/settings.py ,寫入以下參數 STATIC_ROOT= '/opt/static' 2.使用命令收集django的靜態文件 python3 manage.py collectstatic 3.查看django的靜態文件收集目錄 ls /opt/static 4.配置nginx,反向代理,找到uwsgi項目,且配置nginx處理uwsgi的靜態文件 nginx.conf 修改配置以下 server { listen 80; server_name qishijd.com; #只要用戶訪問qishijd.com:80/ 就走這個location匹配>,反向代理給uwsgi: location / { include uwsgi_params; uwsgi_pass 0.0.0.0:8000; } #當用戶請求是qishijd.com/static/的時候 #就會進入這個location匹配 #經過alias參數進行路徑別名,讓nginx去/opt/static底下去找靜>態資源 location /static { alias /opt/static; } }
qishijd.com/login 查看靜態頁面是否正常
原本咱們是用命令啓動管理項目,
如今講這些命令,寫入到supervisor,經過superviosr去啓動管理這些命令
使用python2的模塊管理工具,去下載supervisor ,注意此時,退出虛擬環境
使用python2的模塊管理工具,去下載supervisor ,注意此時,退出虛擬環境
使用python2的模塊管理工具,去下載supervisor ,注意此時,退出虛擬環境
安裝supervisor yum install python-setuptools #安裝 easy_install supervisor #進入虛擬環境執行下面步驟: 2.使用supervisor命令,生成配置文件 echo_supervisord_conf > /etc/supervisor.conf 3.在這個配置文件中,寫入咱們想要管理的任務 vim /etc/supervisor.conf 在最底行寫入以下配置 #定義一個任務,名字自定義 #commnad=參數,定義咱們啓動項目的命令 [program:crm_knight] command=/root/Envs/knight/bin/uwsgi /opt/knight/uwsgi.ini stopasgroup=true ;默認爲false,進程被殺死時,是否向這個進程組發送stop信號,包括子進程 killasgroup=true ;默認爲false,向進程組發送kill信號,包括子進程 4.經過配置文件啓動supervisor服務 supervisord -c /etc/supervisor.conf 5.啓動了supervisor服務端後,管理任務 supervisorctl -c /etc/supervisor.conf 任務管理命令以下:有兩種,一個是交互式,一個是參數形式 #參數形式 supervisorctl -c /etc/supervisor.conf stop/start/restart all supervisorctl -c /etc/supervisor.conf start crm_knight #交互式形式 supervisorctl -c /etc/supervisor.conf start 項目名 stop 項目名