Herokuでアプリを動かしてみたい
PythonにはFlaskという使いやすいサーバーモジュールがあります。
これを用いてサーバーを構築してみたいと思いました。
ラズパイなどで構築する方法もありますが、(家の)外部からのアクセスを考えるとサーバーレスのほうがいいと思い、HerokuとPythonで構築を試してみることにしました。
UbuntuにPythonの別Versionをインストールする
Heroku上のPythonは2021年5月現在、デフォルトは3.9.5
です。
PythonではPythonのVersionとモジュールのVersionが依存関係が強いので、ローカル(Ubuntu)とリモート(Heroku)のPythonのVersionは統一したいです。
ここで個人的な都合(N予備校の教材でUbuntuにHeroku CLIがセットアップされているの)でVirtualBoxで構築した仮想環境のUbuntuにPythonの仮想環境を構築します。
私のUbuntuではPython3.6.9
がインストールされていました。
↓によれば3.6.9
または3.7.4
も使えるはずですが、runtime.txt
で指定しようとしても上手くいきませんでした。
サポートされているランタイム
python-3.7.4 (すべてのランタイムスタック)
python-3.6.9 (すべてのランタイムスタック)
python-2.7.16 (すべてのランタイムスタック)
以下を参考にPythonの仮想環境とPython3.9をインストールします。
www.suzu6.net
kazuhira-r.hatenablog.com
まず、pipとvenvをインストールします。
$ sudo apt install python3-venv python3-pip
Python3.9については、こちら↓のとおりに行うことでがインストールできました。
(3.8でよければ上記のみを参考にインストールできます。)
techstorm.io
$ sudo apt install software-properties-common $ sudo add-apt-repository ppa:deadsnakes/ppa $ sudo apt install python3.9 $ python3.9 -V >>> Python 3.9.5
これでPython 3.9.5
がインストールできました。
つぎに仮想環境を構築します。
# venvのモジュールが入ったpython3-venvをインストール $ sudo apt install python3.9-venv # 仮想環境の名前(ここではpython39)を決める $ python3.9 -m venv python39 # ディレクトリを移動 $ cd ~/python39/bin # activate $ source activate
ターミナルの表示が以下のようになれば仮想環境の起動が完了です。
(python39) vagrant@ubuntu-bionic:~/python39/bin$
ここでPythonのVersionを確認すると、3.9.5
が有効になっていることがわかります。
また、Pythonのデフォルトがこれになっているので、python3
としなくてもよくなります。
$ python -V >>>Python3.9.5
また、Pythonの仮想環境を抜ける(不活化)は以下のようにします。
$ deactivate
HerokuにデプロイするサーバープログラムのHello world!
基本的に↓のとおりに実行すればOKです。
qiita.com
ハマったところはrequirements.txt
は以下のように最低限だけにするほうが良いようです。
PythonのVersionとの不整合があるとHeroku上でのデプロイが失敗します。
Flask==1.1.1 gunicorn==20.0.4 itsdangerous==1.1.0 Jinja2==2.10.3 MarkupSafe==1.1.1 Werkzeug==0.16.0
また、Herokuのログインがスマホアプリによる認証が必要になっています。
わたしはSaleceforece Authenticatorを選択しました。
指示に従って、アプリをインストールし情報を登録すればOKです。
あとは、Herokuにgitでデプロイします。
# Herokuはセットアップ済みとする $ heroku login $ heroku create $ git init $ git add . $ git commit -m "コミットメッセージ" $ git push heroku master
まとめ
HerokuにPythonでサーバーを構築しました。
この中でPythonの仮想環境をVirtualBox上のUbuntuに構築しました。
UbuntuにPython3.9をインストールするには少し特殊なところがあります。Python3.9の位置づけはまだあれなのでしょうか。