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

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

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

https://qiita.com/tks_00/items/73cf04c225e5f6113cd8

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

# 早速デプロイ
## 1. app.pyを作成
Blueprintを使って分割したFlaskアプリケーションの核となるファイル`app.py`だけこちらで公開します。詳しくは[こちら](https://github.com/RIKU-SEINO/share-jog/tree/develop)のレポジトリをご覧ください。（鋭意開発中です）
```python: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サーバーは、様々なウェブフレームワークと幅広く互換性があり、シンプルに実装されており、サーバーリソースの消費が少なく、かなり高速です。

https://gunicorn.org/

## 3. Render.comにデプロイ
#### 3-1. 下記の1.6まで手順通り
https://qiita.com/tks_00/items/73cf04c225e5f6113cd8
#### 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`にまとめていましたので、下記をそのまま環境変数として登録しました。
```plaintext:.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にアクセスすると、クラウド上できちんと動作していることが確認できる。

# その他参考にした資料
https://qiita.com/kizataka/items/10693e87f726a95499e4

https://qiita.com/azubiwa/items/fc941df149919d4cf700