公式サイトのガイドから、apacheサーバーの上でflaskを動かすには、mod_wsgiが必要なことが分かった。(過去の経緯に興味がある方は、連続してポストしてるので、前回、前々回のポストをみてください。)
ネット検索をしても自分に何が必要なのか、よくわかりませんね。 特に、古いバージョンのインストール手順とかも、検索結果に沢山、表示されますから。
最新の公式サイトで、やろうとしている事を 'しっかり目次から' 確認するのは、本当に大事だと痛感。
では、再開です。
(現状です。)
projectフォルダ 「flaskpj」 を作成して、venvで仮想環境を作って、flaskのアプリケーション・ファイル 「index.py」をアップロードしています。
[root@localhost flaskpj]# ls -l
total 4
drwxr-xr-x 2 apache vpsuser 33 Dec 7 00:45 __pycache__
-rw-rw-r-- 1 apache vpsuser 221 Dec 6 00:12 index.py
drwxrwxr-x 6 apache vpsuser 104 Dec 7 09:39 venv
参考:https://modwsgi.readthedocs.io/en/develop/user-guides/quick-installation-guide.html
では、スタート。
Step1 前提となるapache2-dev のインストール
1) Apacheのバージョン確認
[root@localhost flaskpj]# httpd -v
Server version: Apache/2.4.6 (CentOS)
*Apache 2.0, 2.2 or 2.4 can be used.なので対象ですね。
2. Dev関連のパッケージがインストールされいるか確認
On Linux systems, if Apache has been installed from a package repository, you must have installed the corresponding Apache “dev” package as well.
For most Linux distributions, the “dev” package for Apache 2.X is “apache2-dev” where the corresponding Apache package was “apache2”
と書いてある。
一応、確認してみる。
[root@localhost /]# rpm -qa | grep apache
python2-certbot-apache-0.27.1-1.el7.noarch
[root@localhost /]# rpm -qa | grep apache2-dev <-No response
[root@localhost /]# yum list installed
沢山のリストが表示されたが該当なし。
なので、インストール作業を開始する。
2). 実際にインストール
apache2-dev のインストール
venv環境下で以下のコマンド実行。
(venv) [root@localhost venv]# yum install apache2-dev
No package apache2-dev available.
Error: Nothing to do
ふむ。
色々調べると、apache2-devとhttpd-develとは同じもののように思えるので実行してみる。
(venv) [root@localhost venv]# yum install httpd-devel
Dependencies Resolved
==========================================================================================================================
Package Arch Version Repository Size
==========================================================================================================================
Installing:
httpd-devel x86_64 2.4.6-88.el7.centos base 196 k
Installing for dependencies:
apr-devel x86_64 1.4.8-3.el7_4.1 base 188 k
apr-util-devel x86_64 1.5.2-6.el7 base 76 k
cyrus-sasl x86_64 2.1.26-23.el7 base 88 k
cyrus-sasl-devel x86_64 2.1.26-23.el7 base 310 k
expat-devel x86_64 2.1.0-10.el7_3 base 57 k
libdb-devel x86_64 5.3.21-24.el7 base 38 k
openldap-devel x86_64 2.4.44-20.el7 base 804 k
Updating for dependencies:
httpd x86_64 2.4.6-88.el7.centos base 2.7 M
httpd-tools x86_64 2.4.6-88.el7.centos base 90 k
mod_ssl x86_64 1:2.4.6-88.el7.centos base 112 k
openldap x86_64 2.4.44-20.el7 base 355 k
Transaction Summary
==========================================================================================================================
Install 1 Package (+7 Dependent packages)
Upgrade ( 4 Dependent packages)
Yesで
Installed:
httpd-devel.x86_64 0:2.4.6-88.el7.centos
Dependency Installed:
apr-devel.x86_64 0:1.4.8-3.el7_4.1 apr-util-devel.x86_64 0:1.5.2-6.el7 cyrus-sasl.x86_64 0:2.1.26-23.el7
cyrus-sasl-devel.x86_64 0:2.1.26-23.el7 expat-devel.x86_64 0:2.1.0-10.el7_3 libdb-devel.x86_64 0:5.3.21-24.el7
openldap-devel.x86_64 0:2.4.44-20.el7
Dependency Updated:
httpd.x86_64 0:2.4.6-88.el7.centos httpd-tools.x86_64 0:2.4.6-88.el7.centos mod_ssl.x86_64 1:2.4.6-88.el7.centos
openldap.x86_64 0:2.4.44-20.el7
ということでインストールできた。
Step2 mod-wsgiのインストール。
公式のドキュメントだと、githubからダウンロードすることになっているので、
まずは、wget コマンドを使えるようにインストール。
(venv) [root@localhost venv]# yum install wget
そして、
wget https://github.com/GrahamDumpleton/mod_wsgi/archive/4.6.5.tar.gz
で、ダウンロードできそうだったので、実行しようと思ったが、pip でもいけそなので、
pip で試す。
(venv) [root@localhost venv]# pip install mod_wsgi
Command "/var/www/html/flaskpj/venv/bin/python3.7 -u -c "import setuptools, tokenize;__file__='/tmp/pip-install-coke7fu9/m od-wsgi/setup.py';f=getattr(tokenize, 'open', open)(__file__);code=f.read().replace('\r\n', '\n');f.close();exec(compile(c ode, __file__, 'exec'))" install --record /tmp/pip-record-_qvfb2pl/install-record.txt --single-version-externally-managed --compile --install-headers /var/www/html/flaskpj/venv/include/site/python3.7/mod-wsgi" failed with error code 1 in /tmp/pip-install-coke7fu9/mod-wsgi/
というメッセ-ジでエラー。
では、
(venv) [root@localhost venv]# wget https://github.com/GrahamDumpleton/mod_wsgi/archive/4.6.5.tar.gz
2018-12-07 16:45:29 (512 KB/s) - '4.6.5.tar.gz' saved [693825]
取得できました。
STEP3. Unpacking The Source Code
tar xvfz mod_wsgi-X.Y.tar.gz
Replace ‘X.Y’ with the actual version number for that being used.
なので
tar xvfz mod_wsgi-4.6.5.tar.gz
で実行すると失敗。
ところが、
tar xvfz 4.6.5.tar.gz で成功。
(venv) [root@localhost venv]# tar xvfz 4.6.5.tar.gz
これは、指示が明らかに間違ってるなー。
追記)
(venv) [root@localhost venv]# ls -a
. .. 4.6.5.tar.gz app bin include lib lib64 mod_wsgi-4.6.5 pip-selfcheck.json pyvenv.cfg
とすれば、gzipされているのが4.6.5という名前だということがもっと早く分かったのに。。。
これは解凍後。
STEP 4.Configuring The Source Code
To setup the package ready for building run the “configure” script from within the source code directory:
./configure
The configure script will attempt to identify the Apache installation to use by searching in various standard locations for the Apache build tools included with your distribution called “apxs2” or “apxs”. If not found in any of these standard locations, your PATH will be searched.
Which Python installation to use will be determined by looking for the “python” executable in your PATH.
On some Linux distributions, such as SUSE and CentOS, it will be necessary to use the
--with-apxs
option and specify either “/usr/sbin/apxs2-worker” or “/usr/sbin/apxs2-prefork”. https://qiita.com/yoshizaki_kkgk/items/3cd785b4a670deec0685
https://www.yoheim.net/blog.php?q=20170206
(venv) [root@localhost venv]# cd mod_wsgi-4.6.5
(venv) [root@localhost mod_wsgi-4.6.5]# ls -a
. .gitignore CREDITS.rst MANIFEST.in Makefile.in config.log configure docs setup.py tests win32
.. .mailmap LICENSE Makefile README.rst config.status configure.ac images src tox.ini
という状況で、以下を実行。
(venv) [root@localhost mod_wsgi-4.6.5]# ./configure --with-apxs=/usr/bin/apxs --with-python=/var/www/html/flaskpj/venv/bin/python
checking for gcc... gcc
checking whether the C compiler works... yes
checking for C compiler default output file name... a.out
checking for suffix of executables...
checking whether we are cross compiling... no
checking for suffix of object files... o
checking whether we are using the GNU C compiler... yes
checking whether gcc accepts -g... yes
checking for gcc option to accept ISO C89... none needed
checking for prctl... yes
checking Apache version... 2.4.6
configure: creating ./config.status
config.status: creating Makefile
(venv) [root@localhost mod_wsgi-4.6.5]#
お、上手くいったみたいだ。
それぞれのapxsとPythonのパスの指定の根拠は以下の通り。
*** 考え方
(元ネタ)
./configure --with-apxs=/usr/sbin/apxs --with-python=/usr/local/bin/python3
をそのまま実行してもダメだから。
(venv) [vpsuser@localhost venv]$ which httpd
/usr/sbin/httpd
[root@localhost /]# find -name apxs -type f
./usr/bin/apxs
(venv) [vpsuser@localhost vepxsnv]$ which python
/var/www/html/flaskpj/venv/bin/python
なので、apache(httpd)は、venv環境からも/usr/sbinを見にいくので、
apache関連のapxsも、venv環境外でも良いかも知れない?
Pythonのパスはありのまま
./configure --with-apxs=/usr/bin/apxs --with-python=/var/www/html/flaskpj/venv/bin/python
でやってみる。
難しい。
次に、
(venv) [root@localhost mod_wsgi-4.6.5]# make
エラー : /usr/local/lib/libpython3.7........XXX can not be used when making a shared object;
Lack Of Python Shared Library
という問題でしょう。調べたら、python3.6は、venvの外にありますね。 これは
最初からやった方がよさそう。
0 件のコメント:
コメントを投稿