セロリとREDISでDjangoを展開すること


ほとんどの場合、プロジェクト自体の実行前にプロジェクト展開の困難について考えています.このポストを書くことの私の目的は、Linuxマシンでdjangoプロジェクトを展開することがいかに簡単かを示すことです.
Djangoの主要な配備プラットホームは、そうですWSGI , WebサーバとアプリケーションのPython標準.Djangoを実行するアートはNginx、Gunicorn、Virtualenv、監督などのツールが含まれています.あまりにもなく、圧延を取得しましょう!

環境


我々が始める前に、我々が配備のためにどんな環境を使用するかについて理解しましょう.
  • オペレーティングシステム- Ubuntu
  • Python 3.7.3link 最新版をインストールするには
  • 必要条件


    私たちはあなたが持っていると仮定しますroot Ubuntuシステムへのアクセスに必要なパッケージをインストールします.私たちはubuntu ユーザー(AWS Ubuntu AMIが付属しているデフォルト)は、以下の構成のすべてを実行します.
    第二に、Gitを通してクローンに利用できるJjangoプロジェクトがあると仮定します.我々のDjangoプロジェクトは、バックグラウンドタスク処理のためにセロリとREDISを必要とします.
    📘 ノート
  • あなたのプロジェクトはセロリとRedisを必要としないかもしれません、したがって、あなたはDjango配備だけに集中するために対応するセクションをスキップすることができます
  • インストールする必要がありますDatabase or RabbitMQ 非常に簡単で、インストールスクリプトから離れて走るどんなサーバー構成も必要としないあなたのプロジェクトに従って
  • すべてのコマンドはubuntu として示されているrootアクセスを持つユーザ$ このポストを通してリストされるコマンドで.接頭辞(myproj_env)$ , コマンドは仮想環境で実行されなければなりません
  • 簡単にするには、次の手順に分けます.
  • 必須パッケージのインストール
  • Djangoプロジェクトの設定
  • セロリ用redisのインストール
  • ガンコーンの設置
  • スーパーバイザーの設置
  • nginxの設定
  • 必須パッケージのインストール


    我々のシステムが最新であることを確認することから始めましょう
    $ sudo apt-get update
    
    次に、実行するアプリケーションのグローバルパッケージをインストールします(Djangoプロジェクト依存関係に基づいて、追加のパッケージを必要とする場合があります).
    $ sudo apt-get install libmysqlclient-dev python3-dev
    

    Djangoプロジェクトの設定

  • Pythonプロジェクトを設定する最初のステップは、パッケージマネージャをインストールすることですpip ) 仮想環境を設定します.私たちはvirutalenv パッケージ
  • # installing pip for Python 3.7
    $ curl https://bootstrap.pypa.io/get-pip.py | sudo -H python3.7
    # installing virtualenv
    $ sudo pip3 install virtualenv
    
  • プロジェクトの仮想環境を作成する前に、セットアップフォルダの構造を理解しましょう.デフォルトでは、Ubuntuはこのベースフォルダに私たちを着陸させます/home/ubuntu/ . マシン上のプロジェクトを正しく識別するにはwebapps フォルダを作成し、その下のすべてのログ、プロジェクトフォルダを作成します.プロジェクトの構造は次のようになります
  • # base folder
    /home/ubuntu/webapps/
    # under webapps
    /webapps
    │---projects                 # Base folder for our project
        │---myproj_env           # Django project virtual environment
        │---myproj               # Django project directory
        │   │---manage.py
        │   │---Myproj
        │   |---requirements.txt
        logs                     # All our logs would be inside this folder
        │---gunicorn
        │---redis
        │---nginx
        |---celery
    
    
    上から、プロジェクト名はmyproj ( git - repo )と仮想環境名myproj_env
  • 仮想環境を創ろうprojects 上記のフォルダ
  • $ cd /home/ubuntu/webapps/projects # create folders if you haven't created
    # virutal environment for python 3.7
    $ virtualenv -p python3.7 myproj_env
    
  • プロジェクトのクローンmyproj インprojects フォルダ
  • $ cd /home/ubuntu/webapps/projects
    # clone the repository
    $ git clone <myproj-git-link>
    
  • 仮想環境をアクティブにし、プロジェクトのすべての依存関係をインストールする
  • $ cd /home/ubuntu/webapps/projects
    # activate virtual envrionment
    $ source myproj_env/bin/activate
    # installing project dependencies
    (myproj_env)$ cd /home/ubuntu/webapps/projects/myproj
    (myproj_env)$ pip install -r requirements.txt
    # optionally, check if django is running locally
    (myproj_env)$ python manage.py runserver
    

    セロリにredisをインストールする


    Celery 分散メッセージパッシングに基づく非同期タスクキュー/ジョブキューです.タスクキューは、スレッドやマシン間でワークを配布するメカニズムとして使用されます.セロリの使用例のいくつかは、電子メール、スケジューリングタスク、非同期実行などを送信しています.セロリはメッセージ転送をRabbitmq、Redisなどのメッセージを送受信する必要があります.
    Redisのインストール
    $ sudo apt-get install redis-server
    # check if Redis is working
    $ redis-cli ping 
    PONG
    # Autostart Redis on server restart
    $ sudo systemctl enable redis-server.service
    
    セロリは、プロジェクト依存ファイルに一般的に含まれるプロジェクトの仮想環境にインストールできますrequirements.txt

    GunCornの設定


    生産では、我々はDjangoのシングルスレッド開発サーバーを使用していませんが、専用のアプリケーションサーバーと呼ばれるgunicorn .
    アプリケーションの仮想環境でgunicornをインストールします
    $ cd /home/ubuntu/webapps/projects
    # activate virtual envrionment
    $ source myproj_env/bin/activate
    # installing gunicorn
    $ cd /home/ubuntu/webapps/projects/myproj
    (myproj_env):$ pip install gunicorn
    # optionally, check if it is running
    (myproj_env):$ gunicorn Myproj.wsgi:application --bind 8001
    [2019-11-04 04:52:01 +0000] [2010] [INFO] Starting gunicorn 19.9.0
    [2019-11-04 04:52:01 +0000] [2010] [INFO] Listening at: http://0.0.30.60:8000 (2010)
    [2019-11-04 04:52:01 +0000] [2010] [INFO] Using worker: sync
    [2019-11-04 04:52:01 +0000] [2013] [INFO] Booting worker with pid: 2013
    
    # make sure you kill Gunicorn process after you have tested to move further
    
    Gunicornは我々のアプリのリクエストを提供する準備が整いました.私たちは今からGunicornサーバーにアクセスできるようになりましたhttp://<server-IP-address>:8001 . を作成しましょうBash スクリプトを自動的にいくつかのカスタム設定でgunicornサーバーを起動します.このbashスクリプトを保存しますprojects フォルダとしてgunicorn_start.bash それで、我々のフォルダ構造は以下のように見えます
    /webapps
    │---projects                     # Base folder for our project
        │---myproj_env               # Django project virtual environment
            │---run                  # create this folder to hold gunicorn sock file
                │---gunicorn.sock    # just create this empty file 
        │---myproj                   # Django project directory
        │---gunicorn_start.bash      # Gunicorn Bash script
    
    スクリプトスクリプト
    < div >
    <高橋潤子>スタートアップスクリプト< br/>に実行可能ビットを設定する
    <> P >
    クラスをハイライト表示する
    # make sure you are in the projects folder
    $ chmod u+x gunicorn_start.bash
    
    < div >
    <高橋潤子>
    <> P >
    クラスをハイライト表示する
    # make sure you are in the projects folder
    $ ./gunicorn_start.bash
    # make sure you kill Gunicorn process after you have tested to move further
    
    < div >
    スクリプトスクリプトInsight


    <ウル>
  • プロジェクトの設定に合わせてパスとファイル名を設定する必要があります
  • オプション--workers (NUM_WORKERS) gunicornがトラフィックを処理するために産卵するプロセスプロセスを指定します.一般的な考えは、式に従って設定することです2 * CPUs + 1
  • エラーが発生した場合/run/gunicorn.sock: No such file or directory , 空を作るgunicorn.sock インrun フォルダ
  • < ull >

    スーパーバイザの設定


    < p >最も重要なステップの一つは設定することですSupervisor . スーパーバイザは、ユーザーがUnixのようなオペレーティングシステムで多くのプロセスをモニターして、コントロールすることができるシステムです.私たちは、サーバー(GunCorn)が自動的にシステムを起動し、それが予期せずに終了した場合に自動的に再起動することができますことを確認する必要があります.これらのタスクはスーパーバイザによって簡単に扱うことができます.p >
    監視者のサーバピースを命名しますsupervisord そして、コマンドラインピースsupervisorctl .


    <高橋潤子>
    <> P >
    クラスをハイライト表示する
    $ sudo apt-get install supervisor
    
    < div >
    管理者は設定ファイル(. conf)で処理を管理します.見つけるでしょうsupervisord.conf イン/etc/supervisor 管理者プロセスに関連するグローバル設定を設定する.プロジェクト関連のプロセスを設定するには/etc/supervisor/conf.d プロセスを管理する
    < OL >
  • gunicorn.conf - 前の手順で設定したgunicornサーバを管理し、bashスクリプトを使用して自動的に実行します
    < div class ="LagagCount - gig - Link - tag "
    "スクリプトのID "https://gist.github.com/idris-rampurawala/d34954a476141f7b7bdf00eeca6ee1dd.js?file=gunicorn-監督.conf "/>
    < div >
  • celery_beat.conf - 定期的にタスクをキックオフするスケジューラ
    < div class ="LagagCount - gig - Link - tag "
    "スクリプトのID "https://gist.github.com/idris-rampurawala/809a673261ef2713285797670c124c20.js?file=celery-ビート監督.conf "/>
    < div >
  • celery_worker.conf - セロリの仕事を実行するセロリ労働者
    < div class ="LagagCount - gig - Link - tag "
    "スクリプトのID "https://gist.github.com/idris-rampurawala/5c6027a9a875471997e8199778f55361.js?file=celery-労働監督.conf "/>
    < div >
  • < OL >
    これらの設定ファイルを保存したら、コマンドラインユーティリティを使用して変更のスーパーバイザに通知する必要がありますsupervisorctl

    <> P >
    クラスをハイライト表示する
    # for every change in conf file, we need to execute the following commands
    $ sudo supervisorctl reread
    $ sudo supervisorctl update
    $ sudo supervisorctl start all # starting all our processes
    
    < div >
    < p >役に立つsupervisorctl コマンド< br/>
    <> P >
    クラスをハイライト表示する
    # to check the status of our processes
    $ sudo supervisorctl status <program_name|all>
    # example
    $ sudo supervisorctl status all
    celery                           RUNNING   pid 1413, uptime 7:59:29
    celerybeat                       RUNNING   pid 1411, uptime 7:59:29
    my_proj                          RUNNING   pid 1412, uptime 7:59:29
    
    # to start, stop, restart all or some of the processes
    $ sudo supervisorctl start <program_name|all>
    $ sudo supervisorctl restart <program_name|all>
    $ sudo supervisorctl stop <program_name|all>
    
    < div >

    nginxの設定


    < p >はジャンゴを設定する複雑さを感じていますか?続けて!これが最後の一歩です😬 nginxの設定は簡単です.br/>
    <> P >
    クラスをハイライト表示する
    # installing Nginx
    $ sudo apt-get install nginx
    # optionally execute following command to autostart nginx on system reboot
    $ sudo update-rc.d nginx defaults
    
    < div >
    最後に、nginx設定ファイルを作成しますmyproj.conf アット/etc/nginx/conf.d NGinxからGunicorn < br/>へのリクエストを開始するには
    <> P >
    < div class ="LagagCount - gig - Link - tag "
    "スクリプトのID "https://gist.github.com/idris-rampurawala/7fb3b78c2c43fe8e1919f1a9efd78ca4.js?file=nginx- gunicorn.conf "/>
    < div >
    そして、我々は日のためにされます!br/>
    <> P >
    クラスをハイライト表示する
    $ sudo service nginx restart 
    
    < div >
    我々は、我々から我々のジャンゴルートにアクセスすることができなければなりませんhttp://<server-IP-address>


    最終語


    < p >おめでとう!👏 我々は首尾よくセロハンとRedisと一緒にUbuntuの上でdjangoプロジェクトを設定している.チェックするのを忘れないでくださいUseful Links このポストで使用されるツール/ライブラリについての詳細を読むためのリンクを見つけるために.p >

    便利なリンク⭐


    <ウル>
  • virtualenv
  • Gunicorn
  • Supervisor
  • Celery
  • Redis
  • < ull >
    私の以前のポストをチェックアウトConfigure SSH for git すべてのgitプルでパスワードを入力を取り除く😎

    <> P >
    < div class ="Lagagchen - chen link "


    < div >
    < p >私の次のポストまで😋