Ubuntu14.04のDjangoアプリケーションでMySQLまたはMariaDBを使用する方法
序章
Djangoは、Pythonアプリケーションをすばやく作成するための柔軟なフレームワークです。 デフォルトでは、Djangoアプリケーションはデータを軽量のSQLiteデータベースファイルに保存するように構成されています。 これはいくつかの負荷の下でうまく機能しますが、より伝統的なDBMSは本番環境でのパフォーマンスを向上させることができます。
このガイドでは、Djangoアプリケーションで使用するためにMySQLまたはMariaDBをインストールして構成する方法を示します。 必要なソフトウェアをインストールし、アプリケーションのデータベースクレデンシャルを作成してから、このバックエンドを使用するように新しいDjangoプロジェクトを開始して構成します。
前提条件
開始するには、root以外のユーザーが設定されたクリーンなUbuntu14.04サーバーインスタンスが必要です。 非rootユーザーは、sudo
権限で構成する必要があります。 初期サーバーセットアップガイドに従って、これをセットアップする方法を学びます。
続行する準備ができたら、読み進めてください。
Ubuntuリポジトリからコンポーネントをインストールします
最初のステップは、リポジトリから必要なすべてのピースをインストールすることです。 Pythonコンポーネントをインストールして管理するために、Pythonパッケージマネージャーであるpip
をインストールします。 また、データベースソフトウェアとそれらとの対話に必要な関連ライブラリをインストールします。
以下ではMySQLとMariaDBの両方について説明しますので、使用するDBMSに関連付けられているセクションを選択してください。
MySQL
MySQLを使用する場合は、次のapt
コマンドで必要なパッケージを取得できます。
sudo apt-get update
sudo apt-get install python-pip python-dev mysql-server libmysqlclient-dev
管理用MySQLアカウントのパスワードを選択して確認するように求められます。
インストール後、次のように入力してデータベースディレクトリ構造を作成できます。
sudo mysql_install_db
次に、次のコマンドを実行して、簡単なセキュリティスクリプトを実行できます。
sudo mysql_secure_installation
インストール中にMySQLに設定した管理者パスワードの入力を求められます。 その後、一連の質問が表示されます。 別の管理者パスワードを選択するように求める最初の質問に加えて、各質問に対して「はい」を選択します。
インストールと初期データベース構成が邪魔にならないので、データベースとデータベースユーザーの作成に進むことができます。 次のセクションに進んでください。
MariaDB
MariaDBをご希望の場合は、以下の手順に従ってインストールし、必要な初期構成を実行できます。 次のように入力して、リポジトリからパッケージをインストールします。
sudo apt-get update
sudo apt-get install python-pip python-dev mariadb-server libmariadbclient-dev libssl-dev
管理用MariaDBアカウントのパスワードを選択して確認するように求められます。
次に、次のコマンドを実行して、簡単なセキュリティスクリプトを実行できます。
sudo mysql_secure_installation
インストール中にMariaDBに設定した管理者パスワードの入力を求められます。 その後、一連の質問が表示されます。 最初の質問に加えて、別の管理者パスワードを選択するように求められたら、質問ごとに[はい]を選択します。
インストールと初期データベース構成が邪魔にならないので、データベースとデータベースユーザーの作成に進むことができます。
データベースとデータベースユーザーを作成する
このガイドの残りの部分は、MySQLまたはMariaDBのどちらをインストールしたかに関係なく、そのまま従うことができます。
次のように入力して、データベースソフトウェアとの対話型セッションにログインすることから始めることができます(使用しているデータベースソフトウェアに関係なく、コマンドは同じです)。
mysql -u root -p
インストール時に選択した管理者パスワードの入力を求められます。 その後、プロンプトが表示されます。
まず、Djangoプロジェクトのデータベースを作成します。 セキュリティ上の理由から、各プロジェクトには独自の分離データベースが必要です。 このガイドではデータベースをmyproject
と呼びますが、よりわかりやすいものを選択することをお勧めします。 データベースのデフォルトタイプをUTF-8に設定します。これは、Djangoが期待するものです。
CREATE DATABASE myproject CHARACTER SET UTF8;
SQLプロンプトですべてのコマンドをセミコロンで終了することを忘れないでください。
次に、データベースへの接続とデータベースの操作に使用するデータベースユーザーを作成します。 パスワードを強力で安全なものに設定します。
CREATE USER myprojectuser@localhost IDENTIFIED BY 'password';
これで、作成したデータベースへのアクセス権をデータベースユーザーに付与するだけで済みます。
GRANT ALL PRIVILEGES ON myproject.* TO myprojectuser@localhost;
現在のセッション中に使用できるように、変更をフラッシュします。
FLUSH PRIVILEGES;
SQLプロンプトを終了して、通常のシェルセッションに戻ります。
exit
仮想環境内にDjangoをインストールする
データベースがセットアップされたので、Djangoをインストールできます。 柔軟性を高めるために、Python仮想環境内にDjangoとそのすべての依存関係をインストールします。
次のように入力することで、これらの環境を作成できるvirtualenv
パッケージを入手できます。
sudo pip install virtualenv
Djangoプロジェクトを保持するディレクトリを作成します。 その後、ディレクトリに移動します。
mkdir ~/myproject
cd ~/myproject
次のように入力することで、DjangoプロジェクトのPython要件を保存する仮想環境を作成できます。
virtualenv myprojectenv
これにより、Pythonとpip
のローカルコピーが、プロジェクトディレクトリ内のmyprojectenv
というディレクトリにインストールされます。
仮想環境内にアプリケーションをインストールする前に、それをアクティブ化する必要があります。 次のように入力してください。
source myprojectenv/bin/activate
プロンプトが変わり、仮想環境内で操作していることを示します。 このようになります(myprojectenv)user@host:~/myproject$
。
仮想環境がアクティブになったら、pip
を使用してDjangoをインストールできます。 また、構成したデータベースを使用できるようにするmysqlclient
パッケージもインストールします。
pip install django mysqlclient
これで、myproject
ディレクトリ内でDjangoプロジェクトを開始できます。 これにより、コード自体を保持する同じ名前の子ディレクトリが作成され、現在のディレクトリ内に管理スクリプトが作成されます。 これが正しく設定されるように、コマンドの最後にドットを追加してください。
django-admin.py startproject myproject .
Djangoデータベース設定を構成する
プロジェクトができたので、作成したデータベースを使用するようにプロジェクトを構成する必要があります。
子プロジェクトディレクトリ内にあるメインのDjangoプロジェクト設定ファイルを開きます。
nano ~/myproject/myproject/settings.py
ファイルの下部に、次のようなDATABASES
セクションが表示されます。
. . .
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.sqlite3',
'NAME': os.path.join(BASE_DIR, 'db.sqlite3'),
}
}
. . .
これは現在、SQLiteをデータベースとして使用するように構成されています。 MySQL / MariaDBデータベースが代わりに使用されるように、これを変更する必要があります。
まず、sqlite3
バックエンドではなくmysql
バックエンドを指すようにエンジンを変更します。 NAME
には、データベースの名前(この例ではmyproject
)を使用します。 また、ログイン資格情報を追加する必要があります。 接続するには、ユーザー名、パスワード、およびホストが必要です。 デフォルトが選択されるように、ポートオプションを追加して空白のままにします。
. . .
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.mysql',
'NAME': 'myproject',
'USER': 'myprojectuser',
'PASSWORD': 'password',
'HOST': 'localhost',
'PORT': '',
}
}
. . .
終了したら、ファイルを保存して閉じます。
データベースを移行してプロジェクトをテストする
Django設定が構成されたので、データ構造をデータベースに移行してサーバーをテストできます。
まず、データベースへの移行を作成して適用することから始めます。 実際のデータはまだないので、これで初期データベース構造が設定されます。
cd ~/myproject
python manage.py makemigrations
python manage.py migrate
データベース構造を作成したら、次のように入力して管理者アカウントを作成できます。
python manage.py createsuperuser
ユーザー名を選択し、メールアドレスを入力し、アカウントのパスワードを選択して確認するように求められます。
管理者アカウントを設定したら、Django開発サーバーを起動して、データベースが正しく機能していることをテストできます。
python manage.py runserver 0.0.0.0:8000
Webブラウザーで、サーバーのドメイン名またはIPアドレスにアクセスし、続いて:8000
にアクセスして、デフォルトのDjangoルートページにアクセスします。
http://server_domain_or_IP:8000
デフォルトのインデックスページが表示されます。
URLの最後に/admin
を追加すると、管理インターフェースへのログイン画面にアクセスできるようになります。
createsuperuser
コマンドを使用して作成したユーザー名とパスワードを入力します。 次に、管理インターフェースに移動します。
調査が終了したら、ターミナルウィンドウでCTRL-Cを押して開発サーバーを停止できます。
管理インターフェースにアクセスすることにより、データベースにユーザーアカウント情報が保存されており、適切にアクセスできることを確認しました。
結論
このガイドでは、MySQLまたはMariaDBをDjangoプロジェクトのバックエンドデータベースとしてインストールおよび構成する方法を示しました。 SQLiteは開発中および軽生産での使用中に負荷を簡単に処理できますが、ほとんどのプロジェクトは、よりフル機能のDBMSを実装することで恩恵を受けます。