DjangoをVPSにデプロイする5〜Djangoの設定編〜

DjangoをVPSにデプロイする4〜Nginx編〜の続きです。

この記事では本番環境でDjangoを動かせるようにDjango側の設定をしていきます。

前提

  • ローカルに仮想環境を構築できている
  • ローカルに.envファイルを用意できている

settings.py

ここまでこられた方は既に、開発環境と本番環境を「django-environ」等で分けられていると思いますので、settings.pyは軽く説明します。

以前も書きましたが、DATABASESのユーザー名やパスワードは本番環境と同じにすると楽です。

import environ

env = environ.Env()
environ.Env.read_env(os.path.join(BASE_DIR, '.env'))

SECRET_KEY = env('SECRET_KEY')

DEBUG = env.bool('DEBUG', False)

ALLOWED_HOSTS = ['example.com', 'www.example.com', '127.0.0.1', 'localhost']

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.postgresql',
        'NAME': env('DATABASE_NAME'),
        'USER': env('USER'),
        'PASSWORD': env('PASSWORD'),
        'HOST': '',
        'PORT': '',
    }
}

STATIC_ROOT = '/usr/share/nginx/html/プロジェクト名/static'
MEDIA_ROOT = '/usr/share/nginx/html/プロジェクト名/media'

# これを追加して下さい。
SECURE_CROSS_ORIGIN_OPENER_POLICY = None

DEBUG

デフォルトはFalesで、.envファイルにDEBUGがあれば読み込みます。

DEBUG = env.bool('DEBUG', False)

ALLOWED_HOSTS

プロジェクトのドメインやIPアドレスを記入します。

ALLOWED_HOSTS = ['example.com', 'www.example.com', '127.0.0.1', 'localhost']

DATABASES

このシリーズではPostgreSQLを使っているので、ポスグレの設定です。

env(‘ ‘)の部分は、「.env」ファイルに書いてあります。後で本番環境(VPS側)にも「.env」ファイルを作成します。

HOST

PostgreSQLを使用している場合、空のHOSTでのデータベースへの接続はUNIXドメインソケット(pg_hba.confの「local」行)を介して行われます。

UNIXドメインソケットが標準の場所にない場合は、postgresql.confのunix_socket_directoryの値と同じものを使用します。

TCPソケットで接続する場合、HOSTを’localhost’または’127.0.0.1’に設定します(pg_hba.confの’host’行)。Windowsでは、UNIXドメインソケットは使用できないため、常にHOSTを定義する必要があります。

PORT

空文字列はデフォルトのポート「5432」を意味します。

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.postgresql',
        'NAME': env('DATABASE_NAME'),
        'USER': env('USER'),
        'PASSWORD': env('PASSWORD'),
        'HOST': '',
        'PORT': '',
    }
}

ROOT

「python3 manage.py collectstatic」を実行した時、静的ファイルを本番環境のどのディレクトリにファイルを集めるかを指定します。

Nginxで書いた「location /static」と「location /media」と同じパスになります。

STATIC_ROOT = '/usr/share/nginx/html/プロジェクト名/static'
MEDIA_ROOT = '/usr/share/nginx/html/プロジェクト名/media'

SECURE_CROSS_ORIGIN_OPENER_POLICY

Cross Origin Opener Policy関連の設定です。Django 4.0からの新機能です。


Gunicornのインストール

ローカルのパッケージにGunicornを追加インストールしておきます。

本番環境にクローンした時にパッケージを一緒に入れるためです。

仮想環境を有効化
$ source env/bin/activate

gunicornをインストール
(env)$ pip install gunicorn

pipの依存関係をチェックしおく
(env)$ pip check 
No broken requirements found.

requirements.txtにパッケージを書き込む
(env)$ pip freeze > requirements.txt

.gitignore

既にこのファイルがある方は次に進んで下さい。

「.gitignore」はGitHubに上げないファイルやディレクトリを指定するものです。

manage.pyと同じ階層に、.gitignoreファイルを作成してください。

gitignore.ioでDjangoを検索して、内容をまるごとコピーして、自身の.gitignoreに貼り付けてください。

GitHub

GitHubに上げてください。


構造

これから作るディレクトリやファイルは、USERNAMEより下がローカルの環境と同じ構造になります。

🗂 home
┗🗂 USERNAME
 ┗🗂 プロジェクト名(前回作成済)
  ┣🗂 仮想環境名(これから作成)
  ┗🗂 プロジェクト名(クローンする)
   ┣📄 manage.py
   ┗📄 .env(これから作成)


VPSに仮想環境作成

SSH接続します。

$ ssh COMAND_NAME

前回作成した「USERNAME/プロジェクト名」のディレクトリに移動します。

USERNAME@xxx.xxx.xxx.xxx:~$ cd プロジェクト名

現在の位置を確認
USERNAME@xxx.xxx.xxx.xxx:プロジェクト名$  pwd
/home/USERNAME/プロジェクト名

仮想環境を作成します。

USERNAME@xxx.xxx.xxx.xxx:プロジェクト名$ python3 -m venv 仮想環境名

GithubからVPSにクローン

仮想環境があるディレクトリ(プロジェクト名のディレクトリ)にクローンします。

「https://~」は自身のものに置き換えて下さい。

$ git clone https://~

GitHubのユーザー名とトークン(パスワード)を入力するとクローンされます。

GitHubのトークンはメニューの「setting > Developer settings > Personal access tokens」で取得できます。

基本的に「repo」にチェックを入れていれば大丈夫ですが各設定は各々で。


VPSにパッケージをインストール

VPSにクローンすることができたので、仮想環境にパッケージをインストールします。

$ source 仮想環境名/bin/activate

requirements.txtからまとめてインストールします。

(仮想環境名)$ pip install -r requirements.txt

.envファイルを作成・編集

Djangoアプリに移動
(仮想環境名)$ cd プロジェクト名

.envファイルを作成
(仮想環境名)$ vi .env

ローカルにある.envの中身をコピーして貼り付けて下さい。

.envにDEBUG=Trueを書いてる方は、本番環境の.envはFalseするか消しておきましょう!


migrate

GitHubにmigrationsファイルがある方は、python3 manage.py migrateだけで大丈夫です。

(仮想環境名)$ python3 manage.py migrate

静的ファイルを集める

静的ファイルをNginxのディレクトリに集めるのでcollectstaticを実行します。

(仮想環境名)$ python3 manage.py collectstatic

これでNginxで設定した「/usr/share/nginx/html/プロジェクト名/static」に静的ファイルが集まります。


Nginxの再起動

Djangoアプリを更新した(git pull)場合はcollectstaticとNginxの再起動を毎回行います。

$ sudo systemctl restart nginx

所有者の変更

もしPermissionのエラーがでたら対象のディレクトリの所有者をUSERNAMEに変更してください。

$ sudo chown -R USERNAME ディレクトリ名

これでDjangoの設定編は終了です!

次は「DjangoをVPSにデプロイする6〜Gunicorn編〜」です。