はじめに
自分が現在個人開発しているFlaskアプリケーションをささっととりあえず外部に公開したいなと思い、何がいいんだろうと色々調べていたところ、Render.comという良さげなものを見つけたので、これを使ってFlaskアプリケーションをデプロイしていこうと思います。
Render.comとは?
WEBアプリケーションのデプロイをGUIで簡単に操作できるPaaS。Herokuは有料になってしまったっぽく、その代わりとしてRender.comが注目を集めているようですね!
Githubでのデプロイをトリガーにして自動的にデプロイしてくれる(もちろん無効化することもできる)ので、わざわざデプロイ操作し直さなくていいところが便利ですね。
早速デプロイ
1. app.pyを作成
Blueprintを使って分割したFlaskアプリケーションの核となるファイルapp.py
だけこちらで公開します。詳しくはこちらのレポジトリをご覧ください。(鋭意開発中です)
from flask_app.config import Config
from flask import Flask
from flask_sqlalchemy import SQLAlchemy
from flask_migrate import Migrate
from flask_login import LoginManager
import secrets
db = SQLAlchemy()
login_manager = LoginManager()
login_manager.login_view = "auth.login"
login_manager.login_message = ""
def create_app():
app = Flask(__name__)
app.secret_key = secrets.token_hex(16)
app.config.from_object(Config)
db.init_app(app)
Migrate(app, db)
login_manager.init_app(app)
from flask_app.welcome import views as welcome_views
from flask_app.route_map import views as map_views
from flask_app.auth import views as auth_views
from flask_app.home import views as home_views
from flask_app.profile import views as profile_views
from flask_app.error import views as error_views
app.register_blueprint(welcome_views.welcome, url_prefix='/')
app.register_blueprint(map_views.route_map, url_prefix='/map')
app.register_blueprint(auth_views.auth, url_prefix='/auth')
app.register_blueprint(home_views.home, url_prefix='/home')
app.register_blueprint(profile_views.profile, url_prefix='/profile')
app.register_blueprint(error_views.error, url_prefix='/error')
return app
app = create_app()
if __name__ == '__main__':
app.run()
2. その他必要ファイルの準備
- .gitignore
- requirements.txt
- Flask
- Flask-Login
- Flask-Bcrypt
- Flask-Migrate
- Flask-SQLAlchemy
- Flask-WTF
- requests
- python-dotenv
- Gunicorn
- email-validator
※Gunicornとは?
Gunicorn 'Green Unicorn' はUNIX用のPython WSGI HTTPサーバーです。プリフォークワーカーモデルです。Gunicornサーバーは、様々なウェブフレームワークと幅広く互換性があり、シンプルに実装されており、サーバーリソースの消費が少なく、かなり高速です。
3. Render.comにデプロイ
3-1. 下記の1.6まで手順通り
3-2. 1.7で、項目を設定
- Build Command:
pip install -r requirements.txt
- Start Command:
flask db init && flask db migrate && flask db upgrade && gunicorn -b 0.0.0.0:$PORT flask_app.app:app
-
flask db init
: データベースの初期化 -
flask db migrate
: データベースのマイグレーションファイルの生成 -
flask db upgrade
: マイグレーションファイルに基づくデータベースの作成 -
gunicorn -b 0.0.0.0:$PORT flask_app.app:app
: Flaskアプリケーションの起動。flask_app
フォルダのapp.py
の中のapp
変数を指定してあげれば良い
-
3-3. 1.8で、環境変数を設定
ローカルで動かしたときに使っていた環境変数をここで登録します。自分は.env
にまとめていましたので、下記をそのまま環境変数として登録しました。
FLASK_APP=flask_app.app
FLASK_ENV=development
FLASK_DEBUG=1
SQLALCHEMY_DATABASE_URI=sqlite:///your-database.sqlite
SQLALCHEMY_TRACK_MODIFICATIONS=False
3-4.いざデプロイ!
うまくいくと、==> Your service is live 🎉
と表示される。ログの画面左上のURLにアクセスすると、クラウド上できちんと動作していることが確認できる。
その他参考にした資料