はじめに
以前、下記記事でDjango環境を構築したが、昔作った環境を最新バージョンで作り直してみたくなったので、その内容を記載いたします。
前提条件
- 今回構築するDjango環境は、DBはPostgreSQLにし、それ以外は基本デフォルトの構成で構築します。
- 今回は、検証目的で環境を構築するので、基本はrootユーザで作業を実施しますので、その点はご了承ください。
- 今回使用するOSバージョンは下記である。
# cat /etc/redhat-release
Red Hat Enterprise Linux release 9.2 (Plow)
- 今回使用するPython バージョンは下記である。
# python3.11 -V
Python 3.11.2
- 今回使用するPostgreSQLバージョンは下記である。
# postgres --version
postgres (PostgreSQL) 16.0
環境構築
(1)Python環境のセットアップ
Redhat9の環境では、インストール時にマイナーバージョンまで指定しないといけないので、下記コマンドでインストールします。
それぞれのバージョンは下記の通りである。
[root@ip-10-192-0-181 ~]# dnf install python3.11 python3.11-pip
[root@ip-10-192-0-181 ~]# python3.11 -V
Python 3.11.2
[root@ip-10-192-0-181 ~]# pip3.11 -V
pip 22.3.1 from /usr/lib/python3.11/site-packages/pip (python 3.11)
(2)PostgreSQL環境のセットアップ
続いて、PostgreSQL16.0の環境を以下内容で構築。
[root@ip-10-192-0-181 ~]# dnf install https://download.postgresql.org/pub/repos/yum/reporpms/EL-9-x86_64/pgdg-redhat-repo-latest.noarch.rpm
[root@ip-10-192-0-181 ~]# dnf module disable postgresql
[root@ip-10-192-0-181 ~]# dnf install postgresql16-server
[root@ip-10-192-0-181 ~]# vi /etc/profile
--
export PATH=/usr/pgsql-16/bin/:$PATH
※末尾に追記。
--
[root@ip-10-192-0-181 ~]# source /etc/profile
[root@ip-10-192-0-181 ~]# echo $PATH
/usr/pgsql-16/bin/:/root/.local/bin:/root/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin
[root@ip-10-192-0-181 ~]# postgres --version
postgres (PostgreSQL) 16.0
・データベースの初期化
[root@ip-10-192-0-181 ~]# postgresql-16-setup initdb
・アクセス設定を「md5」に指定
[root@ip-10-192-0-181 ~]# vi /var/lib/pgsql/16/data/pg_hba.conf
--
host all all 127.0.0.1/32 scram-sha-256
host all all ::1/128 scram-sha-256
↓
host all all 127.0.0.1/32 md5
host all all ::1/128 md5
--
・PostgreSQLを起動/自動起動及びステータス確認
[root@ip-10-192-0-181 ~]# systemctl start postgresql-16 && systemctl enable postgresql-16
[root@ip-10-192-0-181 ~]# systemctl status postgresql-16
・Django用のDB構築
[root@ip-10-192-0-181 ~]# sudo -u postgres psql -U postgres
postgres=# CREATE USER django WITH PASSWORD 'django';
postgres=# CREATE DATABASE djangodb OWNER django;
postgres=# \l djangodb
List of databases
Name | Owner | Encoding | Locale Provider | Collate | Ctype | ICU Locale | ICU Rules | Access privileges
----------+--------+----------+-----------------+-------------+-------------+------------+-----------+-------------------
djangodb | django | UTF8 | libc | en_US.UTF-8 | en_US.UTF-8 | | |
(1 row)
postgres=# \q
(3)Django環境のセットアップ
Djangoの初期構築は、下記内容で実施した。
[root@ip-10-192-0-181 ~]# mkdir /opt/django && cd /opt/django
[root@ip-10-192-0-181 ~]# pip3.11 install virtualenv
[root@ip-10-192-0-181 ~]# virtualenv django
[root@ip-10-192-0-181 ~]# source django/bin/activate
(django) [root@ip-10-192-0-181 ~]# pip3.11 install django psycopg2-binary django-bootstrap4
(django) [root@ip-10-192-0-181 django]# pip3.11 list
Package Version
----------------- -------
asgiref 3.7.2
beautifulsoup4 4.12.2
Django 4.2.7
django-bootstrap4 23.2
pip 23.3.1
psycopg2-binary 2.9.9
setuptools 68.2.2
soupsieve 2.5
sqlparse 0.4.4
wheel 0.41.2
(django) [root@ip-10-192-0-181 ~]# python3.11 -m django --version
4.2.7
プロジェクト「qiita」を生成する。
※ドットをつけて「startproject」を実施することで、カレントディレクトリ直下にDjangoプロジェクトを生成することができる。(無駄なディレクトリ階層を作らない)
(django) [root@ip-10-192-0-181 ~]# django-admin startproject qiita .
Djangoプロジェクト全体の設定値を修正
#変更点①(接続許可範囲を設定)
ALLOWED_HOSTS = []
↓
ALLOWED_HOSTS = ['*']
#変更点②(DBをsqliteからPostgreSQLに変更)
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.sqlite3',
'NAME': os.path.join(BASE_DIR, 'db.sqlite3'),
}
}
↓
DATABASES = { #※1
'default': {
'ENGINE': 'django.db.backends.postgresql_psycopg2',
'NAME': 'djangodb',
'USER': 'django',
'PASSWORD': 'django',
'HOST': 'localhost',
'PORT': '',
}
}
#変更点③(Djangoの表示言語を変更)
LANGUAGE_CODE = 'en-us'
↓
LANGUAGE_CODE = 'ja'
#変更点④(タイムゾーンを変更)
TIME_ZONE = 'UTC'
↓
TIME_ZONE = 'Asia/Tokyo'
※1:Djangoでは、setting.pyにデータベースの接続情報を定義しとくだけで、DBとの連携が可能になる
以下の接続情報をもとに、アプリとの連携を行っている。
データベース名:djangodb
ユーザ名:django
パスワード:django
ホスト名:localhost
ポート:指定無しなので、PostgreSQLのデフォルトポートの「5432」が使用される。
マイグレーションを実施
(django) [root@ip-10-192-0-181 ~]# python3.11 manage.py migrate
Operations to perform:
Apply all migrations: admin, auth, contenttypes, sessions
Running migrations:
Applying contenttypes.0001_initial... OK
Applying auth.0001_initial... OK
Applying admin.0001_initial... OK
Applying admin.0002_logentry_remove_auto_add... OK
Applying admin.0003_logentry_add_action_flag_choices... OK
Applying contenttypes.0002_remove_content_type_name... OK
Applying auth.0002_alter_permission_name_max_length... OK
Applying auth.0003_alter_user_email_max_length... OK
Applying auth.0004_alter_user_username_opts... OK
Applying auth.0005_alter_user_last_login_null... OK
Applying auth.0006_require_contenttypes_0002... OK
Applying auth.0007_alter_validators_add_error_messages... OK
Applying auth.0008_alter_user_username_max_length... OK
Applying auth.0009_alter_user_last_name_max_length... OK
Applying auth.0010_alter_group_name_max_length... OK
Applying auth.0011_update_proxy_permissions... OK
Applying auth.0012_alter_user_first_name_max_length... OK
Applying sessions.0001_initial... OK
Django管理者ユーザを設定
※メールアドレスは、必須の入力項目ではないので、入力しなくても可。
(django) [root@ip-10-192-0-181 ~]# python3.11 manage.py createsuperuser
ユーザー名 (leave blank to use 'root'):
メールアドレス:
Password:
Password (again):
Superuser created successfully.
Appを起動し、WEBへのアクセス確認。
※指定のURLにアクセスし、無事にアクセスができればOKとする。
※管理者サイトに行く際は、「http://10.192.0.181:8000/admin」 のように「末尾に/admin」を付与してアクセスができる。
(django) [root@ip-10-192-0-181 ~]# python3.11 manage.py runserver 10.192.0.181:8000
Watching for file changes with StatReloader
Performing system checks...
System check identified no issues (0 silenced).
November 01, 2023 - 18:17:58
Django version 4.2.7, using settings 'qiita.settings'
Starting development server at http://10.192.0.181:8000/
Quit the server with CONTROL-C.
最後に
一応管理者サイトまでアクセスできることの確認ができたので、最新バージョンで構築し直すタスクに関しては、一旦は終わりにします。
以前は、それ以降のこともやっていたので、興味がある方は、下記記事を参照してみてください。
ではでは( `ー´)ノ