RaspberryPi3(ラズパイ)にDockerでPython+bottle+MySQL環境構築する!【試行錯誤編】

More than 1 year has passed since last update.


はじめに

「優しいIT」という理念の基、ITコンサルタントをしている亀井亮介と申します!

現在、仕事では要求分析・要件定義を中心に上流工程をしていますが、主業務以外でプログラムも書いているので、技術的な記事を書きます!

優しいIT活動の一環として「教育用ようにプログラミング可能なPCを安価に提供する」理念の「Raspberry Pi 3(通称ラズパイ)」 で製作したモノ・サービス・プログラムを紹介します!


目的

ラズパイにDockerでPython-MySQL環境を構築します。

ラズパイはアーキテクチャが、大きく異なるためイメージが少なく苦戦しました。

まずは、試行錯誤の過程を記録します。

うまくいったら、簡単構築編を記載します!


アーキテクチャの違い

ラズパイはarmv7lアーキテクチャベースなので、Dockerもarmv7lアーキテクチャベースのイメージを使う必要がありますが、少ないのが現状です。


ラズパイのイメージを探す時

ラズパイで使えるイメージは"rpi-"が付いているので、探す時に参考にしてください


目次


  1. 準備

  2. hypriot/rpi-python を立ち上げる

  3. Python3インストールに必要なライブラリなどをインストール

  4. Python3をインストール

  5. pip3をインストール

  6. Python開発に必要なツールをインストール

  7. bottleをインストールする準備

  8. サーバが動作しているかを確認

  9. MySQLドライバーをインストール

  10. データベースにデータを作成

  11. アプリケーションサーバにスクリプトを置く

  12. アプリケーションを起動


1. 準備

Dockerや開発環境が揃っていない方は、下記を参照してください。

Dockerがインストールされていれば飛ばしてもOKです!


1-1. Dokcerをインストール

RaspberryPi3(ラズパイ)にDockerをインストールを参照してください!


1-2. 便利な機能(SSH・VNC・AFP)

Raspberry Pi 3インストール→無線LAN→日本語入出力→Macから操作(SSH・VNCサーバ・AFP)の下記章を実装すると便利です。


  1. SSHでアクセス

  2. VNC設定(MacからラズパイをGUIで操作)

  3. AFP設定(Macでラズパイのファイルシステムにアクセス)


2. hypriot/rpi-python を立ち上げる

hypriotと名乗る海賊(笑)が、ラズパイ向けのイメージを提供しているので、ありがたく使います。


hypriot/rpi-pythonを起動し、bashでログイン

sudo docker run -it hypriot/rpi-python /bin/bash


…と思ったら、このイメージはPython2.7系なのね…(2016年9月4日現在)

Python3系にしたいので、インストールします。


3. Python3インストールに必要なライブラリなどをインストール


いつものおまじない(ライブラリの更新とアップデート)

# apt-get update

# apt-get upgrade -y


必要そうなライブラリをインストールしてみる

# apt-get install -y vim

# apt-get install -y sudo
# apt-get install -y wget
# apt-get install -y git


4. Python3をインストール


4-1. Python3インストールに必要なライブラリをインストールします。


Python3インストールに必要なライブラリをインストール

# apt-get install -y build-essential libncursesw5-dev libgdbm-dev libc6-dev zlib1g-dev libsqlite3-dev tk-dev libssl-dev openssl libbz2-dev libreadline-dev



4-2. Python3をインストール

Python3はソースからコンパイルします。

(Python3インストール絡みで、makeとmake installを10年振りに触ったりしています)


Python3のソースをダウンロード

# wget https://www.python.org/ftp/python/3.5.2/Python-3.5.2.tgz


圧縮されているPython-3.5.2.tgzをtarで展開します。


Python-3.5.2.tgzを展開

# tar xvf Python-3.5.2.tgz 


移動します。


移動

# cd Python-3.5.2


makeでインストールします。

(時間がかかります)


makeでインストール

# ./configure && make && make install


インストールが終わったら確認します。


Python3インストールを確認

# python3 -V



5. pip3をインストール


pip3をインストール

# apt-get install -y python3-pip



pip3をバージョンアップ

# pip3 install --upgrade pip



pip3インストールを確認

# pip3 -V



6. Python開発に必要なツールをインストール

詳細を知りたい方はグーグル先生に聞いてください。


仮装開発環境構築virtualenv

# pip3 install virtualenv



軽量フレームワークbottle

# pip3 install bottle



Pythonのインタラクティブモード拡張ipython

# pip3 install ipython



コーディングスタイル/シンタックスのチェックflake8

# pip3 install flake8



7. ユーザを作成


グループとユーザを作成

# groupadd web

# useradd -d /home/bottle -m bottle


作ったユーザでログイン

# su -m bottle

$

問題なし!


8. サーバが動作しているかを確認


vimでindex.htmlを作成(ユーザはbottle)

$ vim index.html



index.html

<html>

<body>
はろーわーるど
</body>
</html>


シンプルHTTPで起動

$ python3 -m http.server 8080

Serving HTTP on 0.0.0.0 port 8080 ...

ブラウザでアクセス

ラズパイとDocker.png


9. MySQLドライバーをインストール

git cloneでmysql-connector-pythonをダウンロード


gitクローン

# git clone https://github.com/mysql/mysql-connector-python.git



移動

# cd mysql-connector-python



ビルドしてインストール

# python3 ./setup.py build

# python3 ./setup.py install


10. データベースにデータを作成

一旦、アプリケーションサーバを抜けます。

Control + P, Control + Qと入力します。

データベースサーバにログインします。

すでに起動していれば次のコマンドでログインします。


データベースサーバにログイン

pi@raspberrypi $ sudo docker exec -it {データベースサーバのコンテナ名}



MySQLにログイン

mysql_server # mysql -u{ユーザ名} -p

(パスワードを入力)


データベースにアクセス(すでにある前提)

mysql> use sample;



テーブルを作成

mysql>

CREATE TABLE `users` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`name` varchar(255) DEFAULT NULL,
KEY `id` (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;


データをインサート

mysql>

INSERT INTO `users` (`id`, `name`) VALUES (1, 'pyhons');


MySQLを抜ける

mysql> quit;



データベースのコンテナを抜ける

mysql_server # (Contrl + p, Control + q)



11. アプリケーションサーバにスクリプトを置く


アプリケーションサーバにログイン

pi@raspberrypi $ sudo docker exec -it {アプリケーションサーバのコンテナ名}



適当な場所に移動

# cd /home/bottle



server.pyを作成

# vim server.py



server.py

from bottle import route, run

# MySQLドライバはmysql.connector
import mysql.connector
# hostのIPアドレスは、$ docker inspect {データベースのコンテナ名}で調べる
# MySQLのユーザやパスワード、データベースはdocker-compose.ymlで設定したもの
connector = mysql.connector.connect(
user='python',
password='python',
host='178.10.0.3', # データベースサーバのIPアドレス
database='sample' # 作成したデータベース
)

cursor = connector.cursor()
cursor.execute("select * from users")

disp = ""
for row in cursor.fetchall():
disp = "ID:" + str(row[0]) + " 名前:" + row[1]

cursor.close
connector.close

@route('/hello')
def hello():

return "DBから取得 "+disp

run(host='0.0.0.0', port=8080, debug=True, reloader=True)



12. アプリケーションを起動


アプリケーション起動

# /usr/local/bin/python3 /home/bottle/server.py


ブラウザで開くと

スクリーンショット 2016-09-04 14.18.55.png

次の記事では、Dockerfileとdokcer-compose.ymlで一発で起動を目論みます。

(でっきるかな?でっきるかな?)


サイトマップ


Raspberry Pi 3 (ラズパイ)セットアップ

Raspberry Pi 3インストール→無線LAN→日本語入出力→Macから操作


Raspberry Pi 3 にDockerを乗せてPython+MySQL環境を構築!

RaspberryPi3(ラズパイ)にDockerをインストール

RaspberryPi3(ラズパイ)にDockerでPython+bottle+MySQL環境構築する!【簡単構築編】

RaspberryPi3(ラズパイ)にDockerでPython+bottle+MySQL環境構築する!【試行錯誤編】


Raspberry Pi 3でエアコン一体型パソコン「airpi」を作る!

Raspberry Pi 3でエアコン一体型パソコン「airpi」を作る!


ついに…Raspberry Pi 3でpythonを使いラジコンを作る!

ボタン押している間モーターが動く

磁石を近づけている間モータが動く

磁石を近づけるとモータが動き、自動で止まる


Raspberry Pi 3 (ラズパイ)とpythonで遊ぼう ラズパイ奮闘の記録

Raspberry Pi 3でプログラミングをする Node-REDと普通にプログラミング

Raspberry Pi 3でpythonを使いLEDを光らせる(Hello World)

Raspberry Pi 3でスイッチの状態を検出する

Raspberry Pi 3でpythonを使いサーボモータを動かす

Raspberry Pi 3でpythonを使いモータードライバーを使いモータを制御する!

Raspberry Pi 3でpythonを使いスライドスイッチを検出する!

Raspberry Pi 3でpythonを使い磁石スイッチを検出する!

Raspberry Pi 3でpythonを使い温度を検出する!

Raspberry Pi 3でpythonを使いブザーを鳴らす!

Raspberry Pi 3でpythonを使いA/Dコンバーターでアナログ信号を検出する!

Raspberry Pi 3でpythonを使い「明るさ」を検出する!

Raspberry Pi 3でpythonを使い「温度(A/Dコンバーターを利用)」を検出する!

Raspberry Pi 3でpythonを使い「7セグメントLED」に出力する!

Raspberry Pi 3でpythonを使いスイッチ制御でLEDを光らせる!

Raspberry Pi 3でpythonを使い暗くなったらLEDを光らせる!


テスト駆動開発を重点においた規則

コーディング規則「優しいコードを書こう」(FuelPHP)

命名規則「3ヶ月後の自分自身に優しく、チームに優しく、まだ見ぬメンバーに優しく」


Docker+PythonでWebアプリケーション開発

Docker上のCentOSにPython3と、関連ライブラリpip, virtualenvとフレームワークDjango, bottle, Flaskのインストール!これらをまとめたDockerfile付き!


開発しやすい環境構築(Docker+PHP)

Dockerを利用しApacheにPHP環境 + Eclipseを連携

Dockerを利用したFuelPHP開発環境構築

Docker利用したFuelPHP開発環境の初期設定とscaffoldを利用してCRUDスケルトン作成

FuelPHPのデータベースマイグレーション