AWSにMySQLでDjangoをデプロイする時に結構苦戦したので、備忘録として残しておきます。
AWSの設定
yumを最新にアップデート
$ sudo yum update
Pythonの最新版をインストール
$ sudo yum -y install python37
gitをインストール
$ sudo yum -y install git
Gitに上げているDjangoのプロジェクトを持ってくる
$ git clone https://github.com/example/hogeproject.git
プロジェクトに入っている仮想環境の実行
$ cd hogeproject/
$ source venv/bin/activate
仮想環境にdjango
をインストール
$ sudo pip3 install django
settings.py
にデータベース情報を追加
$ vim taxproject/settings.py
ALLOWED_HOSTS = ['EC2のパブリックアドレス', 'localhost']
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.mysql',
'NAME': '〈データベース名〉',
'USER': '〈ユーザー名〉',
'PASSWORD': '〈パスワード〉',
'HOST': '〈エンドポイント〉',
'PORT': '3306',
}
}
データベースにテーブルを作成するためにmigrateを行う
※ここが一番苦戦しました。
$ python3 manage.py makemigrations
下記のエラーが発生してしまった。
Traceback (most recent call last):
File "/usr/local/lib64/python3.7/site-packages/django/db/backends/mysql/base.py", line 15, in <module>
import MySQLdb as Database
ModuleNotFoundError: No module named 'MySQLdb'
The above exception was the direct cause of the following exception:
Traceback (most recent call last):
File "manage.py", line 22, in <module>
main()
・
・
・
django.core.exceptions.ImproperlyConfigured: Error loading MySQLdb module.
Did you install mysqlclient?
mysqlclient
をインストールしているか聞かれたので、とりあえずインストールしてみる。
$ sudo pip3 install mysqlclient
すると今度はmysql_configがないとエラーになってしまう。
何故だ・・・
/bin/sh: mysql_config: command not found
/bin/sh: mariadb_config: command not found
/bin/sh: mysql_config: command not found
調べてみると下記をインストールすると解決するらしい
インストール開始
# リポジトリ追加
$ sudo yum -y install https://dev.mysql.com/get/mysql80-community-release-el7-3.noarch.rpm
$ sudo yum -y install mysql-community-client
$ sudo yum -y install mysql-devel
mysql_configがインストールされたか確認
$ whereis mysql_config
mysql_config: /usr/bin/mysql_config /usr/share/man/man1/mysql_config.1.gz
どうやらインストールされたみたいなので、これで大丈夫だと思い、再度$ sudo pip3 install mysqlclient
を実行
unable to execute 'gcc': No such file or directory
error: command 'gcc' failed with exit status 1
今度はgcc
がないと怒られる。
gcc
をインストール
$ sudo yum -y install gcc
今度こそと思い、$ pip3 install mysqlclient
を実行。
すると・・・
# include "Python.h"
^~~~~~~~~~
compilation terminated.
error: command 'gcc' failed with exit status 1
またエラーになる。
Python.h
が原因らしいので調べてみるとpython-devel
に入っているモジュールとのこと。
なので、今度はpython-devel
をインストールする。
$ sudo yum -y install python-devel
Loaded plugins: extras_suggestions, langpacks, priorities, update-motd
37 packages excluded due to repository priority protections
Package python-devel-2.7.18-1.amzn2.0.2.x86_64 already installed and latest version
Nothing to do
あれ?
すでにインストールされている・・・
と思ったらPython2.7だったので、Python3のpython-devel
をインストール
$ sudo yum -y install python3-devel
インストールが完了したので、何度目かの$ sudo pip3 install mysqlclient
を実行
Installing collected packages: mysqlclient
Running setup.py install for mysqlclient ... done
Successfully installed mysqlclient-2.0.2
やっと成功した!!!
これで大丈夫なはずなので、データベースにテーブルを作成していきます。
$ python3 manage.py makemigrations
$ python3 manage.py migrate
データベースに値が入ったので、EC2のセキュリティグループにポートを追加
サーバーを起動して、EC2のパブリックIPにアクセス
$ python3 manage.py runserver 0.0.0.0:8000
表示できるようになりました。
調べるのにめちゃくちゃ時間がかかった・・・
ひとまずこれでデプロイはできた。
あとはgunicornを入れて常時アクセスできるようにすればOK