プログラミング素人のはてなブログ

プログラミングも電気回路も専門外の技術屋の末端が勉強したことや作品をアウトプットするブログ。コードに間違いなど見つけられたら、気軽にコメントください。 C#、Python3、ラズパイなど。

HerokuにPythonでサーバーを構築する

Herokuでアプリを動かしてみたい

PythonにはFlaskという使いやすいサーバーモジュールがあります。
これを用いてサーバーを構築してみたいと思いました。
ラズパイなどで構築する方法もありますが、(家の)外部からのアクセスを考えるとサーバーレスのほうがいいと思い、HerokuとPythonで構築を試してみることにしました。

UbuntuPythonの別Versionをインストールする

Heroku上のPythonは2021年5月現在、デフォルトは3.9.5です。
PythonではPythonのVersionとモジュールのVersionが依存関係が強いので、ローカル(Ubuntu)とリモート(Heroku)のPythonのVersionは統一したいです。
ここで個人的な都合(N予備校の教材でUbuntuにHeroku CLIがセットアップされているの)でVirtualBoxで構築した仮想環境のUbuntuPythonの仮想環境を構築します。
私のUbuntuではPython3.6.9がインストールされていました。
↓によれば3.6.9または3.7.4も使えるはずですが、runtime.txtで指定しようとしても上手くいきませんでした。

サポートされているランタイム
python-3.7.4​ (すべてのランタイムスタック)
python-3.6.9​ (すべてのランタイムスタック)
python-2.7.16​ (すべてのランタイムスタック)

devcenter.heroku.com

以下を参考に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のログインがスマホアプリによる認証が必要になっています。
f:id:s51517765:20210526223938p:plain
わたしはSaleceforece Authenticatorを選択しました。
f:id:s51517765:20210526224118p:plain
指示に従って、アプリをインストールし情報を登録すれば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の位置づけはまだあれなのでしょうか。