LoginSignup
0
0

More than 3 years have passed since last update.

【Django】Amazon Linux 2+MySQLでDjangoをデプロイする方法

Posted at

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のセキュリティグループにポートを追加
cats.jpg

サーバーを起動して、EC2のパブリックIPにアクセス

$ python3 manage.py runserver 0.0.0.0:8000

WS000007.JPG

表示できるようになりました。

調べるのにめちゃくちゃ時間がかかった・・・
ひとまずこれでデプロイはできた。

あとはgunicornを入れて常時アクセスできるようにすればOK

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0