ホーム >  Python >  Vgrant(CentOS7)にAnaconda+Django+Apache環境を作る(MariaDBのインストール・設定)

投稿日:   |  最終更新日:

Vgrant(CentOS7)にAnaconda+Django+Apache環境を作る(MariaDBのインストール・設定)

Python

Vagrantで作ったCentOS7環境にAnaconda・Djangoをインストールします。最終的にApacheで動かしたいと思います。

ApacheでDjangoを動かすには?

Apacheは、ウェブサーバの中で一番使われてます。しかし、デフォルトではPythonを解釈する機能が付いていません。mod_WSGIを使って、別途カスタマイズする必要があります。

mod_wsgiとは?

wsgiはウィズギーと読みます。Apacheのモジュールの1つで、Pythonを実行できるようにしてくれます。

準備

Vagrantでゲスト環境(仮想環境)を作ります。

①Virtualboxをインストールします。Virtualboxのインストールまでで結構です。

VirtualBoxをインストールする for Ubuntu

②Vagrantをインストールします。centos7環境を作りますので、Vagrantのインストールのみ済ませてください。

Vagrantをインストールしてテスト環境を作る for Ubuntu

Vagrantのcentos7環境の詳細を調べる場合は以下のように確認します。

VagrantのCentOS7の環境を確認(lsb_releaseコマンドなど)

③バージョン管理ツールのpyenvインストールします。Anacondaインストールに使います。

VagrantのCentOS7にバージョン管理ツールをインストール(pyenv)

④Anaconda・Djangoインストールします。

Vgrant(CentOS7)にAnaconda+Django+Apache環境を作る(Anaconda・Djangoインストール)

ホスト環境

OS Ubuntu 16.04.1 LTS 64bit
Virtualbox 5.1
Vagrant 1.9.5

ゲスト環境

OS CentOS 7.1.1503
pyenv 1.1.3-5-g7dae197
Anaconda 3-4.3.0
MariaDB 5.5.52-1.el7
Apache 2.4.6
mod_wsgi 4.5.14

Vagrantへログイン

①【ホスト環境】端末を開き、前回構築したVagrantのディレクトリまで移動します。

cd vagrant/django_apps/

②【ホスト環境】仮想マシンを起動します。

vagrant up

③【ホスト環境】ログインします。

vagrant ssh

pyenvでpythonをインストールする

①rootにログインします。

su -
パスワード:vagrant

②Pythonをインストール、設定します。

# 新規インストール。
pyenv install anaconda3-4.3.0
# 新規インストール後、このコマンドを実行する必要があるそうです。
pyenv rehash
# グローバルに使用するPythonバージョンの指定
pyenv global anaconda3-4.3.0

MariaDBをインストール

①MariaDBをインストールしていきます。

yum install -y mariadb mariadb-server mariadb-devel

②「/etc/my.cnf」を編集します。

vi /etc/my.cnf

[mysqld]の下に以下を追記。

character-set-server = utf8
sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES

一番下の行に以下を追記。

[client]
default-character-set = utf8

③MariaDBをPythonプログラムから操作するため、mysqlclientをインストールします。

pip install  mysqlclient

成功すると、以下のようなメッセージが表示されます。

Successfully installed mysqlclient-1.3.10

④MariaDBを起動します。

sudo systemctl start mariadb
sudo systemctl enable mariadb

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

mysql -u root

⑥新規にデータベースを作成します。ここでは、「app1_db」という名前のデータベースを作成します。

MariaDB [(none)]> CREATE DATABASE app1_db CHARACTER SET utf8;
Query OK, 1 row affected (0.00 sec)

⑦作成したデータベースにアクセスできるユーザを作成します。ユーザとパスワードを設定します。

GRANT ALL PRIVILEGES ON app1_db.* TO app1_user@localhost IDENTIFIED BY 'app1_passwd';
ユーザ名 app1_user
パスワード app1_passwd
Query OK, 0 rows affected (0.00 sec)

⑧MySQLプロンプトを終了します。

exit

⑨正常にデータベースとユーザが作成されたか確認するために、新しく作成したユーザでログインします。

mysql -u app1_user -papp1_passwd

⑩データベースの一覧を表示します。

SHOW DATABASES;

app1_dbが正常に作成されたことを確認することができました。

+--------------------+
| Database           |
+--------------------+
| information_schema |
| app1_db            |
| test               |
+--------------------+
3 rows in set (0.00 sec)

Djangoを使っていると、直接、MariaDBコマンドを叩く機会は多くはありません。DjangoのORM(Object-Relational Mapping)機能を利用することでModels.pyという設定ファイルに書かれた内容を元に、動的にデータベースが反映されていきます。

⑪mariaDBのバージョンを確認する場合は、以下のコマンドで確認します。

rpm -qa | grep -i mariadb

データベースを初期化

①データベースを初期化するため以下のコマンドを実行します。実行するとSQL文が発行され、データベース「app1_db」に管理用テーブルが生成されます。

python pj1/manage.py migrate

②管理者ユーザを追加します。下記コマンドを実行することで対話モードを実行することができます。

python pj1/manage.py createsuperuser

ここで入力したidとパスワードを覚えておきましょう。

Username (leave blank to use 'vagrant'): admin
Email address: admin@admin.com
Password: 
Password (again): 

③MariaDBにログインして確認します。データベースの中にDjango用テーブルが作成されていることが確認できます。MySQLにログインします。

mysql -u app1_user -papp1_passwd

テーブルを一覧表示します。

USE app1_db;
SHOW TABLES;
+----------------------------+
| Tables_in_app1_db          |
+----------------------------+
| auth_group                 |
| auth_group_permissions     |
| auth_permission            |
| auth_user                  |
| auth_user_groups           |
| auth_user_user_permissions |
| django_admin_log           |
| django_content_type        |
| django_migrations          |
| django_session             |
+----------------------------+
10 rows in set (0.00 sec)

④簡易サーバを起動します。

python pj1/manage.py runserver 0.0.0.0:8000

⑤ホスト環境のブラウザから、以下のURLを入力します。

http://192.168.33.15:8000/admin/

⑥以下の管理サイトが表示されます。

⑦②で入力した管理者情報(ここではID:admin)を入力すると、管理サイトに入ることができます。

依存パッケージのインストール

Aapche、Django、MariaDB連携の依存パッケージをインストールします。

①PyMySQLをインストールします。

pip install PyMySQL

Successfully installed PyMySQL-0.7.11

②「openssl version」で確認するバージョンと表示がずれている場合があるので、「cryptography」をアップグレードします。

pip install -U cryptography

      Successfully uninstalled cryptography-1.7.1
Successfully installed asn1crypto-0.22.0 cffi-1.10.0 cryptography-2.0.2 idna-2.5 pycparser-2.18

Apacheインストール

サーバにapacheをインストールします。

yum install httpd httpd-devel
systemctl start httpd
systemctl enable httpd

念のためブラウザにIPアドレス打ってapacheが動いているか確認しましょう。ホスト環境のブラウザから、以下のURLを入力します。

http://192.168.33.15

mod_WSGIのインストール

インストール時にPythonとmod_WSGIを紐付ける必要があります。pyenvを使っている場合はそれを伝えないといけません。

①以下のディレクトリに移動します。

cd /usr/local/src/

②mod_wsgiをダウンロードして解凍します。

wget https://github.com/GrahamDumpleton/mod_wsgi/archive/4.5.14.tar.gz
tar -zxvf 4.5.14.tar.gz
cd mod_wsgi-4.5.14

③自分がプロジェクトで使いたいPythonのパスを指定します。

./configure --with-python=/usr/local/bin/pyenv/versions/anaconda3-4.3.0/bin/python
make
make install

pyenvの場合は「pyenv/versions/」 以下にダウンロードしたPythonが入っています。anaconda3-4.3.0を使いたい場合は以下のようにバイナリファイルを指定します。

./configure –with-python=/usr/local/bin/pyenv/versions/”使いたいバージョン”/bin/python

④mod_WSGIの依存関係を満たします。mod_wsgi.soはpythonを見つけられていないです。詳細をlddコマンドで共有ライブラリを検索します。

ldd /etc/httpd/modules/mod_wsgi.so

	linux-vdso.so.1 =>  (0x00007fffea9fe000)
	libpython3.6m.so.1.0 => not found
	libpthread.so.0 => /lib64/libpthread.so.0 (0x00007fadf854d000)
	libdl.so.2 => /lib64/libdl.so.2 (0x00007fadf8349000)
	libutil.so.1 => /lib64/libutil.so.1 (0x00007fadf8146000)
	librt.so.1 => /lib64/librt.so.1 (0x00007fadf7f3d000)
	libm.so.6 => /lib64/libm.so.6 (0x00007fadf7c3b000)
	libc.so.6 => /lib64/libc.so.6 (0x00007fadf787a000)
	/lib64/ld-linux-x86-64.so.2 (0x00007fadf89af000)

libpython3.6m.so.1.0を見つけられていません。

⑤自分が使うPythonのディレクトリ以下を検索してます。

ls /usr/local/bin/pyenv/versions/anaconda3-4.3.0/lib | grep 'python'

libpython3.6m.so
libpython3.6m.so.1.0
libpython3.so
python3.6

⑥シンボリックリンクを貼りましょう。

ln -s /usr/local/bin/pyenv/versions/anaconda3-4.3.0/lib/libpython3.6m.so.1.0 /lib64/

⑦再度確認します。「libpython3.6m.so.1.0」を貼りました。

 ldd /etc/httpd/modules/mod_wsgi.so

	linux-vdso.so.1 =>  (0x00007fffeb7fe000)
	libpython3.6m.so.1.0 => /lib64/libpython3.6m.so.1.0 (0x00007ff5f8d0e000)
	libpthread.so.0 => /lib64/libpthread.so.0 (0x00007ff5f8af2000)
	libdl.so.2 => /lib64/libdl.so.2 (0x00007ff5f88ed000)
	libutil.so.1 => /lib64/libutil.so.1 (0x00007ff5f86ea000)
	librt.so.1 => /lib64/librt.so.1 (0x00007ff5f84e2000)
	libm.so.6 => /lib64/libm.so.6 (0x00007ff5f81df000)
	libc.so.6 => /lib64/libc.so.6 (0x00007ff5f7e1e000)
	/lib64/ld-linux-x86-64.so.2 (0x00007ff5f9458000)

Apache設定

①apacheの設定ファイルである「httpd.conf」をコピーします。

cp /etc/httpd/conf/httpd.conf /etc/httpd/conf/httpd.conf.org

②「httpd.conf」を編集します。

vi /etc/httpd/conf/httpd.conf

以下のように記述します。

LoadModule wsgi_module modules/mod_wsgi.so
WSGIScriptAlias / /home/django/pj1/pj1/wsgi.py
WSGIPythonHome /usr/local/bin/pyenv/versions/anaconda3-4.3.0/
WSGIPythonPath /home/django/pj1

<Directory /home/django/pj1/pj1>
  <Files wsgi.py>
    Require all granted
  </Files>
</Directory>

Alias /static/ /home/django/pj1/static/
<Directory /home/django/pj1/static>
  Require all granted
</Directory>
WSGIScriptAlias Apacheに来たリクエストをどこにつなぐかを指定します。ここでは「/(ルート)」に来たリクエストをDjangoでつくったプロジェクトに飛ばします。
WSGIPythonHome mod_wsgiに使わせたいPythonのパスを記述します。インストールの時と違い、ディレクトリを指定します。
WSGIPythonPath プロジェクトのパスを指定します。
Directory 指定のディレクトリにapacheのアクセス許可を与えます。
Alias Djangoが静的ファイルを探す場所を指定しています。

③「httpd.conf」を編集します。

systemctl restart httpd

④ホスト環境のブラウザから、以下のURLを入力します。

http://192.168.33.15

以下のような表示になったことを確認します。

④adminにログインします。

http://192.168.33.15/admin/

以下のような表示になったことを確認します。cssが読み込まれていません。

次回

次は管理画面のCSSを有効にするため、静的ファイルのパスの設定を行います。

Vgrant(CentOS7)にAnaconda+Django+Apache環境を作る(管理画面のCSS)

トラックバック用のURL
プロフィール

名前:イワサキ ユウタ 職業:システムエンジニア、ウェブマスター、フロントエンドエンジニア 誕生:1986年生まれ 出身:静岡県 特技:ウッドベース 略歴 20

最近の投稿
人気記事
カテゴリー
広告