RaspberryPIでFlask+MongoDB環境を作る
はじめに
Flaskを実行するための環境を作ります。環境は以下の通り。
本体:RaspberryPI 4
OS : Ubuntu 23.10
(Raspi OSは色々面倒なので、組み込み以外は使っていないです。)
ネットワーク:無線
mongoDB : 4.4 (最新は7ですがRaspberry PIでは動きません。)
python : 3.11.8
本書では、上のバージョンで導入します。他のバージョンに置き換えて
進めることも可能です。
説明付き版は、下部の有料コンテンツを参照してください。
$ lsb_release -a
> No LSB modules are available.
> Distributor ID: Ubuntu
> Description: Ubuntu 23.10
> Release: 23.10
> Codename: bionic
初期設定
「Raspberry Pi Imager」作成時に、SSHの有効化、Wifi接続、ホスト名、
ユーザアカウント・パスワードは設定状態からスタートします。
rootユーザパスワード設定
一応、rootパスワードは設定しておきましょう。
$ sudo passwd root
> [sudo] password for user :
New password:
Retype new password:
passwd: password updated successfully
IPアドレスの固定化
WifiのDHCPになっているので、固定化しておきましょう。
しばらくすると、DHCPのリース期限が切れて、IPが変わってしまいます。
以下の例では、
IPアドレス:192.168.1.100/24
Default Gateway : 192.168.1.1 (家庭内だとルータのIPですね)
DNS:192.168.1.1 (家庭内だとルータのIPですね)
$ ip a
> 1: lo: <LOOPBACK,UP,LOWER_UP> ・・・
> 2: eth0: <BROADCAST,MULTICAST> ・・・
> 3: wlan0: <BROADCAST,MULTICAST,UP,LOWER_UP>・・・ ⭐️ このwlan0を設定します。
⭐️ このファイルを設定します。
$ sudo nano /etc/netplan/50-cloud-init.yaml
# This file is generated from information provided by the datasource. Changes
# to it will not persist across an instance reboot. To disable cloud-init's
# network configuration capabilities, write a file
# /etc/cloud/cloud.cfg.d/99-disable-network-config.cfg with the following:
# network: {config: disabled}
network:
version: 2
wifis:
renderer: networkd
wlan0:
access-points:
<access point名>:
password: <パスワード>
dhcp4: false
dhcp6: false
addresses: [192.168.1.100/24] ⭐️ IPアドレス
gateway4: 192.168.1.1 ⭐️ Default Gateway
nameservers:
addresses: [192.168.1.1] ⭐️ DNS
optional: true
⭐️ネットワーク設定情報を反映します。
$ sudo netplan apply
OSアップデート
OSは最新を適用しておきましょう。
⭐️ アップデート情報の取得
$ sudo apt update
⭐️ パッケージの更新
$ sudo apt dist-upgrade
⭐️ 不要になったパッケージの削除
$ sudo apt autoremove
⭐️ キャッシュされている全てのdebファイルを削除
$ sudo apt clean
自動更新無効化
Ubuntuの自動更新を無効化しておきます。
バージョンアップが自動的に実行され、アプリケーションが動作しなくなる
かもしれません。
$ sudo systemctl stop apt-daily.timer
$ sudo systemctl disable apt-daily.timer
$ sudo systemctl stop apt-daily-upgrade.timer
$ sudo systemctl disable apt-daily-upgrade.timer
$ sudo chmod -x /etc/cron.daily/apt-compat
$ sudo nano /etc/apt/apt.conf.d/02periodic ⭐️多分新規作成になると思います。
APT::Periodic::Enable "0";
時刻同期
NTP時刻同期を設定しておきましょう。
$ sudo nano /etc/systemd/timesyncd.conf
⭐️ 以下を追加しておきます。
ちなみに、「FallbackNTP」は、NTPが使えない場合に使われるものではないので、
NTPが設定されれば、必要ないです。
[Time]
NTP=ntp.jst.mfeed.ad.jp ntp.nict.jp
⭐️ タイムサービスを再起動します。
$ sudo systemctl daemon-reload
$ sudo systemctl restart systemd-timesyncd.service
⭐️ ステータスを確認します。activeになっていることを確認します。
$ sudo systemctl status systemd-timesyncd.service
systemd-timesyncd.service - Network Time Synchronization
Loaded: loaded (/lib/systemd/system/systemd-timesyncd.service; enabled; pr>
Active: active (running) since Thu 2024-03-07 15:55:19 JST; 15s ago
Docs: man:systemd-timesyncd.service(8)
Main PID: 19681 (systemd-timesyn)
使っているツールの導入
Nanoでも良いのですが、vimの方が使い慣れているので導入しておきます。
sudo apt install vim
データベースの導入
MongoDB
MongoDBを入れます。RaspberryPiのCPUにAVX命令がないので、最新の
MongoDBは使用できません。バージョンは4.4までです。
基本的には、mongoDBのインストールマニュアルを参照します。
事前パッケージ導入
sudo apt-get install gnupg curl
GPG key
gpg keyをダウンロードしておきます。
$ curl -fsSL https://www.mongodb.org/static/pgp/server-4.4.asc | sudo apt-key add -
mongoDBのaptのソースリスト追加
mongoDB 4.4用のリストを追加します。
$ echo "deb [ arch=amd64,arm64 signed-by=/usr/share/keyrings/mongodb-server-4.4.gpg ] https://repo.mongodb.org/apt/ubuntu bionic/mongodb-org/4.4 multiverse" | sudo tee /etc/apt/sources.list.d/mongodb-org-4.4.list
OpenSSL1.1 の導入
導入には、OpenSSLが必要になります。
$ sudo wget http://ports.ubuntu.com/pool/main/o/openssl/libssl1.1_1.1.1f-1ubuntu2_arm64.deb
$ sudo dpkg -i libssl1.1_1.1.1f-1ubuntu2_arm64.deb
$ dpkg -l | grep libssl
ii libssl-dev:arm64 3.0.10-1ubuntu2.3 arm64 Secure Sockets Layer toolkit - development files
ii libssl1.1:arm64 1.1.1f-1ubuntu2 arm64 Secure Sockets Layer toolkit - shared libraries
ii libssl3:arm64 3.0.10-1ubuntu2.3 arm64 Secure Sockets Layer toolkit - shared libraries
mongoDB導入
aptをアップデートし、mongoDBを導入します。
$ sudo apt-get update
Ign:6 https://repo.mongodb.org/apt/ubuntu bionic/mongodb-org/4.4 InRelease
Hit:7 https://repo.mongodb.org/apt/ubuntu bionic/mongodb-org/4.4 Release
$ sudo apt install mongodb-org=4.4.18 mongodb-org-shell=4.4.18 mongodb-org-server=4.4.18 mongodb-org-mongos=4.4.18 mongodb-org-database-tools-extra=4.4.18 mongodb-org-tools=4.4.18
mongoDBの起動
mongoDBを起動し、ステータスを確認します。
これで導入は完了です。
$ sudo systemctl daemon-reload
$ sudo systemctl restart mongod
$ sudo systemctl status mongod
● mongod.service - MongoDB Database Server
Loaded: loaded (/lib/systemd/system/mongod.service; enabled; preset: enabled)
Active: active (running) since Sat 2024-03-09 15:28:44 JST; 4s ago
Docs: https://docs.mongodb.org/manual
Main PID: 15024 (mongod)
Memory: 57.1M
CPU: 1.817s
CGroup: /system.slice/mongod.service
└─15024 /usr/bin/mongod --config /etc/mongod.conf
$ sudo systemctl enable mongod
Flaskの導入、実行
Flaskの環境を作ります。
なお、本書では、Pythonのvenvに環境を作ります。
(venvで作成しておけば、不要になった際に丸ごと削除できるので。)
Python環境の確認
$ python3 -V
Python 3.11.6
$ pip3 -V
pip 23.2 from /usr/lib/python3/dist-packages/pip (python 3.11)
Python-venvの導入
sudo apt install python3.11-venv
仮想環境の作成
appディレクトリ配下に、「flask」の仮想環境を作ります。
なお、ユーザパーミッションがない場所に作成すると、
To install Python packages system-wide, try apt install
python3-xyz, where xyz is the package you are trying to
install.
と戦うことになるので、ご注意ください。
$ sudo mkdir app
$ cd app
$ sudo python3 -m venv flask
app$ ls -la
total 12
drwxr-xr-x 3 root root 4096 Mar 9 15:42 .
drwxr-xr-x 20 root root 4096 Mar 9 14:06 ..
drwxr-xr-x 5 root root 4096 Mar 9 14:07 flask
仮想環境の起動と終了
起動には「activate」、終了には「deactivate」を使用します。
Activateすると、(flask)が表示されます。
$ cd /app
$ source flask/bin/activate
(flask) $
(flask) $ python3 -V
Python 3.11.6
(flask) $ deactivate
app$
flaskの導入
flask仮想環境に「flask」を導入します。
最初にpipだけ上げて、flaskを導入します。
(flask) $ pip list
Package Version
---------- -------
pip 23.2
setuptools 68.1.2
(flask) $ python3 -m pip install --upgrade pip
(flask) $ pip list
Package Version
---------- -------
pip 24.0
setuptools 68.1.2
(flask) $ python3 -m pip install flask
(flask) $ pip list
Package Version
------------ -------
blinker 1.7.0
click 8.1.7
Flask 3.0.2
itsdangerous 2.1.2
Jinja2 3.1.3
MarkupSafe 2.1.5
pip 24.0
setuptools 68.1.2
Werkzeug 3.0.1
(flask) $ python3
>>> import flask
>>> flask.__version__
'3.0.2'
Flask 動作確認
app.pyを作り、とりあえず、Hello world! しましょう。
(flask) app$ cd flask
(flask) app/flask$ mkdir main
(flask) app/flask/main$ touch app.py
(flask) app/flask/main$ vim app.py
以下のコードをapp.pyに記述します。
from flask import Flask
app = Flask(__name__)
@app.route("/")
def hello_world():
return "<p>Hello world!</p>"
if __name__ == "__main__":
app.run(host="0.0.0.0", port=5000, debug=True)
保存して、app.pyを実行します。
urlが表示されるので、ブラウザで確認し、Hello world!が表示されることを確認しましょう。
(flask) /app/flask/main$ python3 app.py
* Serving Flask app 'app'
* Debug mode: on
WARNING: This is a development server. Do not use it in a production deployment. Use a production WSGI server instead.
* Running on all addresses (0.0.0.0)
* Running on http://127.0.0.1:5000
* Running on http://192.168.1.100:5000
Press CTRL+C to quit
* Restarting with stat
* Debugger is active!
* Debugger PIN: 885-035-560
192.168.68.100 - - [09/Mar/2024 16:50:40] "GET / HTTP/1.1" 200 -
192.168.68.100 - - [09/Mar/2024 16:50:40] "GET /favicon.ico HTTP/1.1" 404 -
以上で、Flask導入は完了です。お疲れ様でした。
以下は、mongoDBの導入に関する説明付き記事です。
・MogoDB インストールマニュアルからの修正箇所の説明
・起動に失敗した場合の削除方法
ここから先は
¥ 100
この記事が気に入ったらサポートをしてみませんか?