DjangoとApcheとmysqlで環境構築
Python3とDjangoとApacheとmysqlとCentOSで環境を構築します。
手順はいろいろあると思いますが、素直に一つずつ進めていきます。
OS
1 2 |
$ cat /etc/redhat-release CentOS Linux release 7.7.1908 (Core) |
Python3のインストール
Pythonは3系を使用します。
2はサポートが終わるそうですし。
1 |
sudo yum install -y python3 python3-devel |
python3とpython-develをインストールします。
python-develは後ほどmysqlclientをインストールするために必要なパッケージです。
Djangoのインストール
Djangoはpipを使ってインストールします。
まずはpipをインストールしましょう。
1 2 |
curl https://bootstrap.pypa.io/get-pip.py -o get-pip.py python get-pip.py |
Djangoをインストールします。
1 |
sudo pip3 install django |
本当にインストールされたか不安になった場合は確認してみましょう。
1 2 3 4 5 6 7 |
$ python3 Python 3.6.8 (default, Aug 7 2019, 17:28:10) [GCC 4.8.5 20150623 (Red Hat 4.8.5-39)] on linux Type "help", "copyright", "credits" or "license" for more information. >>> import django >>> django.get_version() '3.0.3' |
Apacheのインストール
特別なことはしません。
普通にインストールします。
1 |
sudo yum install -y httpd httpd-devel |
httpd-develはwsgi_moduleをインストールするときに使います。
Mysqlのインストール
mysqlをyumでインストールする前にリポジトリを追加する必要があります。
https://dev.mysql.com/downloads/repo/yum/
から取得してきます。
wgetがない場合はインストールしておきます。
1 2 3 4 |
sudo yum install -y wget wget https://dev.mysql.com/get/mysql80-community-release-el7-3.noarch.rpm sudo yum localinstall mysql80-community-release-el7-3.noarch.rpm sudo yum install -y mysql-community-server |
これでmysql8がインストールされます。
mysql5.6,7をインストールしたい場合は
/etc/yum.repos.d/mysql-community.repo
を好みのバージョンをインストールするよう修正します。
pythonからmysqlを操作できるように必要なモジュールをpip3でインストールします。
1 2 |
sudo yum install -y mysql-devel pip3 install mysqlclient |
WSGIのインストール
WSGIはapacheとpythonのやり取りを可能にするためのインターフェースです。
これがないと何もできません。
1 2 3 4 5 |
git clone https://github.com/GrahamDumpleton/mod_wsgi cd mod_wsgi ./configure --with-apxs=/usr/bin/apxs --with-python=/usr/bin/python3 make sudo make install |
これでインストールは完了です。
sudo make installの完了後、最後の行に出力される以下の内容を控えます。
1 |
chmod 755 /usr/lib64/httpd/modules/mod_wsgi.so |
プロジェクトを作成
apacheとwsgiの設定が必要ですがまずはプロジェクトを作る必要があります。
好きなパスへ移動します。
ここでは/var/wwwに移動します。
そして以下のコマンドでプロジェクトを作成します。
プロジェクト名はもちろん任意です。
ここでは dpro にしています。
1 |
django-admin startproject dpro |
設定
必要なものはすべてそろったので、もろもろの設定に移りたいと思います。
mysql
データベースを作ります。
mysqlを起動します
1 |
sudo systemctl start mysqld |
起動すると/var/log/mysqld.logが作成され、そこに初期パスワードが記載されています。
1 |
A temporary password is generated for root@localhost: wqP.uZFix7;u |
ログインします。
今回はとりあえずrootをユーザーとして使いましょう。
1 2 |
$ mysql -u root -p Enter password:wqP.uZFix7;u |
mysql8では認証方式がcaching_sha2_passwordに変わったようです。
mysqlclientのアクセスが拒否されてしまうみたいです。
セキュリティ的にどうかと思いますが、ここではmysql_native_passwordにしておきます。
1 |
alter user 'root'@'localhost' identified with mysql_native_password by {パスワード} |
データベースを作成します。
名前はdappにしました。
ちなみにdjango applicationを略しました。
分散アプリケーションのdappとは関係ありません。
1 |
create database dapp; |
Djangoの設定ファイル
Djangoプロジェクトを作成したことによってもろもろのファイルが作成されました。
いくつか修正します。
現在は例通りに操舵している場合、現在/var/wwwにいると思います。
配下にdproディレクトリが作成されていると思います。
そしてまたその下にもdproディレクトリが作成されています。
1 2 3 4 5 |
$ pwd /var/www/dpro/dpro $ ls asgi.py __init__.py settings.py urls.py wsgi.py |
その中のsettings.pyを修正します。
74行目あたりに(Django 3.0.3の場合)データベースに関する設定を定義している変数があります。
1 2 3 4 5 6 |
DATABASES = { 'default': { 'ENGINE': 'django.db.backends.sqlite3', 'NAME': os.path.join(BASE_DIR, 'db.sqlite3'), } } |
これをこうします。
1 2 3 4 5 6 7 8 9 |
DATABASES = { 'default': { 'ENGINE': 'django.db.backends.mysql', 'NAME': 'dapp', 'USER': 'root', 'PASSWORD': {PASSWORD}, 'host': 'localhost' } } |
httpd.conf
httpd.confにもいくつか設定を追加します。
1 2 3 4 5 6 7 8 9 |
LoadModule wsgi_module /usr/lib64/httpd/modules/mod_wsgi.so WSGIScriptAlias / /var/www/dpro/dpro/wsgi.py WSGIPythonPath /var/www/dpro <Directory '/var/www/dpro/dpro'> <Files 'wsgi.py'> Require all granted </Files> </Directory> |
動作確認
アプリケーションを作成して動作確認を。
1 2 |
cd /var/www/dpro python3 manage.py startapp dapp |
https://docs.djangoproject.com/ja/3.0/intro/tutorial01/
のに書いてある内容を実装してみるのもいいかもしれません。
上に挙げた手順で構築すればプログラムのエラーがあったとしてもDjangoのデバック画面に行くはずです。