はじめに
だんないよ、nikkieです。
4/30の#mokupyでAzureのVM(CentOS)に
FlaskアプリケーションをデプロイしてHello Worldしてきました。
勉強会の概要
取り組んだこと
以下の記事を参考に、AzureにLinuxのVMを構築し、
Hello WorldするFlaskアプリケーションをApacheとmod_wsgiとで動作させました。
(以降では「30分記事」と呼びます)
#mokupy
— nikkie (@ftnext) 2018年4月30日
ネットワークセキュリティグループ側の設定が必要だった。https://t.co/ZsN5JPeAqU
VMで構築できたーーー!(と思いたい) pic.twitter.com/k2rQ8so3Lf
https://twitter.com/ftnext/status/990861840501489664
https://twitter.com/ftnext/status/990861840501489664
業務でPaaSにデプロイしたところ、POSTするエンドポイントが500内部サーバエラーとなりハマっています。
代替手段が必要そうなので予習してみました。
VM作成
30分記事とバージョンを揃えるためCentOS6.8で検索。
(CentOSは6系と7系でコマンドが変わる認識。大きな読み替えは無しで進めた方が成功しやすいと考えた。)
D2s_v3 Standardで動くものがあったので、費用を抑えるために
「CentOS-based 6.8 HPC Rogue Wave Software (formerly OpenLogic)」を選択。
▼作成手順の参考
Azureに仮想マシン(CentOS)を構築する | OSS on Azure 技術ブログ
環境構築
- 必要なパッケージのインストールはなぜ必要かはわかっていないが入れてみた感じ。
- Pythonは3.6.5に読み替えてインストール。
以下のページの「Gzipped source tarball」のURLをwgetしているんですね。
https://www.python.org/downloads/release/python-365/
./configureやmakeが何をやっているか全く分かっていない。文字が流れていった。。 - mod_wsgiは4.6.4をインストール。
mod_wsgiについて./configureするところですが、
Pythonを/usr/local/bin/python3.6にインストールしているので、
赤字のように修正が必要だと思います。
./configure --with-apxs=/usr/sbin/apxs --with-python=/usr/local/bin/python3.6
(修正せずに進めたところ、/usr/local/bin/python3: No such file or directory というエラーが出た)
Apacheとmod_wsgiの設定
簡略化されすぎていてほとんど初めてconf書く人間には理解できなかった。。)
Invalid command 'WSGIScriptAlias', perhaps misspelled or defined by a module not included in the server configuration
[Python] mod_wsgiを使ってPython3.6をApacheで動かす(CentOS6系) - YoheiM .NET
(なぜ30分記事と違ってロードされないのかは不明)
落とし穴:Azureのネットワークセキュリティグループの設定
Apacheのconfのエラーが消せたと思ったら、次はHello Worldのページが表示されない。。
error_logにも出てこないので、リクエストがVMまで届いていない感じ。
→80番ポートへのHTTPアクセスを許可する必要がありました。
Azure Portal を使用した VM へのポートの開放 | Microsoft Docs
束の間の安息と次なる課題
Hello Worldできたので「やったか!?」と思いきや
Hello Worldする別のGETアクセスポイントを追加すると500エラー。
これはブラウザからのアクセスによるのではなく、pythonコマンドでファイルを実行しても発生する。
今回は時間切れなので、引き続き取り組んでいきます。
感想
- 環境構築がブラックボックスすぎて、エラーが自己解決できない不安あり。
(アクセスポイント増やしたところFlaskアプリが動かなくなったのは
環境構築に起因した問題でないことを祈るのみ) - VM作り直すたび、./configureからmakeするの大変だよなあ。(何回も繰り返したくない。。)
→Docker使えばいいんじゃないか? Dockerに俄然興味出てきた。
ハマっている事象:WebAppsのFlaskにPOSTすると500エラー
最後にVMで構築することになった経緯を書いておきます。
PythonのWebサーバを立てよう
→VM構築するよりPaaSの方が構築が簡単らしい
→チュートリアルのとおりにやったら短時間でHello Worldできた
Azure に Python Web アプリを作成する | Microsoft Docs
→POSTのエンドポイント追加してみたら内部サーバエラー
この内部サーバエラーが解決できない。。
- 何が原因かがわからない。(スタックトレースが見られていない。期待しているものは見られないのかもしれない)
- Kuduを使うとIISのスタックトレースは見られた。IISはまったく経験がなく提示している情報がつかめない。
今回診ていただいたところ、IIS関連(web.config)の設定ではないかという話ですが、
POSTだけ500エラーという挙動はやはり謎。
診ていただきありがとうございました。
もくもく会参加者の皆さま、1日お疲れさまでした&ありがとうございました。