
はじめましてこんにちは、ひょうどうです。
今回は、Raspberry Piで起動時にアプリを外部からアクセスできるようにする方法を紹介します。
本記事ではPythonでアプリを作った前提で話を進めます。
あくまで、作ったアプリを起動時に外部に公開する方法の紹介となります!
Pythonアプリのサービスファイルを作成
サービスファイルの作成
まずサービスファイルを作成します。
「python_app.service」という名前でファイルを作成してください。
<python_app>は好きに設定できます。
作成したら以下のソースを記載してください!
[Unit]
Description=python app
[Service]
WorkingDirectory=/home/pi
User=pi
ExecStart=/usr/bin/python3 /home/pi/Desktop/python_app/main.py
[Install]
WantedBy=multi-user.target
EcexStart=のあとに記載されているコマンドが、起動時に実行されるコマンドです。
main.pyというファイルを実行してますが、ファイルの場所はどこでも大丈夫です。お好きな場所においてください!
python_app.serviceファイルを /etc/systemd/system/ 配下に置きます。
mvコマンドで移動する際にはsudoが必要です。
移動が完了したら以下のコマンドで起動時に実行できるようにします。
sudo systemctl enable python_app.service
sudo systemctl start python_app.service
sudo systemctl status python_app.serevice
これでpythonアプリの設定は完了です。
GPIOピン使用時の注意事項
GPIOピンを使用している場合、開発中は起動できたのにサービスコマンドでは以下のようなエラーが出る場合があります。
bus = smbus.SMBus(1) IOError: [Errno 2] No such file or directory
その場合、以下の記事を参考にしてみてください!
ngrokのサービスファイルを作成
ngrokの初期設定
以下のコマンドでngrokをダウンロード&解凍し、ngrokコマンドを使用可能にします。
wget https://bin.equinox.io/c/4VmDzA7iaHb/ngrok-stable-linux-arm.zip
unzip ngrok-stable-linux-arm.zip
sudo mv ngrok /usr/local/bin/
ngrok version
ngrokのバージョンが表記されればOKです!
ngrokの使い方は以下の記事を参考にしてください。
serviceファイルを作成
次にserviceファイルを作成します。
/etc/systemd/system/
上記のパス配下に自動起動させたいサービス(アプリ)の設定をファイルを置きます。
今回はngrokとpthonアプリの2つを作成します。
まず「ngrok.service」というファイル名でファイルを作成し、以下のソースを記載します。
[Unit]
Description=ngrok
[Service]
ExecStart=/usr/local/bin/ngrok http -authtoken <authtokenコード> -subdomain <サブドメイン> -region=jp -log=stdout <ポート番号>
[Install]
WantedBy=multi-user.target
⚠サブドメインは有料プランでしか使用できません!
ngrok.serviceファイルを /etc/systemd/system/ 配下に置きます。
mvコマンドで移動する際にはsudoが必要です。
移動が完了したら以下のコマンドで起動時に実行できるようにします。
sudo systemctl enable ngrok.service
sudo systemctl start ngrok.service
sudo systemctl status ngrok.serevice
これでngrokの設定は完了です。
2つのサービスを設定完了したら、再起動して設定したサブドメインのngrok URLにアクセスしてみてください。
サブドメイン:aaaaaaa
リージョン:jp
の場合、https://aaaaaa.jp.ngrok.ioでアクセスできます。