PythonanywhereというPythonを使用したウェブアプリをホスティングできるサービスを使って、Flaskとsqliteを使用したウェブアプリを公開することができた。
Flask はPythonのマイクロフレームワークでURLのルーティングやフォームの使い方がわかりやすく、自分はよくFlaskでウェブサイトを作成してます。
PythonのORMであるpeeweeを使用すると簡単にデータベースとウェブアプリの接続ができる。PythonのORMは他にはSQLAlcamyが有名。今回はデータベースの細かな設定やインストールの必要がないsqliteを使用した (というかまだsqliteしか使えない)
自分の後々の記録のためにもここに簡単にまとめておく。
Pythonanywhereでsqliteは使えるか
PythonanywhereはMySQLとPostgresのサポートをしていて、特段sqliteについての表記はFAQにしかないが、問題なく使えます。データベースのインストールが必要ないので必要なライブラリを読み込んで、Pythonのコードの中に含めるだけでOK。sqliteのデータベース使用準備のために自分が使用したコードはこんな感じ。
from peewee import *
DATABASE = 'xxxx.db'
DEBUG = True
SECRET_KEY = 'xxxxxxxxxxxxxxx'
database = SqliteDatabase(DATABASE)
もちろんこの跡にデータベースのフィールドや初期化やデータベース作成などのためのコードが必要になる。
エラーログを必ず確認
ローカル環境で正常にコードが走っていて、データベースに目的のデータを格納できていたとしても、Pythonanywhere上にアップしたときにはエラーが発生して、遷移するはずだったページが表示されない場合もある。
そんなときは必ずエラーログをみて確認。自分がエラー発生した時はデータベースとの接続とフィールドに問題があったようなので、新しくPythonanywhere上で新しく作成された.dbファイルを使用するのではなく、ローカルで予め作成したデータベースをアップして使用したらエラーがなくなり上手くいった。
ドメイン名の登録と関連付け
やるべきことは4つほど。
- Pythonanywhereで $5支払う。
- Configuration for と書かれた箇所に自分のドメイン名をサブドメイン付きで入力する。自分の場合は “www.blogle.site“
- ドメイン名を取得。Gandil.netがおすすめ
- Pythonanywhereの管理画面上に「CNAMEに~~~~~を追加してください」というメッセージが表示されるので、その~~~~~の部分をコピー。使用しているドメインレジストラのドメイン名管理ページのDNS設定ページで、CNAMEレコードに~~~~~~を追加。※ CNAMEレコードには最後に「 . 」(ピリオド)が必要なのでお忘れなく。
これだけで自分のドメイン名にアクセスすると、Pythonanywhereにアップされたウェブアプリにアクセスすることができる。
Pythonanywhere での SSL/TLS設定
Pythonanywhereの”Web”のページの下の方に”Security:”と書かれた箇所があるのでそこまで移動。
HTTPS CERTIFICATE とあるので、”Auto-renewed Let’s Encrypt certificate”を選択して保存。そうすると数秒でHTTPSが適用される。
常にhttpsアクセスにしておきたい人はその下にある “Force HTTPS:” のトグルボタンをクリックしてEnabledにしておくとよい。自分はそうしました。
あとドメインレジストラのサイトでリダイレクト設定もしておくとよい。ベアドメインにアクセスしたら www を含むサブドメインに自動的にリダイレクトされるようにしましょう。
Gandil.netだと追加料金などは一切なくめちゃ簡単に設定できます。
今回アップしたサイトはこちら。
まだRSSフィードを利用したブログ最新記事の自動表示しかできていないが、検索機能などもっと機能充実させる予定です。
コメント