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

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

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

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

Python 3.x

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

Q&A

1回答

2725閲覧

python3.6でapache2とmod_wsgiの環境を作りたいのですが、うまく行きません。

UekiKouji

総合スコア121

Apache

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

Python 3.x

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

0グッド

0クリップ

投稿2017/08/15 06:16

以前も同じような質問をしました。しかし今回は、別の異なる事で悩んでいます。ご教授をお願いします。
python3を以下のように構築し、venv環境を/home/ubuntu/envで構築しました。サーバはubuntu16です。

sudo apt-get -y install build-essential libsqlite3-dev libreadline6-dev libgdbm-dev zlib1g-dev libbz2-dev sqlite3 tk-dev zip libssl-dev gfortran liblapack-dev リスト 1.2 Python 3.6.1のソースからのインストール $ wget https://www.python.org/ftp/python/3.6.1/Python-3.6.1.tgz $ tar axvf ./Python-3.6.1.tgz $ cd ./Python-3.6.1/ $ LDFLAGS="-L/usr/lib/x86_64-linux-gnu" ./configure --with-ensurepip $ make $ sudo make install リスト 1.3 Pythonのバージョン確認 $ hash -r $ python3 -V Python 3.6.1 /usr/local/bin/python3 -m venv env source env/bin/activate

その後、こちらのサイトを参考に以下の設定を行いました。

http://qiita.com/makky05/items/98b86ca36776a524dfc9

sudo apt-get install apache2 sudo apt-get install libapache2-mod-wsgi-py3

// /home/hoge/hello.py

import sys def application(environ, start_response): status = '200 OK' output = b'Hello World! python version : ' + sys.version.encode("utf-8") response_headers = [('Content-type', 'text/plain'), ('Content-Length', str(len(output)))] start_response(status, response_headers) return [output]

// /etc/apache2/sites-available/python.conf

LoadModule wsgi_module modules/mod_wsgi.so WSGIScriptAlias / /home/ubuntu/hello.py WSGIPythonPath /home/ubuntu/./env/lib/python3.6/site-packages <Directory /home/ubuntu> Require all granted </Directory>
$ sudo a2ensite python.conf $ sudo service apache2 start

そして、上記の作業を行いました。サイトにアクセスすると、以下の結果になりました。
// http://192.168.33.11にアクセス
イメージ説明

どうも、libapache2-mod-wsgi-py3はubuntuデフォルトでインストールされているpython3.5.2に反応しているようです。

なので、mod_wsgiをソースからインストールしました。

cd $ wget https://github.com/GrahamDumpleton/mod_wsgi/archive/4.4.13.tar.gz $ tar zxvf 4.5.17.tar.gz $ mv mod_wsgi-4.5.17 /usr/local/src $ cd /usr/local/src/mod_wsgi-4.5.15 $./configure LDFLAGS='-Wl,-rpath=/home/kou/./env/lib' $ make $ sudo make install

ソースから、mod_wsgiをインストールしましたが、設定は、変更していません。
しかし、apache2を再起動しましたが、エラーになりうまく起動しませんでした。

ここから、質問です。
ソースからインストールしたpython3.6に対応したmod_wsgiのインストール方法を教えてください。
お願いします。
ちなみに、pipでインストールすると以下のようなエラーになりうまく行きません。

ubuntu@ubuntu-xenial:~$ pip install mod_wsgi Collecting mod_wsgi Using cached mod_wsgi-4.5.17.tar.gz Complete output from command python setup.py egg_info: Traceback (most recent call last): File "<string>", line 1, in <module> File "/tmp/pip-build-rf_k0m_2/mod-wsgi/setup.py", line 164, in <module> 'missing Apache httpd server packages.' % APXS) RuntimeError: The 'apxs' command appears not to be installed or is not executable. Please check the list of prerequisites in the documentation for this package and install any missing Apache httpd server packages. Error in sys.excepthook: Traceback (most recent call last): File "/usr/lib/python3/dist-packages/apport_python_hook.py", line 63, in apport_excepthook from apport.fileutils import likely_packaged, get_recent_crashes File "/usr/lib/python3/dist-packages/apport/__init__.py", line 5, in <module> from apport.report import Report File "/usr/lib/python3/dist-packages/apport/report.py", line 30, in <module> import apport.fileutils File "/usr/lib/python3/dist-packages/apport/fileutils.py", line 23, in <module> from apport.packaging_impl import impl as packaging File "/usr/lib/python3/dist-packages/apport/packaging_impl.py", line 23, in <module> import apt File "/usr/lib/python3/dist-packages/apt/__init__.py", line 23, in <module> import apt_pkg ModuleNotFoundError: No module named 'apt_pkg' Original exception was: Traceback (most recent call last): File "<string>", line 1, in <module> File "/tmp/pip-build-rf_k0m_2/mod-wsgi/setup.py", line 164, in <module> 'missing Apache httpd server packages.' % APXS) RuntimeError: The 'apxs' command appears not to be installed or is not executable. Please check the list of prerequisites in the documentation for this package and install any missing Apache httpd server packages. ---------------------------------------- Command "python setup.py egg_info" failed with error code 1 in /tmp/pip-build-rf_k0m_2/mod-wsgi/

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

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

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

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

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

guest

回答1

0

直接的な回答にはなりませんが、もしPythonのバージョンを切り替えて使用したいなら、
mod_wsgiではなく mod_proxy_uwsgi の使用してはどうでしょうか。
この場合あらかじめ起動したuwsgiプロセス(サーバ)に対して、
Apacheで特定のURLをリバースプロキシやロードバランサーとしてマップする形になります。
http://uwsgi-docs.readthedocs.io/en/latest/WSGIquickstart.html#installing-uwsgi-with-python-support

python uwsgiconfig.py でビルド時に異なるバージョンを作成しそれぞれ起動すれば、呼び出すURLによって異なるバージョンのpythonを使用するなどもできますし、環境変数をコマンドライン上で変更した状態を引き継がせられるため、限られたサーバ台数で異なる環境を走らせる際には使いやすいと思います。

投稿2017/08/15 06:49

編集2017/08/15 07:08
TakeoSaki

総合スコア97

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

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

UekiKouji

2017/08/15 07:18

ざっくりとapacheとの連動について調べてみたのですが、どのように設定したら良いのか。想像がつきません。本当にしょうもない質問で、申し訳ないと思っています。どのように連携したら良いのでしょうか。よろしくお願いします。
TakeoSaki

2017/08/15 15:21 編集

最初に、Apacheが80番ポートを使ってユーザのブラウザからの接続を待ちうけ(Listen)して、 もし接続があればhttpという規格でブラウザとやり取りするというのはご存知かと思います。 uWSGIはこれと同様に、適当な番号のポートで待ち受け、ブラウザではなくApacheやnginxなどのWebサーバからの接続を待機します。 Apacheと同一のマシン上で実行する場合は、ポートではなくunixドメインソケットを使います。 (ソケットファイルを安全な場所に保管することで関係ない接続を避けられます) 設定としては、まずuwsgi側をどう待ち受けさせるかを決め、それに沿って起動させておき、あとはApache側でそこへ接続するように設定します。 uwsgi のインストール。 ```sh $ python3.6 -m pip install uwsgi ``` 起動 (起動オプションは設定ファイルを書いても良いです。) ```sh $ cd /path/to/myproject $ mkdir tmp/ $ PYTHON=python3.6 uwsgi -s /tmp/uwsgi.sock \ --wsgi-file mywebapp.py \ --chmod-socket=666 --daemonize tmp/uwsgi.log \ --touch-logrotate tmp/logrotate.trigger ``` mod_proxy_uwsgi インストール ```sh $ mkdir mod_proxy_uwsgi $ cd mod_proxy_uwsgi $ wget https://raw.githubusercontent.com/unbit/uwsgi/master/apache2/mod_proxy_uwsgi.c $ apxs -i -c mod_proxy_uwsgi.c ``` apacheの設定 ```apache LoadModule proxy_uwsgi_module modules/mod_proxy_uwsgi.so # ... # 全てのリクエストをuwsgiに振る場合 ProxyPass / "unix:/tmp/uwsgi.sock|uwsgi://uwsgi-app-name/" # 一部のリクエストのみを振るような場合 <Proxy "balancer://mybalancer"> BalancerMember "unix:/tmp/uwsgi.sock|uwsgi://uwsgi-app-name/" </Proxy> <VirtualHost your-host-name:80> DocumentRoot /path/to/my/web/root/ RewriteEngine on # 条件を絞る。ここではURLパス部と同名ファイルが存在しない時に限定。 # 画像ファイルや.cssへのアクセスはapache側で処理する RewriteCond %{DOCUMENT_ROOT}%{REQUEST_FILENAME} !-f RewriteRule ^/(.*)$ balancer://mybalancer/$1 [P,QSA,L] </VirtualHost> ``` pythonで同様のサーバ構成としてはuWsgiの他にGunicornというのも使えるようです。 他言語でもJavaならajpのプロトコルを使ってtomcatを動かしたり、 phpならfastcgi(fpm)を動かしたりなど、同じような構成のWebアプリケーションは多数あり、構成自体は結構良くあるパターンだと思います。
UekiKouji

2017/08/15 15:46

ありがとうございます。やってみます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問