Django+uwsgi+Nginxプロジェクトの導入

9084 ワード

プロジェクトの導入:
ここでは、非常にクリーンなubuntu 16.04システム環境を使用しています.クラウドサーバ環境が異なるため、クラウドサーバは使用されていません.ゼロから導入を完了します.
開発機での準備:
  • バグがないことを確認する.
  • pip freeze > requirements.txt現在の環境のパッケージをrequirements.txtファイルにエクスポートし、配置が容易な場合にインストールします.
  • dysmsをpythonファイルの準備ができました.メール認証コードのこのパッケージは通らなければならないので
  • サーバ上の/srvディレクトリにアイテムをアップロードする.ここではgitを例に挙げます.gitを使用すると、他のアップロード方法(pycharmを使用するなど)よりも安全です.gitにはバージョン管理の機能があるので、後で前のバージョンに戻りたい場合は、gitは簡単にできます.
  • 在https://git-scm.com/downloadsWindowsバージョンのクライアントをダウンロードします.次にダブルクリックして次のインストールをクリックすればいいです.
  • コードクラウドを使用して、コードクラウド上にアイテムを作成します.コードクラウドアドレス:https://gitee.com/
  • 次にプロジェクトに進み、以下のコマンドを使用してコードを提出する:
  • #        
    * git init 
    #          
    * git remote add origin xxx.git
    #            
    * git add .
    #           
    * git commit -m 'first commit'
    #            
    * git pull origin master --allow-unrelated-histories
    #                   master   
    * git push origin master
    

    サーバでの準備:
  • ubuntuオープンrootユーザー:
  • sudo passwd rootユーザーのパスワードを入力します
  • xshellまたはCRT接続サーバを容易にするため、OpenSSHのインストールを推奨する(一般クラウドサーバに既にインストールされている):
  • sudo apt install openssh-server openssh-client
    service ssh restart
    
  • 取付vim:sudo apt install vim
  • ubuntuのaptソースを修正する(クラウドサーバには一般的に独自のソースがあり、修正しなくてもよい)、aptソースはソフトウェアをインストールするためのリンクである:先にコピー/etc/apt/sources.list /etc/apt/sources.list.bak、それからviで編集/etc/apt/sources.list、削除sources.listの他の内容をファイルに貼り付ける.そして保存:
  • deb-src http://archive.ubuntu.com/ubuntu xenial main restricted
    deb http://mirrors.aliyun.com/ubuntu/ xenial main restricted
    deb-src http://mirrors.aliyun.com/ubuntu/ xenial main restricted multiverse universe
    deb http://mirrors.aliyun.com/ubuntu/ xenial-updates main restricted
    deb-src http://mirrors.aliyun.com/ubuntu/ xenial-updates main restricted multiverse universe
    deb http://mirrors.aliyun.com/ubuntu/ xenial universe
    deb http://mirrors.aliyun.com/ubuntu/ xenial-updates universe
    deb http://mirrors.aliyun.com/ubuntu/ xenial multiverse
    deb http://mirrors.aliyun.com/ubuntu/ xenial-updates multiverse
    deb http://mirrors.aliyun.com/ubuntu/ xenial-backports main restricted universe multiverse
    deb-src http://mirrors.aliyun.com/ubuntu/ xenial-backports main restricted universe multiverse
    deb http://archive.canonical.com/ubuntu xenial partner
    deb-src http://archive.canonical.com/ubuntu xenial partner
    deb http://mirrors.aliyun.com/ubuntu/ xenial-security main restricted
    deb-src http://mirrors.aliyun.com/ubuntu/ xenial-security main restricted multiverse universe
    deb http://mirrors.aliyun.com/ubuntu/ xenial-security universe
    deb http://mirrors.aliyun.com/ubuntu/ xenial-security multiverse
    

    次に、ソースを更新します.sudo apt update5.MySQLサーバとクライアントのインストール:sudo apt install mysql-server mysql-client6.memcachedのインストール:apt install memcachedをコマンドすることでインストールできます.より多くのmemcachedの知識点はmemcachedの章を参照してください.
  • プロジェクトのインストールに使用するPython:
  • * sudo apt install python3
    * sudo apt install python3-pip
    * pip install --upgrade pip
    

    システムに既にPython 3がある場合は、再インストールする必要はありません.supervisorはPython 3をサポートしていないので、Python 2をインストールする必要があります.もしなければ、インストールします.
    * sudo apt install python2.7
    * sudo apt install python-pip
    

    そしてpython2.7と入力して使えます.pipを入力すると、次のエラーが表示されます.
     Traceback (most recent call last):
       File "/usr/bin/pip", line 9, in 
         from pip import main
     ImportError: cannot import name main
    

    これは、pip 10のバグの1つであり、/usr/bin/pipの
    from pip import main 
    if __name__ == '__main__': 
        sys.exit(main())
    

    変更:
    from pip import __main__
    if __name__ == '__main__':
        sys.exit(__main__._main())
    
  • virtualenvwrapperをインストールし、プロジェクトで使用する仮想環境を作成する:
  •  * pip install virtualenvwrapper
    

    virtualenvwrapperをインストールした後、virtualenvwrapperの環境変数を構成する必要があります.
  • virtualenvwrapper.shコマンドでvirtualenvwrapper.shファイルが存在するパスを最初に表示します.
  • 現在のユーザーディレクトリの下に.virtualenvフォルダを作成し、すべての仮想環境ディレクトリを格納します.
  • 現在のユーザーディレクトリの下で.bashrcファイルを編集し、以下のコードを追加する:
  • export WORKON_HOME=$HOME/.virtualenvs
    source /usr/local/bin/virtualenvwrapper.sh
    

    そして終了bashrcファイル、コマンド入力source ~/.bashrc.
    注意:virtualenvwrapperをpython 2の環境にインストールしているので、仮想環境を作成するときに–pythonパラメータを使用して、どのPythonファイルを使用するかを指定する必要があります.例えば、私のpython 3のパスは/usr/bin/python 3です.サンプルコードは次のとおりです.mkvirtualenv --python=/usr/bin/python3 xfz-env9.gitのインストール:sudo apt install git10.gitを使用してプロジェクトコードをダウンロードする:
    * git init
    * git remote add origin https://gitee.com/hynever/xfz_beike
    * git pull origin master
    
  • 仮想環境に入り、プロジェクトが存在するディレクトリに入り、コマンドを実行する:pip install -r requirements.txtプロジェクト依存パッケージをインストールします.ヒントOSError: mysql_config not foundの場合は、sudo apt install libmysqld-devをインストールします.注意メール認証コードのパッケージは別途インストールする必要があります.dysmsをpythonフォルダをプロジェクトにアップロードし、このフォルダに入ります.命令実行:python setup.py install.
  • mysqlデータベースに入り、プロジェクトのデータベースを作成する.
  • python manage.py makemigrations/migrateを実行してモデルをデータベースにマッピングします.
  • python manage.py runserver 0.0.0.0:8000を実行し、自分のパソコンでこのサイトにアクセスし、BUGがないことを確認します.
  • settings.pyでのALLOWED_HOSTはサイトのドメイン名またはipアドレスを追加します.
  • DEBUG=Falseを設定し、あなたのサイトにエラーが発生した場合、エラーメッセージをユーザーに漏らさないようにします.
  • settings.pyでSTATIC_を設定ROOTは、収集された静的ファイルを格納するために使用されます.静的ファイルを収集するコマンドは、python manage.py collectstatic
  • インストールuwsgi:
    uwsgiはアプリケーションサーバであり、非静的ファイルのネットワーク要求は彼によって完了しなければならない.彼は静的ファイルサーバとして機能することもできるが、彼の強みではない.uwsgiはpythonで記述されているのでpip 3 install uwsgiでよい.(uwsgiは、仮想環境にインストールしないでシステムレベルのPython環境にインストールする必要があります).次にuwsgi.iniというプロファイルを作成します.
    [uwsgi]
    #          
    #      
    chdir           = /srv/beike/xfz
    # Django wsgi  
    module          = xfz.wsgi
    # Python       
    home            = /root/.virtualenvs/xfz-env
    
    #        
    #    
    master          = true
    #          
    processes       = 10
    
    http            = :8000
    
    #   socket   
    chmod-socket    = 666
    #            
    vacuum          = true
    
    daemonize       = /var/log/xfz_uwsgi.log
          uwsgi --ini uwsgi.ini  ,      。         http://ip  :8000,         (        )  uwsgi      。
    

    nginxのインストールと構成:
    uwsgiは私たちのプロジェクトを正常に導入することができますが.しかし、私たちは依然としてnginxをwebサーバとして採用しなければなりません.nginxをWebサーバとして使用するメリットは、次のとおりです.
  • uwsgiは、応答速度、キャッシュなどを含む静的ファイルリソースの処理がよくない.
  • nginxはプロのwebサーバとして、uwsgiよりもパブリックネットワークに露出する方が安全です.
  • 運び方が便利.例えば、いくつかのIPをブラックリストに書き込むには、nginxは非常に便利に書くことができます.uwsgiは実装するために大きなコードを書く可能性があります.

  • インストール:
    apt install nginxでインストールできます.
    nginx単純操作コマンド:
    起動:service nginx start停止:service nginx stop再開:service nginx restartテストプロファイル:service nginx configtest
    プロファイルを追加するには
     /etc/nginx/conf.d   ,      ,  zhiliaoketang.conf,           :
    
    upstream zhiliaoketang {
        server unix:///srv/zhiliaoketang/zhiliaoketang.sock; 
    }
    
    #      
    server {
        #       
        listen      80;
        #   
        server_name 192.168.0.101; 
        charset     utf-8;
    
        #          
        client_max_body_size 75M;  
    
        #        url
        location /static {
            #       
            alias /srv/zhiliaoketang/static_dist; 
        }
    
        #   ,            django   
        location / {
            uwsgi_pass  zhiliaoketang;
            # uwsgi_params    
            include     /etc/nginx/uwsgi_params; 
        }
    }
    

    プロファイルを書き終わったら、プロファイルが正常に設定されているかどうかをテストするために、コマンドを実行します:service nginx configtest、エラーが報告されなければ、成功を説明します.プロファイルの変更が完了するたびに、service nginx restartを実行することを忘れないでください.
    supervisorを使用してuwsgiプロセスを管理するには、次の手順に従います.
    supervisorにuwsgiを管理させると、uwsgiが予期せぬ状況で自動的に再起動できます.
    supervisorのインストール:
    supervisorはpythonで書かれているのでpipでインストールできます.また、supervisorはpython 3をサポートしていないため、python 2の環境にsupervisorをインストールする必要があります.pip2 install supervisor.
    開始:
    プロジェクトのルートディレクトリの下にsupervisor.confというファイルを作成し、次のコードをプロファイルに入力します.
    # supervisor     
    [program:mysite]
    # supervisor     
    command=uwsgi --ini zlkt_uwsgi.ini
    #      
    directory = /srv/zhiliaoketang 
    #           
    startsecs=0
    #           
    stopwaitsecs=0  
    #     
    autostart=true
    #          
    autorestart=true
    #    log  
    stdout_logfile=/srv/zhiliaoketang/log/supervisord.log
    #        
    stderr_logfile=/srv/zhiliaoketang/log/supervisord.err
    
    [supervisord]
    # log   
    loglevel=debug
    
    [inet_http_server]
    # supervisor    
    port = :9001
    #       
    username = admin
    password = 123
    
    #   supervisorctl   
    [supervisorctl]
    #   supervisorctl         
    serverurl = http://127.0.0.1:9001
    
    #   supervisorctl       
    username = admin
    password = 123
    
    [rpcinterface:supervisor]
    supervisor.rpcinterface_factory = supervisor.rpcinterface:make_main_rpcinterface
    

    次にコマンドsupervisord-c supervisor.confを使用して実行すればいいです.今後uwsgiを起動する場合は、コマンドsupervisorctl-c supervisor.confを使用して管理コンソールにアクセスし、関連するコマンドを実行して管理できます.
    status#ステータス表示start program_name#イニシエータrestart program_name#再起動プログラムstop program_name#クローズプログラムreload#再ロードプロファイルquit#終了コンソール