☆☆ 新着記事 ☆☆

2018年12月7日金曜日

さくら VPS CentOS7 に flask をインストールしてみる (3)

さくらのvpsにflaskを入れて動かすのに、予想をはるかに超えて苦労している初心者。

公式サイトのガイドから、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 件のコメント:

コメントを投稿