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

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

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

CGI(Common Gateway Interface)とは、Webサーバー上でユーザプログラム動作させる仕組みのこと。また、動かす前提のプログラムをCGIと呼ぶこともあります。HTMLなどの静的な情報に限らず、プログラムの処理結果をベースにした動的情報の提供が可能です。

Flask

FlaskはPython用のマイクロフレームワークであり、Werkzeug・Jinja 2・good intentionsをベースにしています。

Apache

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

Python

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

Q&A

解決済

1回答

1430閲覧

apache(ubuntu)+cgiでflaskアプリを実行する方法

NERO06

総合スコア14

CGI

CGI(Common Gateway Interface)とは、Webサーバー上でユーザプログラム動作させる仕組みのこと。また、動かす前提のプログラムをCGIと呼ぶこともあります。HTMLなどの静的な情報に限らず、プログラムの処理結果をベースにした動的情報の提供が可能です。

Flask

FlaskはPython用のマイクロフレームワークであり、Werkzeug・Jinja 2・good intentionsをベースにしています。

Apache

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

Python

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

0グッド

0クリップ

投稿2018/12/11 07:17

こんにちは。
今、WEBサーバの勉強していますが、アプリケーションが上手く実行できなかったのでここで質問させて頂きました。

質問内容としては、下記諸環境下でapacheにflaskアプリケーションを設置し、ブラウザからアクセスしてもブラウザには下記のような表記しか出ないことです。

NOT FOUND The requested URL was not found on the server. If you entered the URL manually please check your spelling and try again.

最近の主流がHerokuなどであることは承知していますが、WEBサーバの動きやサーバプログラムを稼働させるためのインターフェイスの機能や動きを理解しようと考え、静的ファイルの表示から動的ファイル表示(CGI->FastCGI->mod_wsgi->WSGI)へという流れで勉強を進めようとしているところです。

下記に諸設定と私が推測する原因をまとめていますの解決方法(flaskを利用した簡易的なアプリケーションの実行とブラウザでの表示)をご教示頂ければと思います。

なお、ローカル環境を汚したくないのでdockerを利用し、また実際のセルフデプロイ、WEBサーバ構築を想定してubuntuからインストールする形をとっています(OSにubuntuを選んでいるのはLinux系のサーバOSのシェアが世界No.1なので、ubuntuやdebian系LinuxOSの使い方を知っておいて損はないだろうとの考えからです)。

(環境)

docker=18.0.9 ubuntu=18.04 apache=2.4.29(ubuntu)

(dockerの構築方法)

$ docker --name apache-test -it -p 2000:80 ubuntu:latest

(apacheの環境構築)

:/# apt install -y apache2 vim python3.6 python3-pip :/# pip3 install flask

(apache内の設定)
・mod_cgid有効化済み
・/etc/apache/conf-enabled/serve-cgi-bin.conf

apache

1<IfModule mod_alias.c> 2 <IfModule mod_cgi.c> 3 Define ENABLE_USR_LIB_CGI_BIN 4 </IfModule> 5 6 <IfModule mod_cgid.c> 7 Define ENABLE_USR_LIB_CGI_BIN 8 </IfModule> 9 10 <IfDefine ENABLE_USR_LIB_CGI_BIN> 11 ScriptAlias /cgi-bin/ /usr/lib/cgi-bin/index.cgi 12 <Directory "/usr/lib/cgi-bin"> 13 AllowOverride None 14 Options +ExecCGI -MultiViews +SymLinksIfOwnerMatch 15 Require all granted 16 AddHandler cgi-script .cgi .py 17 </Directory> 18 </IfDefine> 19</IfModule>

・/etc/apache2/apache2.conf -> SERVERNAMEを追加したのみ(hogehoge)

・/etc/apache2/sites-enabled/000-default.conf -> 初期設定のまま
※他の設定ファイルについては、特にいじっていません。またどういう動き、機能であるかを理解することに主眼を置いているので、細かい事務的なような設定は今回施していません。

(アプリケーション関連のスクリプト)
・/usr/lib/cgi-bin/index.cgi

python

1!/usr/bin/python3.6 2import os 3from wsgiref.handlers import CGIHandler 4from flaskr import app 5 6if __name__=="__main__": 7 os.environ['SERVER_NAME'] = 'hogehoge' 8 os.environ['SERVER_PORT'] = "80" 9 os.environ['REQUEST_METHOD'] = "GET" 10 CGIHandler().run(app)

※os.environ部分はpycharmでエラーが出たので手動しています

・/usr/lib/cgi-bin/flaskr.py

python

1#!/usr/bin/python3.6 2# -*- coding: utf-8 -*- 3import flask 4 5app = flask.Flask(__name__) 6 7@app.route('/') 8def index(): 9 return 'Hello World' 10 11if __name__=="__main__": 12 app.run(debug=True)

※画面に'Hello World'が単純に表示されるものです。

以上が環境です。pycharmで実行コードの結果などを見ても、apacheの諸設定よりもflaskrのappかまたはCGIHandlerの実行結果が空か何も返さないので、結果的に404 Not Foundになるのかなと考えています。
実際、flaskr.pyでわざとエラーを起こすと500 Internal Errorに変わります。

mod_rewriteや.htaccessはURLの表示や実際のファイルへの移動などを行うものだと認識しており、ScriptAliasの設定だけでアプリの実行自体には影響はないのではないかと思い、設置していません(実際にflask公式サイトを参考に設置してもうまくいきませんでした)。

上記のように推測してはいるのですが、理由が全くわからず、四苦八苦しています。

flaskやApacheの公式ドキュメントを主に参照していますが、適宜ググって出て来たサイトも参考にしています。

どうぞよろしくお願いします。

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

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

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

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

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

guest

回答1

0

自己解決

回答がつかないので、一旦解決したものとして、募集を終了します。

docker環境であることか、またはpathか何かの非明示的に取り込まれ、設定される部分が不適切なような気がしますが、おいおいまた色々と試して見たいと思います。

投稿2018/12/21 09:59

NERO06

総合スコア14

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問