Ubuntuでdocker環境でDjango+MySQLを動かす

2019年2月7日docker, Python, プログラミング

KindleUnlimitedExtenderの準備

Ubuntu環境でkindleUnlimitedツールを動かすために、pip3でbottlenoseとbeautifulSoup4を入れようとしたら、そもそもpip3がなかったので、pip3のインストールから。

環境準備は↓を参考に。

ソースはWindows環境で使っていたものを共有フォルダで展開したら、普通に動きました!

docker環境でDjango+MySQL

いよいよ本来やりたかったdocker環境でpython動かしてみたいと思います。

Permission deniedがでてMySQLが建てられないorz

db_1 | mysqld: Can't change dir to '/var/lib/mysql/' (Errcode: 13 - Permission denied)

今回ダメだった理由はMySQLの永続化をVirtualBox-Windowsの共有フォルダに設定したのが原因でした。パーミッションが変えられないみたい。詳しくは下記のQA

ということを踏まえて・・・

永続化先を

/home/dockers/docker/db-datadir:/var/lib/mysql
/home/dockers/docker/sql:/docker-entrypoint-initdb.d

これに変更しました。ちなみに[dockers]はUbuntuのユーザー名です。

・・・

結局コレでもだめっぽかったので、とりあえず共有フォルダからフォルダごと移動しました。

Docker+Django+MySQLのエラー原因判明

昨日エラーを吐き続けていた理由が判明しました。

$ docker-compose run web ./manage.py makemigrations $ docker-compose run web ./manage.py migrate

 

↓出ていたエラーはこちら。

見ると、”Access denied for user ‘django’@’172.19.0.3′(using password: YES)” とエラーメッセージがあります。つまりはDBにアクセスするときにユーザ名、もしくはパスワードが違うよ~とのことです。

このブログを参考にやっていたのですが、VirtualBoxの共有フォルダでアクセス権が変えられないことが判明したタイミングでフォルダを移動した際に、MySQLの初期化ファイルを移すのを忘れていたのが原因でした。

ちなみに、初期化ファイルを実行しようと思い、何度も下記コマンドを叩いたのですが既に初期化されていたため、初期化されることはありませんでした。

結局、MySQLの永続化したvolumesの中にデータが残ったままなのが原因なので、db-datadirをGUIから消そうとしたのですが、それもできず。

ただ、ターミナルでsudoで一発で消せました。

$ sudo rm -r db-dadir

以上のことをやって、Firefoxで「localhost:8000/admin」を叩けば、無事Dgangoのadmin画面を開くことができました!

【参考】DBを作り直す手順

Kindle Unlimited Extenderの制作

Kindle情報を取ってくるスクリプト(1時間で3600件)でMySQLにデータをぶちこんで、Djangoで表示&検索するシステムにしよう。

Django関係はPythonエンジニアファーストブック の第6章で再履修する。

MySQLにPythonで接続する

接続するためにパッケージをインストールする必要があります。Ubuntu環境で、pip3 install mysqlclientしたらエラーが出て完了しなかったので、やることのまとめです。

あとは、MySQLの初期化とかをしてサンプルソースを動かそうと思います。

MySQLサーバーをDockerで起動しておいて、設定はUbuntu自体にMySQLをインストールして操作する。

昨日作った環境で次のコマンドで接続しようとしてもエラーが出てだめでした。

これを実行すると、

このエラーが出て進めなくなってしまった。

MySQLの接続エラー解決

いろいろと探した結果、MySQLの設定方法を変えることで解決できた。参考にしたページは↓

docker-compose.ymlの内容を下記のように書き換えました。

 

あと、.envにパスワードを書きました。

これをdocker-compose up -d buildしてあげれば、次のコマンドで接続できました!

MySQLのTABLE作成等

こちらを参考に、pythonの書き込みサンプルソースを見ながらTABLEを作成してみた。in.sqlというファイルを作って”<”で流し込み。

MySQLの中身をGUIで見たい

なかをちょこっと、サクッと確認したい衝動に駆られたため。GUIで見れる環境を入れました。

使い方は↓

Kindle Unlimitedデータの取得デモ

デモでデータ取得→MySQL格納までの流れが一応動きました!!!

わりと感動。最後はエラーはいて落ちたので、エラー修正と最適化をしていきます。

ちなみに作成したMySQLデータをMySQL Workbenchでみるとこんな形で見れます。なんかプログラミングしてる感があってすごくいい!

ちなみに気付いたらエラーで止まってました。

止まったときに表示されていたのは「MemoryError」。

たりなくなっているのでしょうか?

別記事で検証しています。