1. 程式人生 > >部署CRM項目

部署CRM項目

comm ken may root用戶 停止 添加 形式 服務器 emctl

部署CRM項目

前言

  • 使用軟件

    1. nginx

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

      1. python web服務器開發使用WSGI協議(Web Server Gateway Interface)

        python web項目默認會生成一個wsgi.py文件,確定好應用模塊。

        生產環境中使用的是uWSGI,實現了WSGI所有接口,C語言編寫,效率很高的web服務器。

        uWSGI是一個全功能的HTTP服務器,實現了WSGI協議、uwsgi協議、http協議等。它要做的就是把HTTP協議轉化成語言支持的網絡協議。比如把HTTP協議轉化成WSGI協議,讓Python可以直接使用。

    3. centos7

      1. 打包項目CRM文件夾,壓縮文件
      2. 通過xftp、scp、lrzsz等上傳文件至Centos服務器
    4. CRM項目文件

    5. virtualenv

      1. 構建一個幹凈,隔離的python解釋器環境,防止軟件依賴,沖突等問題,建議使用。
    6. supervisor

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

項目部署

準備工作

1 將項目上傳到服務器上

  1. 方法一:使用xftp工具,進項上傳文件夾,將項目代碼,傳到linux服務器當中

    1. 這個頁面操作,實在不會百度
  2. 方式2: 使用scp從本地將文件上傳到linux服務器中

    scp -r  本地文件夾  遠程用戶名@遠程ip:遠程文件夾/

2 將mysql數據遷移到服務器數據庫

  • 服務器端安裝mysql(mariadb)數據庫鏈接:https://www.cnblogs.com/yuncong/p/10253215.html

  • 數據導入導出

          在linux服務端,mysql,導入knight的數據
          1.mysql數據的導出,與導入
          這個命令是在linux/windows中敲的
          mysqldump -u root -p --all-databases >  knight.dump  
    
          2.上傳這個數據文件到linux數據庫中
    
          3.在linux的mysql,導入這個數據文件
          mysql -uroot -p   <   /opt/knight.dump  
  • 註意:linux的數據庫,需要對root用戶設置遠程鏈接的權限

    grant all privileges on *.* to root@'%' identified by 'redhat';
    # 授權所有的權限,在所有庫,所有表  對  root用戶在所有的主機上, 權限密碼為redhat,   註意是自己設置的密碼
    # 刷新授權表
    flush privileges;
  • 註意2:linux的防火墻要給關閉,否則windows去鏈接linux的3306端口可能被拒絕

    centos7默認已經使用firewall作為防火墻了
    1.關閉防火墻
    systemctl status firewalld #查看防火墻狀態
    systemctl stop firewalld    #關閉防火墻
    systemctl disable firewalld#關閉防火墻開機啟動
    systemctl is-enabled firewalld.service#檢查防火墻是否啟動

1. 激活虛擬python環境

  • 這裏使用的是virtualenv進行管理

  • 安裝virualenvwrapper工具鏈接:https://www.cnblogs.com/yuncong/p/10251899.html

    # 創建虛擬環境
    mkvirtualenv my_django
    # 激活該虛擬環境
    workon my_diango
  1. 激活環境後,cd到項目目錄下

    • 可以使用pip freeze模塊遷移

      • 生成項目依賴模塊

        # 在本地
        pip freeze >requirements.txt
      • 在虛擬環境中

        pip install -r C:\Users\Administrator\requirements.txt
        # pip install -r 路徑
    • 啟動django項目

      python3 manage.py runserver 0.0.0.0:8000

      啟動項目註意的問題,根據報錯進行下載相應的模塊,

      項目中settings.py中倆個關鍵位置記得更改:

      # 這個參數
      ALLOWED_HOSTS = ['*']
      # 數據庫連接參數
      DATABASES = {
          'default': {
              'ENGINE': 'django.db.backends.mysql',
              'NAME': "crm",
              "HOST": "127.0.0.1",
              "PORT": 3306,
              "USER": 'root',
              "PASSWORD": '123'
          }
      }
    • 啟動成功之後退出, 這裏只是為了測試項目

2 安裝uwsgi

  • 安裝

    pip3 install uwsgi 
  • 1 通過uwsgi啟動django項目(註意這裏要在項目目錄下)

    uwsgi --http :8000 --module  knight.wsgi  
  • 2 使用uwsgi.ini配置文件來啟動項目,這個文件要自己創建,隨意放在哪,我這裏是放在項目目錄中的

    # 新建uwsgi.ini 
    touch uwsgi.ini
    # 查看 
    ls uwsgi.ini  

    編輯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  

    啟動之後可以通過網址進行訪問了

3 配置nginx

  • 作用: 使用ngixn處理django的靜態文件
  1. 設置django的靜態文件目錄,收集一下

    修改項目中settings.py,寫下如下參數

    STATIC_ROOT= '/opt/static'   #該路徑根據實際放置
  2. 使用命令收集django的靜態文件

    python manage.py collectstatic
  3. 查看django的靜態文件收集目錄

    ls /opt/static
  4. 配置nginx,進行反向代理,找到uwsgi項目,且配置nginx處理uwsgi的靜態文件

    編輯nginx.conf

         server {
            listen       80;
            #域名qishijd.com
            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;
    }
        }

    技術分享圖片

  5. 配置完成後啟動uwsgi,重啟nginx,

註意問題

  1. 在瀏覽器上輸入網址後,數據不加載,可能原因

     #如果你使用了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

    這倆只選一個

  2. 本地域名添加

    在本地編輯
    vim /etc/hosts
    # 加載你nginx.conf中這個參數對應的域名
    # server_name  qishijd.com;  格式為
    
    
    192.168.11.11 qishijd.com
    
    # 保存退出

進程管理工具superviosr

  • 註意

    使用python2的模塊管理工具,去下載supervisor ,註意此時,退出虛擬環境
    使用python2的模塊管理工具,去下載supervisor ,註意此時,退出虛擬環境
    使用python2的模塊管理工具,去下載supervisor ,註意此時,退出虛擬環境
    使用python2的模塊管理工具,去下載supervisor ,註意此時,退出虛擬環境
    使用python2的模塊管理工具,去下載supervisor ,註意此時,退出虛擬環境

  • 安裝supervisor

    yum install python-setuptools
  • 安裝

    easy_install supervisor
  • 使用supervisor命令,生配置文件

    echo_supervisord_conf   >  /etc/supervisor.conf 
  • 在這個配置文件中加入我們想要管理的任務

    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信號,包括子進程
  • 通過配置文件啟動supervisor服務

    supervisord -c /etc/supervisor.conf
  • 啟動了supervisor服務端後,管理任務

    supervisorctl -c /etc/supervisor.conf
  • 任務管理命令如下:有兩種,一個是交互式,一個是參數形式

    1. 參數形式

      supervisorctl -c /etc/supervisor.conf stop/start/restart   all
      supervisorctl -c /etc/supervisor.conf start crm_knight
      
    2. 交互式形式

      supervisorctl -c /etc/supervisor.conf 

部署CRM項目