0
0

SQLite3を使ったFlaskアプリケーションをとりあえずデプロイ

Last updated at Posted at 2024-05-03

はじめに

自分が現在個人開発しているFlaskアプリケーションをささっととりあえず外部に公開したいなと思い、何がいいんだろうと色々調べていたところ、Render.comという良さげなものを見つけたので、これを使ってFlaskアプリケーションをデプロイしていこうと思います。

Render.comとは?

WEBアプリケーションのデプロイをGUIで簡単に操作できるPaaS。Herokuは有料になってしまったっぽく、その代わりとしてRender.comが注目を集めているようですね!

Githubでのデプロイをトリガーにして自動的にデプロイしてくれる(もちろん無効化することもできる)ので、わざわざデプロイ操作し直さなくていいところが便利ですね。

早速デプロイ

1. app.pyを作成

Blueprintを使って分割したFlaskアプリケーションの核となるファイルapp.pyだけこちらで公開します。詳しくはこちらのレポジトリをご覧ください。(鋭意開発中です)

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にまとめていましたので、下記をそのまま環境変数として登録しました。

.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にアクセスすると、クラウド上できちんと動作していることが確認できる。

その他参考にした資料

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0