AL@のTech Blog

個人用備忘録

【Django 入門】CentOS + MariaDBを使ってEC2インスタンス上にDjangoを構築してみた

DjangoデフォルトのデータベースはSQLite3ですが、使い慣れたMariaDBを使いたかったので、MariaDBDjangoの環境構築を行いました。

 

目次

・事前準備
Pythonインストール
MariaDBインストール
Djangoのインストール
・nginxインストール
・Gunicornインストール&環境構築
マイグレーション&起動
・動作確認

 

前提条件

publicサブネット上にあるEC2インスタンスに構築しました。

OS:CentOS 7.9.2009
Python:3.6.8
Django:3.2.13
MariaDB:5.5.68
nginx:1.20.2
gunicorn:20.1.0

 

事前準備

selinuxを無効化させます。

timedatectl set-timezone Asia/Tokyo
vi /etc/selinux/config

SELINUX=enforcing
↓
SELINUX=disabled
:wq

yum -y update
reboot

 

Pythonインストール

CentOS7ではデフォルトでpython2がインストールされていますが、python3をインストールします。

python3 -V
yum -y install python3
python3 -V

 

MariaDBインストール

mariadbをインストールさせます。

yum -y install mariadb-server python3-devel mysql-devel gcc

 

mariadbを起動させます。

systemctl start mariadb
systemctl status mariadb
systemctl enable mariadb

 

rootユーザーでログインします。

mysql -u root
create database mysite;
create user mysite@localhost identified by 'PassWord';
grant all privileges on mysite.* to 'mysite'@'localhost';
flush privileges;
exit

データベース「mysite」を作成し、mysiteユーザーへすべての権限を与えます。

また、パスワードは任意で設定してください。

 

 

作成したmysiteユーザーでログインして、データベース「mysite」が表示されることを確認します。

mysql -u mysite -p
show databases;
exit


Djangoのインストール

Djangoをインストールします。

pip3 install mysqlclient django

今回MariaDBを使うので、DjangoMariaDBを利用できるようにmysqlclientをインストールします。

 

プロジェクトを作成します。ここでは「mysite」というプロジェクトを作成します。

cd /opt/
django-admin startproject mysite

 

Djangoの設定ファイルを変更します。

vi ./mysite/settings.py

ALLOWED_HOSTS = []
ALLOWED_HOSTS = ['*']


DATABASES = { 'default': { 'ENGINE': 'django.db.backends.sqlite3', 'NAME': BASE_DIR / 'db.sqlite3', } }
DATABASES = { 'default': { 'ENGINE': 'django.db.backends.mysql', 'NAME': 'mysite', 'USER': 'mysite', 'PASSWORD': 'PassWord', 'HOST': 'localhost', 'PORT': '3306', 'OPTIONS': { 'init_command': "SET sql_mode='STRICT_TRANS_TABLES'", }, } }

LANGUAGE_CODE = 'en-us'

LANGUAGE_CODE = 'ja'


TIME_ZONE = 'UTC'

TIME_ZONE = 'Asia/Tokyo'

STATIC_ROOT = '/opt/mysite/static/'

今回はDBはMariaDBを使用しますので、DATABASESの中身をSQLite3からMariaDBへ変更します。
この時、MariaDBで作成したユーザー名、パスワードを指定してください。


また、静的ファイルの処理はnginx側で行うように設定したいと思いますので、STATIC_ROOTはプロジェクトで使用する静的ファイルの格納先を指定するよう追加します。

 

新規でstaticディレクトリを作成します。

cd /opt/mysite
mkdir /opt/mysite/static
chown appserver:appserver /opt/mysite/static
ls -l

 

nginxインストール

nginxをインストールさせます。

vi /etc/yum.repos.d/nginx.repo

[nginx]
name=nginx repo
baseurl=http://nginx.org/packages/centos/7/$basearch/
gpgcheck=0
enabled=1
:wq
yum -y install nginx

 

nginxを起動させます。

systemctl start nginx
systemctl status nginx
systemctl enable nginx

 

nginxの設定ファイルを新規作成します。

vi /etc/nginx/conf.d/mysite.conf

server {
    listen  80;
    server_name xxx.xxx.xxx.xxx;

    location /static/ {
        alias /opt/mysite/static/;
    }

    location / {
        proxy_pass http://127.0.0.1:8000;
    }
}

server_nameではパブリックIPを設定してください。

 

作成したmysite.confにエラーが出力されないことを確認して、nginxを再起動します。

nginx -t
systemctl restart nginx
systemctl status nginx

 

Gunicornインストール

gunicornを起動させるユーザーを作成します。

useradd -M appserver

 

gunicornをインストールさせます。

pip3 install gunicorn
gunicorn -v

 

gunicorn.serviceを作成します。

cd /etc/systemd/system
touch gunicorn.service
chmod 644 ./gunicorn.service

vi gunicorn.service [Unit] Description=gunicorn daemon After=network.target [Service] Type=notify PIDFile=/run/gunicorn/pid User=appserver Group=appserver RuntimeDirectory=gunicorn WorkingDirectory=/opt/mysite ExecStart=/usr/local/bin/gunicorn \ --access-logfile - \ --workers 3 \ --bind=localhost:8000 \ mysite.wsgi ExecReload=/bin/kill -s HUP $MAINPID ExecStop=/bin/kill -s TERM $MAINPID KillMode=mixed TimeoutStopSec=5 PrivateTmp=true Restart=always [Install] WantedBy=multi-user.target

UserとGroupは先ほど作成したユーザー名を指定してください。
WorkingDirectoryは作成したプロジェクトのディレクトリ先を指定してください。


先ほどgunicorn.serverで設定したPIDファイルの格納先を作成します。

mkdir /run/gunicorn
chown appserver:appserver /run/gunicorn
ll /run | grep gunicorn

 

gunicorn.serviceを作成したので、一度リロードします。

systemctl daemon-reload

 

gunicorn.serviceを起動させます。

systemctl start gunicorn
systemctl status gunicorn
systemctl enable gunicorn

 

Djangoの起動

静的ファイルを先ほど設定した/opt/mysite/staticへ配置させます。

python3 manage.py collectstatic

 

プロジェクト「mysite」で利用するデータベース「mysite」のテーブル情報を自動的に作成します。

python3 manage.py migrate

setting.pyの設定内容が誤っている、あるいはmysqlclientのインストールがない等があるとエラーが返ってきますので注意してください。

 

Djangoのスーパーユーザーを作成します。名前は任意で構わないです。
メールアドレスの設定を求められますが、空白でも特に問題ないです。

python3 manage.py createsuperuser

 

プロジェクト「mysite」を起動させます。

python3 manage.py runserver


動作確認

ブラウザでパブリックIPでアクセスすると以下の画面が表示されます。

 

 

次に「パブリックIP/admin」でアクセスするとログイン画面が表示されます。

 

作成したアカウントでログインすると以下の画面が表示されます。