ローカルDjangoアプリをVPSにデプロイする方法
前提条件
このチュートリアルは、選択したオペレーティングシステムで仮想プライベートサーバーをすでにセットアップしていることを前提としています(このチュートリアルではDebian 7を使用しました。Ubuntuも機能します)。 まだ行っていない場合は、このチュートリアルに従うことができます。 開始する前に、データベースサーバー、Webサーバー、およびvirtualenvが既にインストールされているDjangoアプリケーションをホストするようにクラウドサーバーが適切に構成されていることを確認してください。 まだこれを行っていない場合は、 Django用のサーバーのセットアップに関する手順1〜6に従ってください。
ステップ1:パッケージを更新する
何かをする前に、aptで管理されているすべてのパッケージ、または選択したパッケージマネージャーが最新であることを確認することをお勧めします。 これを行うには、SSH経由でVPSに接続し、次のコマンドを実行します。
sudo apt-get update
sudo apt-get upgrade
最初のコマンドは、apt-getで管理されているパッケージの更新をダウンロードします。 2番目のコマンドは、ダウンロードされた更新をインストールします。 上記のコマンドを実行した後、インストールする更新がある場合は、これらの更新をインストールするかどうかを示すように求められる可能性があります。 この場合は、「y」と入力し、プロンプトが表示されたら「Enter」を押してください。
ステップ2:Virtualenvを設定する
前提条件を完了している場合、これはすでに設定されているはずであり、このステップをスキップできます。
次に、プロジェクトファイルとPythonパッケージが存在するvirtualenvを設定する必要があります。 virtualenvを使用しない場合は、Djangoプロジェクトが存在するディレクトリを作成し、ステップ3に進みます。
virtualenvを作成するには、次のコマンドを実行します。 パスを仮想プライベートサーバー上のプロジェクトプロジェクトの目的のパスに置き換えることを忘れないでください。
virtualenv /opt/myproject
virtualenvを設定したので、virtualenvをアクティブにして、pipを使用してDjangoおよびその他の必要なPythonパッケージをインストールできます。 以下は、virtualenvをアクティブ化し、pipを使用してDjangoをインストールする方法の例です。
source /opt/myproject/bin/activate
pip install django
これで、プロジェクトのデータベースを作成する準備が整いました。
ステップ3:データベースを作成する
このチュートリアルでは、データベースサーバーとしてPostgreSQLを使用することを前提としています。 そうでない場合は、選択したデータベースサーバー用のデータベースを作成する方法に関するドキュメントを確認する必要があります。
PostgreSQLでデータベースを作成するには、次のコマンドを実行することから始めます。
sudo su - postgres
ターミナルプロンプトに「postgres@yourserver」と表示されます。 その場合は、次のコマンドを実行してデータベースを作成し、「mydb」を目的のデータベース名に置き換えてください。
createdb mydb
次に、次のコマンドを使用してデータベースユーザーを作成します。
createuser -P
これで、一連の6つのプロンプトが表示されます。 1つ目は、新しいユーザーの名前を尋ねます(任意の名前を使用してください)。 次の2つのプロンプトは、パスワードの入力と、新しいユーザーのパスワードの確認です。 最後の3つのプロンプトでは、「n」と入力して「Enter」を押します。 これにより、新しいユーザーは、アクセスを許可したものにのみアクセスでき、他には何もアクセスできなくなります。 次に、次のようにPostgreSQLコマンドラインインターフェイスをアクティブにします。
psql
最後に、次のコマンドを使用して、この新しいユーザーに新しいデータベースへのアクセスを許可します。
GRANT ALL PRIVILEGES ON DATABASE mydb TO myuser;
これで、データベースとそのデータベースにアクセスするためのユーザーが設定されました。 次に、静的ファイルを提供するようにWebサーバーを構成する作業を行うことができます。
ステップ4:VPSを構成する
サイトの新しい構成ファイルを作成する必要があります。 このチュートリアルでは、クラウドサーバーとしてNGINXを使用していることを前提としています。 そうでない場合は、この手順を完了するために、選択したWebサーバーのドキュメントを確認する必要があります。
NGINXの場合、次のコマンドを実行してサイトのWebサーバー構成ファイルを作成および編集し、コマンドの最後にある「myproject」をプロジェクトの名前に置き換えてください。
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 でリクエストされたものはすべて、ポート8001でローカルホストにプロキシされます。ポート8001で、Gunicorn(または選択したアプリサーバー)に実行を指示します。 他の行は、リクエストのホスト名と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を再起動すると、次のように設定されます。
sudo service nginx restart
再起動時に次のエラーが表示される場合があります。
server_names_hash, you should increase server_names_hash_bucket_size: 32
‘/etc/nginx/nginx.conf’を編集することでこれを解決できます
ファイルを開き、次の行のコメントを解除します。
server_names_hash_bucket_size 64;
それでは、プロジェクトファイルをドロップレットにプッシュしてみましょう。
ステップ5:ローカルDjangoプロジェクトをドロップレットに移動する
ここにはいくつかのオプションがあります:FTP、SFTP、SCP、Git、SVNなど。 Gitを使用して、ローカルプロジェクトファイルを仮想プライベートサーバーに転送します。
virtualenvを設定した場所、またはプロジェクトを配置したい場所のディレクトリを見つけます。 次のコマンドを使用して、このディレクトリに移動します。
cd /opt/myproject
そこに到達したら、プロジェクトファイルが存在する新しいディレクトリを作成します。 これは、次のコマンドで実行できます。
mkdir myproject
同じ名前の2つのディレクトリがあると冗長に見えるかもしれません。 ただし、virtualenv名とプロジェクト名が同じになるようにします。
次に、次のコマンドを使用して新しいディレクトリに移動します。
cd myproject
プロジェクトがすでにGitリポジトリにある場合は、コードがすべてコミットされてプッシュされていることを確認してください。 これが当てはまるかどうかを確認するには、コンピューターのターミナル(Macの場合)またはコマンドプロンプト(PCの場合)でローカルに次のコマンドを実行します。
git status
出力にファイルが表示されない場合は、問題ないはずです。 次に、ドロップレットにSSHで接続し、次のコマンドを使用してGitをインストールします。
sudo apt-get install git
「y」を入力して「Enter」を押して、プロンプトに必ず「はい」と答えてください。 Gitをインストールしたら、次のコマンドを使用して、Gitを使用してプロジェクトファイルをプロジェクトディレクトリにプルします。
git clone https://webaddressforyourrepo.com/path/to/repo .
GitホスティングにGithubまたはBitbucketを使用している場合は、このコマンドを取得するために使用できるcloneボタンがあります。 必ず「。」を追加してください。 最後に。 これを行わないと、Gitはプロジェクトディレクトリ内にリポジトリ名のディレクトリを作成しますが、これは不要です。
Gitを使用しない場合は、FTPまたは別の転送プロトコルを使用して、上記の手順で作成したプロジェクトディレクトリにファイルを転送します。
あとは、アプリサーバーを設定するだけです。
ステップ6:アプリケーションサーバーをインストールして構成する
前提条件を完了している場合、これはすでに設定されているはずであり、このステップをスキップできます。
次に、アプリサーバーをインストールし、ポート8001でDjangoアプリへのリクエストをリッスンするようにする必要があります。 この例ではGunicornを使用します。 Gunicornをインストールするには、最初にvirtualenvをアクティブにします。
source /opt/myproject/bin/activate
virtualenvがアクティブになったら、次のコマンドを実行してGunicornをインストールします。
pip install gunicorn
Gunicornがインストールされたので、ドメインまたはIPのリクエストをポート8001にバインドします。
gunicorn_django --bind yourdomainorip.com:8001
これで、「ctrl + z」を押してから「bg」と入力して、プロセスをバックグラウンドで実行できます(必要に応じて)。 Gunicornのより高度な構成とセットアップは、このチュートリアルのステップ9にあります。
これで、最終ステップの準備が整いました。
ステップ7:アプリを構成する
最後のステップは、本番用にアプリを構成することです。 必要な変更はすべて、Djangoプロジェクトの「settings.py」ファイルにあります。 次のコマンドでこのファイルを開きます。
sudo nano /opt/myproject/myproject/settings.py
設定ファイルへのパスは、プロジェクトの設定方法によって異なる場合があります。 それに応じて、上記のコマンドのパスを変更します。
設定ファイルを開いた状態で、DEBUG設定をFalseに変更します。
DEBUG = False
これにより、デバッグ情報を含むスタックトレースをユーザーに提供するのではなく、エラーが404または500エラーページとしてユーザーに表示されるようになります。
次に、以下に示すものの代わりにデータベース名、ユーザー、およびパスワードを使用して、データベース設定を次のように編集します。
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.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': '', # Empty for localhost through domain sockets or '127.0.0.1' for localhost through TCP.
'PORT': '', # Set to empty string for default.
}
}
次に、静的ファイルの設定を編集します。
STATIC_ROOT = '/opt/myproject/static/'
STATIC_URL = '/static/'
ファイルを保存して終了します。 これで、静的ファイルを収集するだけで済みます。 「manage.py」スクリプトがあるディレクトリに移動し、次のコマンドを実行します。
python manage.py collectstatic
このコマンドは、上記のsettings.pyファイルで設定したディレクトリにすべての静的ファイルを収集します。
以上です! これで、アプリが本番環境にデプロイされ、準備が整いました。