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 インストールマニュアルからの修正箇所の説明
・起動に失敗した場合の削除方法

ここから先は

5,839字 / 1画像

¥ 100

この記事が気に入ったらサポートをしてみませんか?