この記事では、flaskのチュートリアルを参考して作成したプログラムを、PythonAnywhereにをデプロイする方法を紹介します。
PythonAnywhereにflaskをデプロイする準備
最初にFlaskの公式チュートリアルを参考に、ローカルでwebアプリを開発します。
ローカル開発環境のディレクトリ構成
プロジェクト名(*1)/
├── プロジェクト名(*2)/
│ ├── static/
│ │ ├── style.css
│ │ その他ファイル...
│ │
│ ├── templates/
│ │ ├── base.html
│ │ その他ファイル...
│ │
│ ├── __init__.py
│ その他ファイル...
│
├── venv
└── instance
PythonAnywhereの準備
アカウントを登録
アカウントを登録を登録しましょう。
フリープランだとウェブアプリのドメイン名にアカウント名が含まれます。公開しても問題ないアカウント名にするのか無難かと思います。
https://アカウント名.pythonanywhere.com/〇〇
FlaskのWebアプリのデプロイ準備
以下の順番アクセスしでデプロイの準備をします。
- 左上のWebをクリック
- 左上にあるAdd a new web appをクリック
- Your web app's domain nameをフリープランならNext
- Select a Python Web frameworkでFlaskを選択
- Select a Python versionは各自の環境に合わせて選択
- Quickstart new Flask projectはそのままで問題なし
デプロイ
デプロイするファイルの準備
今回は直接ファイルをアップロードします。
プロジェクト名(*1)の階層でファイルを以下のように変更し、zipファイルを作成します。
プロジェクト名(*1)/
└──プロジェクト名(*2)/
├── static/
│ ├── style.css
│ その他ファイル...
│
├── templates/
│ ├── base.html
│ その他ファイル...
│
├── __init__.py
その他ファイル...
ファイルのアップロード
今回は、直接ファイルをアップロードする手順を紹介します。
以下の手順でアップロードします。
- 左上のFilesをクリック
- /home/アカウント名の階層で、Upload a fileをクリックし、先ほど作成したプロジェクト名(*1).zipをアップロード
- 同じ階層でOpen Bash console hereをクリックし、以下のコマンドを実行してzipファイルを展開
$ unzip プロジェクト名(*1).zip
zipファイル展開後、確認として、以下のディレクトリに、init.pyがあることを確認してください。
/home/アカウント名/プロジェクト名(*1)/プロジェクト名(*2)/__init__.py
必要なライブラリをPythonAnywhereでpip installする
各自の開発に合わせて適宜、使用するライブラリをpip installします。
$ pip install --user <<インストールしたいもの>>
仮想環境を利用する際に使用するコマンド
仮想環境の作成
$ mkvirtualenv myvirtualenv
再アクティブ化
$ workon myvirtualenv
非アクティブ化
$ deactivate
Flaskチュートリアルのようにデータベースを初期化する場合(Sqliteの場合)
チュートリアルと同じコマンドなら、以下のように実行するとできました。
~/プロジェクト名(*1) $ flask --app プロジェクト名(*2) init-db
プロジェクト名(*2)と同じ階層に、instanceのフォルダができると思います。
/home/アカウント名/プロジェクト名(*1)/
Static filesの設定
Staticとtemplatesの設定をします。
WebのページにあるStatic filesへ以下のように設定をします。
クリックすると、入力できます。
URL | Directory |
---|---|
/static/ | /home/アカウント名/プロジェクト名(*1)/プロジェクト名(*2)/static |
/static/ | /home/アカウント名/プロジェクト名(*1)プロジェクト名(*2)/templates |
Enter URL | Enter path |
Codeの設定
WebのCode:の設定を行います。
Source code:を以下のように設定してください
/home/アカウント名/プロジェクト名(*1)/プロジェクト名(*2)/
Working directory:を以下のように設定してください
/home/アカウント名/
WSGI configuration file:の設定
以下のように設定してください。
import sys
project_home = '/home/アカウント名/プロジェクト名(*1)/'
if project_home not in sys.path:
sys.path = [project_home] + sys.path
from プロジェクト名(*2) import create_app
application = create_app()
コメント部分は消してあります。
チュートリアルと同じ関数名、クラス名を想定しています。(create_app())
Securityの設定
適宜設定してください。
暗号通信にしたり、アクセスするためのパスワードを簡単に設定できます。
終わりに
初見でデプロイに時間がかかったので、その情報を共有したいと思い作成しました。
お役に立てれば幸いです。
間違っている点などコメントしていただけると、非常に嬉しいです。
引用・参考