Flaskでhttps

プログラミングの、サーバサイドのメモ。

やりたいこと
Flaskで作ったサーバを、独自ドメインかつhttpsで運用する

・環境: Ubuntu 16.04 (ConoHa VPS),  Python 3.5.2
・使うもの: Flask, nginx, Let's Encrypt
バージョンは2017.10~11あたりでメジャーなやつだと思う

参考サイトはPocketで雑多にメモしてて、同じような記事をいくつも登録して結局どれを参考にしたのかわからなくなりがち。

サーバ周りもPythonも知識が全然無いから認識や言葉遣いが違うかも

 

 

全体の流れ
Flask単体ではサーバ証明書を使えなさそうだったから、nginxから証明書の設定、FlaskのアプリケーションをGunicorn経由でnginxから接続、みたいな感じになってる(とおもう)

 

① まずはnginxを
ググれば沢山出てくる
参考:How To Serve Flask Applications with Gunicorn and Nginx on Ubuntu 16.04 | DigitalOcean

② nginxからFlaskを
参考が同じだけど上のとこれはここの通りにできた
元気がなかったのでvirtualenv周りは設定せずにやった
参考:How To Serve Flask Applications with Gunicorn and Nginx on Ubuntu 16.04 | DigitalOcean

③ nginxにLet's Encryptを
https化する。Flaskは切り離して考えらるはず
参考:Let's Encrypt で Nginx にSSLを設定する - Qiita

できた。
やったぜ。

 

追記
ConoHa VPSでサーバを別のマシンに移す際に、イメージディスクを書き出し→そこから新たにサーバを、という流れでやったら、.sockが作られずに上手く繋げられないことがあったが、その周辺のserviceを全部stopしてからstartしていったら直った。詳しいことは知らんけど。

処理に時間がかかるタイプのとあるアプリケーションで、502が出てしまって処理も中断みたいなことになった。
nginx側の設定も少し変えたが、一番引っかかったのはgunicorn側のタイムアウトの設定をすることだった。
上記の手順の場合は、作成した .../APP.service の中身のgunicornのコマンドの引数に、--timeout 120 等と設定すればOK

 

弱くて他に詰まった点
ドメインDNSが迷子だよ!って3日間言われ続けて、おかしいなあっておもったら、ConoHa側のドメインの設定でAレコードを設定してなかった(ドメインの取得はNamecheapから。そっちが原因だと思い込んでた。すみませんでした)
・どうやって設定したのかもう忘れたけど、ConoHaでUbuntuの環境設定したら最初からPythonが入ってて、python/pipコマンドはPython2、python3/pip3コマンドはPython3が動く。python3には早めに気づけたけどpip3にはなかなか気づかなかった。弱い。


レンタルサーバのクイッカ(サーバサイドは全部PHPで書いていた)という格安サービスからConoHaに乗り換えたけど、通信や処理も速いしPythonでサーバサイド組むの楽だし、良かった。