概要

前回(さくらVPS、お名前ドメインでデプロイ)のつづき。

Apache 環境で Sqlite じゃなくて MySQL を使うようにする。ぼくが MySQL 使うことにしたのは、 Sqlite は同時アクセスに弱いってどっかで読んだからだ。テスト環境用設定では Sqlite が読まれて、本番環境用では MySQL が読まれるようにする。

Django で Mysql を使う

だけど本番でも manage.py は使うんだよな。 createsuperuser したり loaddata したりね。そういうときは「manage.py を使いつつ本番用設定を使いたい」ってなるはずだ。そのために --settings オプションが用意されているよ。

 

MySQL 準備

provision.sh を編集していく。

MySQL 本体

provision.sh で以下のように書いてたところを……

# よくわかってないけど yum 先輩のアップみたいなもんを行う。
yum makecache fast
yum update -y

# 
# MySQL の設定を書く予定。
# 

こうする。 MySQL は下のコマンドにも関わってくるから yum のすぐ下に書く。

# よくわかってないけど yum 先輩のアップみたいなもんを行う。
yum makecache fast
yum update -y

# MySQL をインストール。
touch     /etc/yum.repos.d/MariaDB.repo
chmod 777 /etc/yum.repos.d/MariaDB.repo
cat << __EOF__ > /etc/yum.repos.d/MariaDB.repo
[mariadb]
name = MariaDB
baseurl = http://yum.mariadb.org/10.3/centos7-amd64
gpgkey=https://yum.mariadb.org/RPM-GPG-KEY-MariaDB
gpgcheck=1
__EOF__
yum install -y MariaDB-server MariaDB-client
systemctl start mysqld

# とりあえず root:password でログインできるように。
mysqladmin -u root password 'password'

# MySQL 初期設定。文字コードとか Django が使うデータベース。
mysql -u root -ppassword << __EOF__
SET character_set_database=utf8;
SET character_set_server=utf8;
CREATE DATABASE app;
__EOF__

ともなう変更

同じく provision.sh でこう書いてたところを……

# migrate を行う。
# manage.py だとテスト環境の DB 設定を使ってしまうので、あとで本番用設定を使うようオプションをつける予定。
# まだ MySQL がないからあとでね。
python /vagrant/manage.py migrate

こうする。

# migrate を行う。
# manage.py はテスト環境の DB 設定を使うので、本番用設定を使うようオプションをつける。
python /vagrant/manage.py migrate --settings=config.settings.for_production

テスト環境用の設定で migrate したら MySQL じゃなくて Sqlite に書き込んじゃうからね。

冒頭にも書いたけれど、以降 manage.py を使いつつも本番用 DB をいじってほしいときは --settings=config.settings.for_production をつけないとダメ。

ファイアウォールの設定変更(任意)

# ファイアウォールの設定。
systemctl restart firewalld
firewall-cmd --add-service=http  --zone=public --permanent
firewall-cmd --add-service=https --zone=public --permanent
# 外部から DB を覗いてみたいならこれを書く。
firewall-cmd --add-service=mysql --zone=public --permanent
systemctl restart firewalld

 

Django が MySQL を使う設定

今回必要なライブラリを用意しとく

pymysql が増える。

$ cat << __EOF__ > requirements.txt
Django==2.1.8
mod-wsgi==4.6.5
PyMySQL==0.9.3
pytz==2019.1
__EOF__

設定追加

config/settings/for_production.py で以下のように書いてたところを……

# 
# ここに MySQL の設定を書く予定。
# 

こうする。

import pymysql
DATABASES = {
    'default': {
        'ENGINE'   : 'django.db.backends.mysql',
        'NAME'     : 'app'                     ,
        'USER'     : 'root'                    ,
        'PASSWORD' : 'password'                ,
        'HOST'     : 'localhost'               ,
        'PORT'     : '3306'                    ,
    }
}
pymysql.install_as_MySQLdb()

 

設定を適用

provision.sh を更新したので読み込みなおす。

$ vagrant provision

 

次回予告

ちなみに前回作った VPS の本番環境に反映するときは、変更ファイルを同じ手順でアップロードして provision.sh を実行すればよい。

$ sudo bash /vagrant/provision.sh

次はベーシック認証とかそのへんかな。

# おつかれやんした git commit。

$ git add --all
$ git commit -m "本番環境に MySQL 追加"