結論
Netlifyは静的サイトのホスティングサービスのため、API(のみ)の公開はできないらしい。(デプロイには成功するが404エラーになる)
Herokuにデプロイすることで解決した。
開発環境
- Mac
- Python 3.11.3(バージョンは任意)
- デプロイ時はサポートしているバージョンに合わせる
- Flask 3.0.2
APIの作成
まずは簡単なflaskアプリを作成するところから始める
flaskのinstall
pip install Flask
開発フォルダの作成
mkdir my-test-api
cd my-test-api
APIの作成
pythonファイルのファイル名は任意
from flask import Flask
import os
app = Flask(__name__)
@app.route('/')
def hello_world():
return 'Hello World!'
if __name__ == "__main__":
app.run(host="0.0.0.0", port=int(os.environ.get("PORT", 5000)))
ローカル環境でのテスト
実行する。
WARNINGが出るが問題なし。
$ python main.py
* Serving Flask app 'main'
* Debug mode: off
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://10.68.150.34:5000
Press CTRL+C to quit
127.0.0.1 - - [31/Mar/2024 12:09:10] "GET / HTTP/1.1" 200 -
http://127.0.0.1:5000 にアクセスすると、
「Hello World!」が表示されていることが確認できる。
Netlifyへのデプロイの準備
デプロイに必要なファイルを作成していく。
runtime.txt
NetlifyでサポートしているPythonのバージョンを確認する。
特に何もなければDefalutを設定する。
echo "3.8" > runtime.txt
Procfile
install gunicorn
echo web: gunicorn main:app --log-file=- > Procfile
requirements.txt
pip freeze > requirements.txt
gunicornの行が出力されていることを確認。
ファイルの作成完了
my_test_app/
│
├── main.py
├── Procfile
├── requirements.txt
└── runtime.txt
デプロイ
NetlifyでAdd new Siteする。
Gitにリポジトリを作成して、そのリポジトリを連携するようにすると楽。
デプロイ設定は下記とした。
デプロイには成功するが、404エラーになる。
参考記事
https://stackoverflow.com/questions/69646745/python-netlify-page-not-found-error-404-even-when-the-site-is-built-without-an
https://answers.netlify.com/t/hosting-python-apps/94405
補足: Herokuへのデプロイ
herokuだと公開できるようなので確認してみる。
runtime.textの書き換え
herokuでサポートしているPythonのバージョンを確認する。
- 3.8
+ python-3.11.3
heroku CLI インストール
brew tap heroku/brew && brew install heroku
heroku ログイン
heroku login
アプリ作成
アプリ名は他と被らないような任意のサイト名を設定する。
heroku create アプリ名
(例)これだと被るので作成できない
heroku create my-test-api
リモートブランチ作成
my-test-apiの部分は作成したアプリ名に置き換え
heroku git:remote -a my-test-api
Herokuにmainブランチをpushする
git push heroku main
サイト確認
heroku open