部署knight項目

發佈CRM你將使用如下軟件

  • nginx
  • uWSGI
  • CentOS7
  • CRM項目文件
  • virtualenv
  • supervisor

WSGI、uWSGI

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

使用nginx是爲了它的反向代理功能,項目會經過Django+uWSGI+Nginx進行服務器線上部署。nginx

CentOS

1.打包項目CRM文件夾,壓縮文件web

2.經過xftp、scp、lrzsz等上傳文件至Centos服務器sql

Linux使用技巧

1.經過xshell或者iTerm等軟件,多終端操做你的linxu,這樣對uwsgi、nginx、項目代碼調試的時候,避免來回切換目錄,提供工做效率。shell

2.注意修改了linux軟件的配置文件,都要重啓服務才能生效。數據庫

Virtualenv

構建一個乾淨,隔離的python解釋器環境,防止軟件依賴,衝突等問題,建議使用。django

Supervisor

Supervisor(http://supervisord.org/)是用Python開發的一個client/server服務,是Linux/Unix系統下的一個進程管理工具,不支持Windows系統。它能夠很方便的監聽、啓動、中止、重啓一個或多個進程。用Supervisor管理的進程,當一個進程意外被殺死,supervisort監聽到進程死後,會自動將它從新拉起,很方便的作到進程自動恢復的功能,再也不須要本身寫shell腳原本控制。

項目部署

上傳knight項目到linux服務器

使用xftp工具,進項上傳文件夾,將knight代碼,傳到linux服務器當中

完成python3解釋器的安裝

完成virtualenvwrapper工具的配置,解決虛擬環境問題

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數據庫,且建立數據庫數據,遷移導入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'

測試使用linux的python解釋器去運行項目(注意要解決解釋器的模塊問題,才能正常運轉項目)

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

安裝uwsgi

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.ini配置文件去啓動項目,這個文件本身去建立便可,放哪均可以

[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

uwsgi --ini  uwsgi.ini (注意寫清配置文件位置) 

使用ngixn處理django的靜態文件

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;
}
    }

訪問域名或者ip,查看項目

qishijd.com/login  查看靜態頁面是否正常

supervisor

原本咱們是用命令啓動管理項目,
如今講這些命令,寫入到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 項目名
相關文章
相關標籤/搜索