Postgres、Nginx、Gunicornを使用してDjangoをインストールおよび構成する方法
前提条件
このチュートリアルは、Debian 7またはLinuxの同様のディストリビューション(Ubuntuなど)を使用してドロップレット(VPS)を既にセットアップしていることを前提としています。 まだこれを行っていない場合は、ドロップレットの設定に関するチュートリアルここに従ってください。
便宜上、このチュートリアルを2つの部分に分けました。 最初の部分(ステップ1〜6)は、インストールのみをカバーしています。 インストールのサポートが必要なだけの上級Djangoユーザーの場合は、手順6で停止できます。 すでにすべてがインストールされていて、すべてを構成する方法を知りたい場合は、手順7に進んでください。 最初から最後まで助けが必要だと感じた場合は、順番に手順を実行するだけで問題はありません。 始めましょう!
ステップ1:パッケージを更新する
何かをする前に、VPSにインストールされているすべてのパッケージが最新であることを確認する必要があります。 これを行うには、SSH経由で目的のVPSに接続し、次のコマンドを実行します。
sudo apt-get update
sudo apt-get upgrade
最初のコマンドは、apt-getで管理されているパッケージの更新をダウンロードします。 2番目のコマンドは、ダウンロードされた更新をインストールします。 上記のコマンドを実行した後、インストールする更新がある場合は、更新をインストールするかどうかを指定するように求められる可能性があります。 この場合は、「y」と入力し、プロンプトが表示されたら「Enter」を押してください。
ステップ2:Virtualenvをインストールして作成する
virtualenvのインストールは非常に簡単です。 以下のコマンドを実行するだけです。
sudo apt-get install python-virtualenv
これですべてです。 次に、virtualenvを作成して、Djangoやその他のPythonパッケージをその中にインストールできるようにします。
sudo virtualenv /opt/myenv
「/opt」ディレクトリに新しいディレクトリ「myenv」が作成されたことに注意してください。 これは、virtualenvが存在する場所です。 「/opt/ myenv」を、virtualenvをインストールする場所へのパスに置き換えてください。 私は通常、envを/ optに配置しますが、これは厳密に優先されます。 VPSのルートに「webapps」という名前のディレクトリを作成する人もいます。 自分にとって最も意味のある方法を選択してください。
ステップ3:Djangoをインストールする
次に、virtualenvをアクティブ化して、Pythonパッケージをインストールするときにvirtualenvにインストールするようにする必要があります。 これは、virtualenvをアクティブ化する方法です。
source /opt/myenv/bin/activate
これで、ターミナルプロンプトの先頭に「(myenv)」が追加されたことがわかります。 これは、仮想環境がいつアクティブになるか、VPSに複数の仮想環境がある場合にどの仮想環境がアクティブになるかを知るのに役立ちます。
virtualenvがアクティブになったら、Djangoをインストールできます。 これを行うには、easy_installによく似たPythonパッケージマネージャーであるpipを使用します。 実行するコマンドは次のとおりです。
pip install django
これで、virtualenvにDjangoがインストールされました。 それでは、データベースサーバーを稼働させましょう。
ステップ4:PostgreSQLをインストールする
ほとんどのDjangoユーザーは、データベースサーバーとしてPostgreSQLを使用することを好みます。 これはMySQLよりもはるかに堅牢であり、DjangoORMはMySQLやMSSQLなどよりもPostgreSQLではるかにうまく機能します。
この部分ではvirtualenvをアクティブにする必要がないため、次のコマンドを実行して非アクティブ化します。
deactivate
これにより、現在アクティブなvirtualenvは常に非アクティブ化されます。 次に、次のコマンドを使用してPostgreSQLがDjangoと連携するための依存関係をインストールする必要があります。
sudo apt-get install libpq-dev python-dev
これが完了したので、次のようにPostgreSQLをインストールします。
sudo apt-get install postgresql postgresql-contrib
これでPostgreSQLがマシンにインストールされ、ロールする準備が整いました。
ステップ5:NGINXをインストールする
NGINXは、信じられないほど高速で軽量のWebサーバーです。 これを使用して、Djangoアプリの静的ファイルを提供します。 インストールするには、次のコマンドを実行するだけです。
sudo apt-get install nginx
NGINXを開始する必要があることに注意してください。ただし、VPSの構成を開始するときにこれについて説明します。
ステップ6:Gunicornをインストールする
Gunicornは非常に強力なPythonWSGIHTTPサーバーです。 これはPythonパッケージであるため、最初にvirtualenvをアクティブ化してインストールする必要があります。 これが私たちのやり方です:
source /opt/myenv/bin/activate
ターミナルプロンプトの最初に追加された「myenv」が表示されていることを確認してください。 virtualenvがアクティブになったら、次のコマンドを実行します。
pip install gunicorn
これで、Gunicornがvirtualenv内にインストールされました。
すべてをインストールするだけの場合は、ここで停止してください。 それ以外の場合は、すべてが連携して機能するように構成し、ウェブ上の他のユーザーがアプリにアクセスできるようにする方法について、引き続き説明してください。
ステップ7:PostgreSQLを構成する
PostgreSQLを使用して構成を開始しましょう。 PostgreSQLでは、データベースを作成し、ユーザーを作成し、作成したユーザーに作成したデータベースへのアクセスを許可する必要があります。 次のコマンドを実行して開始します。
sudo su - postgres
ターミナルプロンプトに「postgres@yourserver」と表示されます。 この場合は、次のコマンドを実行してデータベースを作成します。
createdb mydb
これでデータベースが作成され、コマンドを変更しなかった場合は「mydb」という名前が付けられます。 データベースには任意の名前を付けることができます。 次に、次のコマンドを使用してデータベースユーザーを作成します。
createuser -P
これで、一連の6つのプロンプトが表示されます。 最初のものは、新しいユーザーの名前を尋ねます。 好きな名前を使用してください。 次の2つのプロンプトは、パスワードの入力と、新しいユーザーのパスワードの確認です。 最後の3つのプロンプトでは、「n」と入力して「Enter」を押します。 これにより、新しいユーザーは、アクセスを許可したものにのみアクセスでき、他には何もアクセスできなくなります。 次に、次のようにPostgreSQLコマンドラインインターフェイスをアクティブにします。
psql
最後に、次のコマンドを使用して、この新しいユーザーに新しいデータベースへのアクセスを許可します。
GRANT ALL PRIVILEGES ON DATABASE mydb TO myuser;
これで、PostgreSQLデータベースと、そのデータベースにアクセスするためのユーザーができました。 これで、Djangoをインストールして、新しいデータベースを使用するように設定できます。
ステップ8:Djangoプロジェクトを作成する
さらに先に進むには、テストするDjangoプロジェクトが必要です。 これにより、私たちが行っていることが機能しているかどうかを確認できます。 次のように、ディレクトリをvirtualenvのディレクトリ(私の場合は/ opt / myenv)に変更します。
cd /opt/myenv
次に、virtualenvがアクティブであることを確認します。 よくわからない場合は、次のコマンドを実行して、アクティブになっていることを確認してください。
source /opt/myenv/bin/activate
virtualenvがアクティブになったら、次のコマンドを実行して新しいDjangoプロジェクトを開始します。
django-admin.py startproject myproject
virtualenvディレクトリ内に「myproject」という新しいディレクトリが表示されます。 これは、新しいDjangoプロジェクトファイルが存在する場所です。
Djangoがデータベースと通信できるようにするには、PostgreSQLのバックエンドをインストールする必要があります。 これを行うには、virtualenvがアクティブであることを確認し、次のコマンドを実行します。
pip install psycopg2
ディレクトリを新しい「myproject」ディレクトリに変更してから、次のように「myproject」とも呼ばれるそのサブディレクトリに変更します。
cd /opt/myenv/myproject/myproject
選択したエディターでsettings.pyファイルを編集します。
nano settings.py
データベース設定を見つけて、次のように編集します。
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.postgresql_psycopg2', # Add 'postgresql_psycopg2', 'mysql', 'sqlite3' or 'oracle'.
'NAME': 'mydb', # Or path to database file if using sqlite3.
# The following settings are not used with sqlite3:
'USER': 'myuser',
'PASSWORD': 'password',
'HOST': 'localhost', # Empty for localhost through domain sockets or '127.0.0.1' for localhost through TCP.
'PORT': '', # Set to empty string for default.
}
}
ファイルを保存して終了します。 次に、1つのディレクトリを上に移動して、メインのDjangoプロジェクトディレクトリ(/ opt / myenv / myproject)に移動します。
cd /opt/myenv/myproject
次のコマンドをまだ実行していない場合は、virtualenvをアクティブ化します。
source /opt/myenv/bin/activate
virtualenvをアクティブにして、次のコマンドを実行して、Djangoが初期構成とその他のテーブルをデータベースに追加できるようにします。
python manage.py syncdb
インストールされたテーブルを説明する出力が表示され、その後にスーパーユーザーを作成するかどうかを尋ねるプロンプトが表示されます。 これはオプションであり、Djangoの認証システムを使用するかDjango管理者を使用するかによって異なります。
ステップ9:Gunicornを設定する
Gunicornの構成は、アプリケーションのニーズに非常に固有です。 ここでは、いくつかの異なる設定でGunicornを実行する方法について簡単に説明します。
まず、デフォルト設定でGunicornを実行する方法について説明します。 デフォルトのGunicornを実行するコマンドは次のとおりです。
gunicorn_django --bind yourdomainorip.com:8001
必ず「yourdomainorip.com」をドメイン、または必要に応じてVPSのIPアドレスに置き換えてください。 次に、Webブラウザーにアクセスし、 yourdomainorip.com:8001 にアクセスして、何が得られるかを確認します。 Djangoのウェルカム画面が表示されます。
ただし、上記のコマンドの出力をよく見ると、Gunicornワーカーが1つだけ起動していることがわかります。 大規模なVPSで大規模なアプリケーションを起動する場合はどうなりますか? 何も怖くない! 私たちがする必要があるのは、コマンドを次のように少し変更することです。
gunicorn_django --workers=3 --bind yourdomainorip.com:8001
これで、1人のワーカーではなく、3人のワーカーが起動されたことがわかります。 この番号は、ニーズに合わせて変更できます。
Gunicornをrootとして起動するコマンドを実行したため、Gunicornはrootとして実行されています。 あなたがそれを望まない場合はどうなりますか? 繰り返しになりますが、上記のコマンドを少し変更して、次のことに対応できます。
gunicorn_django --workers=3 --user=nobody --bind yourdomainorip.com:8001
Gunicornにさらに多くのオプションを設定する場合は、Gunicornの実行時に呼び出すことができる構成ファイルを設定することをお勧めします。 これにより、Gunicornコマンドの読み取り/構成がはるかに短く簡単になります。
gunicornの設定ファイルはどこにでも置くことができます。 簡単にするために、virtualenvディレクトリに配置します。 次のように、virtualenvのディレクトリに移動します。
cd /opt/myenv
次に、好みのエディターで構成ファイルを開きます(以下の例ではnanoを使用しています)。
sudo nano gunicorn_config.py
次の内容をファイルに追加します。
command = '/opt/myenv/bin/gunicorn'
pythonpath = '/opt/myenv/myproject'
bind = '127.0.0.1:8001'
workers = 3
user = nobody
ファイルを保存して終了します。 これらのオプションは、gunicornバイナリへのパスを設定し、プロジェクトディレクトリをPythonパスに追加し、Gunicornをバインドするドメインとポートを設定し、gunicornワーカーの数を設定し、Gunicornを実行するユーザーを設定します。
サーバーを実行するには、今回はもう少し長いコマンドが必要です。 プロンプトに次のコマンドを入力します。
/opt/myenv/bin/gunicorn -c /opt/myenv/gunicorn_config.py myproject.wsgi
上記のコマンドで「-c」フラグを渡すことに気付くでしょう。 これは、使用したい設定ファイルがあることをgunicornに通知します。このファイルは、「-c」フラグの直後に渡します。 最後に、Pythonのドット付き表記参照をWSGIファイルに渡して、GunicornがWSGIファイルの場所を認識できるようにします。
この方法でGunicornを実行するには、Gunicornを独自の画面セッションで実行するか(screenの使用に精通している場合)、「ctrl + z」を押してから「bg」と入力し、すべて「Enter」を押してプロセスをバックグラウンドで実行する必要があります。 Gunicornコマンドを実行した直後。 これによりプロセスがバックグラウンドで実行されるため、現在のセッションが閉じられた後も実行が継続されます。 これはまた、VPSが再起動された場合、または何らかの理由でクラッシュした場合に、Gunicornを手動で起動または再起動する必要があるという問題を引き起こします。 この問題を解決するために、ほとんどの人は監視対象を使用してGunicornを管理し、必要に応じて起動/再起動します。 Supervisordのインストールと構成については、ここにある別の記事で説明されています。
最後に、これはGunicornの構成オプションの完全なリストではありません。 このトピックの詳細については、gunicorn.orgにあるGunicornのドキュメントをお読みください。
ステップ10:NGINXを構成する
夢中になってしまう前に、まず次のようにNGINXを起動しましょう。
sudo service nginx start
静的ファイルを処理するようにNGINXを設定しているだけなので、最初に静的ファイルを保存する場所を決定する必要があります。 Djangoプロジェクトのsettings.pyファイルを開き、STATIC_ROOT行を次のように編集します。
STATIC_ROOT = "/opt/myenv/static/"
このパスは、どこにでも配置できます。 ただし、クリーンにするために、通常はDjangoプロジェクトフォルダーのすぐ外に配置しますが、virtualenvディレクトリ内に配置します。
静的ファイルを配置する場所を設定したので、それらのファイルを処理するようにNGINXを構成しましょう。 次のコマンドを使用して、新しいNGINX構成ファイルを開きます(「nano」を選択したエディターに置き換えることができます)。
sudo nano /etc/nginx/sites-available/myproject
ファイルには任意の名前を付けることができますが、標準では、構成しているサイトに関連する名前を付けます。 次に、ファイルに以下を追加します。
server {
server_name yourdomainorip.com;
access_log off;
location /static/ {
alias /opt/myenv/static/;
}
location / {
proxy_pass http://127.0.0.1:8001;
proxy_set_header X-Forwarded-Host $server_name;
proxy_set_header X-Real-IP $remote_addr;
add_header P3P 'CP="ALL DSP COR PSAa PSDa OUR NOR ONL UNI COM NAV"';
}
}
ファイルを保存して終了します。 上記の構成により、NGINXは、Djangoプロジェクト用に設定した静的ディレクトリからyourdomainorip.com/static/で要求されたものすべてを処理するように設定されています。 yourdomainorip.com でリクエストされたものはすべて、Gunicornに実行するように指示したポート8001でローカルホストにプロキシされます。 他の行は、リクエストのホスト名とIPアドレスがGunicornに渡されることを保証します。 これがないと、すべてのリクエストのIPアドレスは127.0.0.1になり、ホスト名はVPSホスト名になります。
次に、この構成ファイルを指すシンボリックリンクを/ etc / nginx/sites-enabledディレクトリに設定する必要があります。 これが、NGINXがこのサイトがアクティブであることを認識する方法です。 次のように、ディレクトリを/ etc / nginx/sites-enabledに変更します。
cd /etc/nginx/sites-enabled
そこで、次のコマンドを実行します。
sudo ln -s ../sites-available/myproject
これにより、必要なシンボリックリンクが作成され、NGINXがサイトの新しい構成ファイルを尊重することがわかります。
さらに、デフォルトのnginxサーバーブロックを削除します。
`sudo rm default ‘
ただし、変更を探すことができるように、NGINXを再起動する必要があります。 これを行うには、以下を実行します。
sudo service nginx restart
以上です! これで、DjangoがインストールされてPostgreSQLで動作し、静的コンテンツを提供するNGINXとアプリサーバーとして機能するGunicornを使用してアプリにWebアクセスできます。 ご不明な点やアドバイスがございましたら、コメント欄にご記入ください。