Pythonanywhere上で、環境変数を設定してWebアプリをデプロイする手順

先日Pythonanywhereを使ってポートフォリオを公開したのですが、その設定手順の備忘録をまとめておきます。
もし間違っている部分がありましたらご指摘いただけると幸いです。


Gitの準備

- githubでpublicリポジトリを生成。pushする。


Pythonanywhereでの設定

- Pythonanywhereでのユーザ登録(手順に従って普通に登録すれば良い)
- APIトークンを作成する(初回のみ。アカウントページのAPI Tokenと言うタブから)


- Web > Code: > Python versionを、使っているバージョンに合わせておく。


- ログインしたら、Consoles > Bashを開く

- $ pip3.8 install --user pythonanywhere のコマンドでユーザ設定。

- $ pa_autoconfigure_django.py --python=3.8 https://github.com/[ユーザー名]/[プロジェクト名].gitのコマンドで、Githubに先ほどpushしたソースをごそっと持ってきて、よしなにデプロイしてくれる。
もし、既に作ったアプリを上書きしたい場合は、$ pa_autoconfigure_django.py --python=3.8 https://github.com/[ユーザー名]/[プロジェクト名].git --nukeと、末尾に--nukeをつける。
ここまでで、Git上のリポジトリを引っ張ってこられる。

※上記のpython=3.8のバージョンは、自分の使いたいバージョンに合わせて変える。

- Bashで[ユーザ名].pythonanywhere.comと言う名前のフォルダの中身を探して、/staticと/mediaのパスを確認しておき、Webタブを開いて、/staticと/mediaのファイルパスを合わせておく。




wsgiファイルの設定

外側に見せたくないSECRET_KEYなどを別途.envで管理していた場合、上記設定のままではKeyError: 'SECRET_KEY' のエラーが出て、サイトが表示できない。そのため、環境変数としてwsgiファイル内で登録しておく。

- Web > Code: > WSGI configuration fileの、/var/www/[ユーザ名]_pythonanywhere_com_wsgi.pyファイルをクリックして開く。os.environ['DJANGO_SETTINGS_MODULE'] = 'portfolio.settings'の下あたりに、以下のような感じで、変数を貼り付け。

os.environ["SECRET_KEY"] ="ここにシークレットキーが入る"
os.environ["DATABASE_URL"] ="ここにデータベースURLが入る"

この時、末尾行のapplication = get_wsgi_application()より下に上記の環境変数を貼り付けてしまうと、正しく動かないので注意。必ずそれより前の行に貼ること。



仮想環境での環境変数の設定

(上記wsgiファイルの設定をすれば不要かもしれない手順?)

Bash内で$workonコマンドを叩くと、仮想環境一覧が表示される。
$workon [ユーザ名].pythonanywhere.com で仮想環境に入る。

次のようにexportコマンドで環境変数を登録。
$ export SECRET_KEY="ここにシークレットキーが入る"
$ export DATABASE_URL="ここにデータベースURLが入る"


まとめ

環境変数を設定してのデプロイでだいぶ苦労したので、どなたかの助けになれば幸いです。

参考