質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
Apache

Apacheは、Apache HTTP Serverの略で、最も人気の高いWebサーバソフトウェアの一つです。安定性が高いオープンソースソフトウェアとして商用サイトから自宅サーバまで、多くのプラットフォーム向けに開発・配布されています。サーバーソフトウェアの不具合(NCSA httpd)を修正するパッチ(a patch)を集積、一つ独立したソフトウェアとして開発されました。

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

Q&A

解決済

1回答

5537閲覧

Python:Apacheでflaskを動かす際のapacheのhttpd.confの設定

退会済みユーザー

退会済みユーザー

総合スコア0

Apache

Apacheは、Apache HTTP Serverの略で、最も人気の高いWebサーバソフトウェアの一つです。安定性が高いオープンソースソフトウェアとして商用サイトから自宅サーバまで、多くのプラットフォーム向けに開発・配布されています。サーバーソフトウェアの不具合(NCSA httpd)を修正するパッチ(a patch)を集積、一つ独立したソフトウェアとして開発されました。

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

0グッド

1クリップ

投稿2017/08/27 01:59

pythonのflaskでwebアプリを作るときの
apacheのhttpd.confの設定について質問です。

単純にapacheでmod_wsgiモジュールを使った場合は
ただしく動作しました。

###mod_wsgiモジュールで実行した場合

ini

1 2<VirtualHost *:80> 3 LoadModule wsgi_module /usr/local/python/lib/python3.6/site-packages/mod_wsgi/server/mod_wsgi-py36.cpython-36m-x86_64-linux-gnu.so 4 5 WSGIDaemonProcess myapp user=my_user group=my_user 6 WSGIProcessGroup myapp 7 #WSGISocketPrefix /var/run/wsgi 8 WSGIScriptAlias / /var/www/example.com/public/index.py 9 ServerName example.com 10 DocumentRoot "/var/www/example.com/public" 11 <Directory "/var/www/example.com/public"> 12 AllowOverride All 13 Options All 14 MultiViewsMatch Handlers 15 AddHandler wsgi-script .py 16 AddHandler wsgi-script .wsgi 17 DirectoryIndex index.html index.py index.php app.wsgi 18 Order allow,deny 19 Allow from all 20 </Directory> 21</VirtualHost>

###mod_wsgiで動かす場合のpythonスクリプト

python

1def application(environ, start_response): 2 start_response('200 OK', [('Content-type', 'text/plain')]) 3 return [b'Hello, world']

上記のようなよく見るソースで問題なく動かせました。

次にflaskで実行させる場合のapacheの設定をwebで調べたところ
人様のサイトですが以下のURLから引用させてもらいました。
http://blog.akashisn.info/entry/%3Fp%3D258
上記の文献の場合

###flaskが動くと思われるapacheの設定

ini

1#flask.conf 2<VirtualHost *:80> 3 ServerName localhost 4 5 WSGIDaemonProcess flask_app user=www-data group=www-data threads=5 6 WSGIScriptAlias / /var/www/flask/flask_app.wsgi 7 8 <Directory /var/www/flask> 9 WSGIProcessGroup flask_app 10 WSGIApplicationGroup %{GLOBAL} 11 Order deny,allow 12 Allow from all 13 </Directory> 14</VirtualHost>

上記のようになっておりました。

そのため上記のような設定を踏まえて設定を変えたところ以下のようなシンタックスエラーがでました。

以下がエラー内容です Syntax error on line 211 of /usr/local/apache/conf/httpd.conf: Invalid command 'WSGIDaemonProcess', perhaps misspelled or defined by a module not included in the server configuration

結果的に動作させるためには

LoadModule wsgi_module /usr/local/python/lib/python3.6/site-packages/mod_wsgi/server/mod_wsgi-py36.cpython-36m-x86_64-linux-gnu.so

上記のmod_wsgiモジュールを読み込ませないと動作しませんでした。

###実際にflaskが動いた設定

ini

1<VirtualHost *:80> 2 ServerName *** 3 LoadModule wsgi_module /usr/local/python/lib/python3.6/site-packages/mod_wsgi/server/mod_wsgi-py36.cpython-36m-x86_64-linux-gnu.so 4 WSGIDaemonProcess app user=*** group=*** threads=5 5 WSGIScriptAlias / /var/www/***/public/index.wsgi 6 <Directory /var/www/***/public> 7 Allowoverride All 8 WSGIProcessGroup app 9 WSGIApplicationGroup %{GLOBAL} 10 Order deny,allow 11 Allow from all 12 </Directory> 13</VirtualHost>

さて,質問としては
(1)このApacheの組み込みとして動かすためのmod_wsgiモジュールがなくてもflaskが動くという場合はどのような設定にすれば良いのでしょうか?

(2)また,flaskをつかった場合,スクリプトを修正してもapacheを再起動させないと,スクリプトの変更が反映されませんでした。
しかし,冒頭のflaskを使わずにpython+apacheのmod_wsgiで実行させる場合のようにapacheを再起動させずに
スクリプトを修正してその修正を反映さえるにはどのようにしたら良いのでしょうか?

(3)apacheのmod_wsgiを使った場合の動作とはphpなどのphp5_moduleやrubyのpassengerなどと同様にapacheのプロセスとして実行させるという認識でよろしいでしょうか?

以上,有識者の方ご教授いただけますと幸いです。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

mod_wsgiモジュールがなくてもflaskが動く

mod_wsgi を使いたくないということでしょうか・・・?

Flaskを使ったWebアプリケーションを動かすには WSGI に準拠したサーバーが必ず要ります。Apache 単体では動きません。(なお FastCGI も使えますが、Flask や Django など主要なフレームワークは WSGI を推奨しています)

主なWSGI環境として、mod_wsgi、uWSGI、Gunicorn などがあります。

mod_wsgi はあなたがやったように数行の設定を書くだけで自動で連携してれます。Apache を使うのであれば、mod_wsgi を使うのが最も手軽でパフォーマンスも出るのでおすすめです。

一方で uWSGI/Gunicorn を使う場合は uWSGI/Gunicorn をHTTPサーバーとして起動させつつ、そこに Apache や NGINX からリバースプロキシさせるのが一般的です。つまり2つのサーバーを動かして連携させてやる必要があるため、構築や運用が比較的難しい・面倒になります。


スクリプトを修正してもapacheを再起動させないと変更が反映されません

mod_wsgi の場合、設定ファイルに WSGIScriptReloading を入れることでファイルの更新を検出した場合に WSGI アプリケーションを自動で再起動してくれます。

ini

1WSGIDaemonProcess myapp user=hoge group=hoge threads=5 2WSGIScriptAlias / /home/hoge/myapp/webapp.wsgi 3WSGIScriptReloading On # ←これ

ただし Apache は WSGIScriptAlias で指定したファイルの更新しか監視しないのでそのへんはうまく対処してください。


mod_wsgiを使った場合apacheのプロセスとして実行

設定によって選べます。

mod_php のように Apache ウェブサーバーのプロセスで動くモードを 組み込みモード / embedded mode といいます。一方で、Apache とは独立したプロセスで動くモードを デーモンモード / daemon mode といいます。

あなたが設定した WSGIDaemonProcess app user=*** group=*** threads=5 は daemon mode で動かすための設定です。各フレームワークは daemon mode で動かすことを推奨していますし、自由度も高いのでこのまま daemon mode を使うことをおすすめします。

もし PHP のように embedded mode で動かしたい場合は WSGIScriptAlias / /var/www/***/public/index.wsgi の一行だけ書けばよいです。

投稿2017/08/27 05:06

miyahan

総合スコア3095

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2017/08/27 10:44

ご回答ありがとうとざいmす! mod_wsgiモジュールは必須なのですね! >mod_wsgi を使いたくないということでしょうか・・・? >Flaskを使ったWebアプリケーションを動かすには WSGI に準拠したサーバーが必ず要ります。Apache >単体では動きません。(なお FastCGI も使えますが、Flask や Django など主要なフレームワークは >WSGI を推奨しています) 上記の件は,幾つかflaskを動かしているブログをのぞいたのですが全て LoadModuleの記述がなかったので,mod_wsgiナシでも動くの?と思った次第です。 とりあえずmod_wsgi必須なのはわかったのでたすかりました。
miyahan

2017/08/28 02:56

通常、パッケージマネージャ(yum, apt-get)で mod_wsgi をインストールすれば自動で LoadModule の設定が追加されるため、ほとんどのサイトでは同設定に触れていないのだと思います。 原因としては ・自動追加された LoadModule の設定より先に Flask 関連の設定を書いてしまっている(Apache設定ファイルがいくつもあるため、ロード順を意識して設定しなければなりません) ・Ubuntu を使っている場合:モジュールの有効化コマンド(sudo a2enmod mod-wsgi )をし忘れている ・特殊な方法で mod_wsgi をインストールした などが考えられます。 まあ今動いているのであればそのまま使うのも良いと思います。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問