Django デプロイ作業(Part.5)
この記事では「Djangoのデプロイ作業」の基本的な流れを「Virtual Box」を利用して行います。作業内容は以下の通りです。
ローカル側(開発環境側)での作業
- 「settings.py」を編集する
- 利用しているパッケージを「requirements.txt」に出力する
- Githubへプロジェクトをpushする
サーバー側(本番環境側)での作業
- Virtual BoxにRocky Linux を準備する
- DBMS(この記事ではPostgreSQL)のインストールと設定
- gitのインストールと設定
- Githubからプロジェクトをクローンする
- python仮想環境の準備
- gunicornのインストールと設定
- Webサーバー(この記事ではnginx)のインストールと設定
サーバー側(本番環境側)での作業
python仮想環境の準備
Rocky Linux上でpython仮想環境を作成
Rocky Linux 9 にはすでにpython3.9がインストールされているので、これを利用してpython仮想環境を作成します。
次のコマンドでGithubからクローンしたPosプロジェクトが確認できます。このプロジェクトディレクトリをカレントディレクトリとして仮想環境を作成します。
[django@localhost pos]$ ls
Pos
Posプロジェクトへ移動します。
[django@localhost pos]$ cd Pos
中身を確認します。main.pyがあることを確認します。
[django@localhost Pos]$ ls
README.md main.py pos requirements.txt
pythonがインストールされているか、どのバージョンか、複数存在するかなどを念のため確認します。
[django@localhost Pos]$ python -V
Python 3.9.16
venvを利用してpython仮想環境「env(名前はenvでなくても構いません)」を作成します。
[django@localhost Pos]$ python3 -m venv env
中身を確認します。
[django@localhost Pos]$ ls
envが確認できます。
README.md env main.py pos requirements.txt
python仮想環境を立ち上げます。
[django@localhost Pos]$ source env/bin/activate
プロンプトが変わりpython仮想環境が立ち上がったのが確認できます。
(env) [django@localhost Pos]$
インストールされているパッケージを出力(メモするため)できる「freeze」をpipを利用してインストールします。(今後、本番環境内でいろいろなパッケージをインストールするため、そのメモをとるのにfreezeが必要になります。)
(env) [django@localhost Pos]$ pip freeze
ひとまず、Githubからクローンしたプロジェクトにあるrequirements.txtを利用して必要なパッケージをインストールします。これで開発環境側で利用していたパッケージと同じパッケージを同じバージョンで全てインストールできます。
(env) [django@localhost Pos]$ pip install -r requirements.txt
インストール後に次の表示が出た場合はpipをアップグレードしておきます。
(env) [django@localhost Pos]$ python3 -m pip install –upgrade pip
シークレットキーの生成と設定
続けて、本番環境用のシークレットキーを生成して「settings_product.py」に登録します。
manage.pyのあるディレクトリに移動してインタラクティブシェルを起動します。
(env) [django@localhost Pos]$ cd pos
(env) [django@localhost pos]$ python manage.py shell
Python 3.9.16 (main, Sep 12 2023, 00:00:00)
[GCC 11.3.1 20221121 (Red Hat 11.3.1-4)] on linux
Type “help”, “copyright”, “credits” or “license” for more information.
(InteractiveConsole)
シークレットキーの再生成をします。
>>> from django.core.management.utils import get_random_secret_key
>>>get_random_secret_key()
鍵が生成されるのでクリップボードにコピーします。(Cockpitのターミナルだと右クリックでコピーができます。)
‘xv!*********************************************7@f)’
次のコマンドでpython仮想環境に戻ります。
>>> exit()
python仮想環境に戻ったら、viエディタを利用して「settingsディレクトリ」内の「settings_product.pyファイル」にある「SECRET_KEY」部分に貼り付けます。
from .base import *
# SECURITY WARNING: keep the secret key used in production secret!
# 新しいシークレットキーを設定します。
SECRET_KEY = 'xv!*********************************************7@f)'
# SECURITY WARNING: don't run with debug turned on in production!
DEBUG = False
#この部分には本番環境でのIPアドレスを入れます。現在は「*」としています。
ALLOWED_HOSTS = [" * "]
# Database
# https://docs.djangoproject.com/en/4.1/ref/settings/#databases
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.postgresql_psycopg2',
'NAME': 'djangodatabase', # データベース名
'USER': 'djangouser', # ユーザー名
'PASSWORD': 'password', # パスワード
'HOST': '"127.0.0.1', # ループバックアドレス
'PORT': '5432', # ポート番号:5432
}
}
pythonからPostgreSQLに接続するためのモジュールのインストール
python仮想環境が作成とシークレットキーの設定ができたので、ここで初めて、pythonからPostgreSQLに接続するためのモジュールをpipを利用してインストールします。(この記事ではビルド済みの「psycopg2-binary」をインストールします。)
(env) [django@localhost Pos]$ pip install psycopg2-binary
python仮想環境を終了します。
(env) [django@localhost pos]$ deactivate
ルートユーザーに切り替えてPostgreSQLの稼働状況を確認します。
[django@localhost pos]$ su –
Password:
[root@localhost ~]# service postgresql status
以下のように表示された場合は、起動する必要があります。
Redirecting to /bin/systemctl status postgresql.service
○ postgresql.service – PostgreSQL database server
Loaded: loaded (/usr/lib/systemd/system/postgresql.service; disabled; preset: disabled)
Active: inactive (dead)
PostgreSQLを起動します。
[root@localhost ~]# systemctl start postgresql.service
ルートユーザーを抜けて再度、python仮想環境を起動します。
[root@localhost ~]# exit
logout
python仮想環境「env」を持っているディレクトリに移動します。
(この記事では「Pos」ディレクトリです。)
[django@localhost pos]$ cd ../
python仮想環境を起動します。
[django@localhost Pos]$ source env/bin/activate
「manage.py」があるディレクトリに移動します。(この記事では「Posプロジェクト」直下の「posディレクトリ」となります。)
(env) [django@localhost Pos]$ cd pos
データベースのアクセスをチェックします。
(env) [django@localhost pos]$ python manage.py check –database default
System check identified no issues (0 silenced).
マイグレーションします。
(env) [django@localhost pos]$ python manage.py makemigrations
No changes detected
(env) [django@localhost pos]$ python manage.py migrate
Djangoアプリケーションのスーパーユーザーを作成します。
(env) [django@localhost pos]$ python manage.py createsuperuser
ユーザー名 (leave blank to use ‘django’): admin
メールアドレス:
Password: ←パスワードを入力
Password (again): ←確認としてパスワードを再度入力
このパスワードは ユーザー名 と似すぎています。
このパスワードは短すぎます。最低 8 文字以上必要です。
このパスワードは一般的すぎます。
Bypass password validation and create user anyway? [y/N]: y
Superuser created successfully.
(env) [django@localhost pos]$
ここまでで、DjangoとPostgreSQLの連携の設定が終了しました。
Djangoデプロイの第5回目の記事は以上です。次回はGunicornの準備からです。
ブックマークのすすめ
「ほわほわぶろぐ」を常に検索するのが面倒だという方はブックマークをお勧めします。ブックマークの設定は別記事にて掲載しています。
os.environを利用して環境変数からの取り出しもできますが、今回は直接貼り付けています。