環境情報
環境
Raspi 3B+
OS rasbian (stretch)
pip 20.2.4
python 3.5
npm 6.14.9
forever v3.0.2
flask 0.12.1
各種インストール
$ pip install Flask
$ npm install -g forever
Flaskでサーバを立てる
(参考)https://qiita.com/tomboyboy/items/122dfdb41188176e45b5
hoge.py
from flask import Flask
app = Flask(__name__)
@app.route('/')
def index():
return 'Hello world'
if __name__ == '__main__':
app.run(debug=False, host='0.0.0.0', port=5000)
実行(テスト)
$ python hoge.py
^C
トラブルシュート
- 80番ポートを使用しようとすると
Permittion Deny
で弾かれるので他を利用するといい。
(参考)https://stackoverflow.com/questions/550032/what-causes-python-socket-error - ファイアウォール設定変更(ラズパイ内から
curl 192.168.x.x:5000
が通るが外からアクセスできない場合)
$ sudo ufw allow 5000
実施。
永続化
このままだとsshを抜ける際にプロセスが終了するのでforeverで永続化する。foreverはコマンドがデフォルトでnodeなだけで-c
オプションを利用することで任意のコマンドを指定でき、Pythonコードも永続化できる。
永続化を実行
$ forever start -c python hoge.py
foreverのコマンドやオプションについては以下参考
https://qiita.com/disc99/items/57490f5eef3e2eb685ba
再起動時にforeverを実行する
上記のままでもラズパイ自体をrebootすると起動時にforeverが実行されないためサーバは死んでしまっている。
/etc/rc.local
に以下を記述
(参考)https://584homes.com/it/raspberry-pi/rasberrypi-startup1803.html%20=
rc.local
sudo forever start -a --uid Hoge -c python /home/pi/hoge.py
exit 0