☆☆ 新着記事 ☆☆

2018年12月25日火曜日

これで動く (1/3) !! WebArena VPS(CentOS7)でFlaskを動かす


安さに目が眩んでNTT PC の「WebArena VPS クラウド」で、Flaskを動かしてみました。
CentOS 7 + Python 3.6 + Apache2.4 +mod_wsgi +  Flaskです。 オーソドックスな環境です。

今回は、
1.Apache Install
2. SELinux 無効化
3. Firewallの設定
4. httpsの設定
5. Python3.6 とpip のインストール


1.  Apacheをインストールする。

[root@ofcm9och /]# yum list available | grep httpd
httpd.x86_64                              2.4.6-88.el7.centos            base
httpd-devel.x86_64                        2.4.6-88.el7.centos            base
httpd-manual.noarch                       2.4.6-88.el7.centos            base
httpd-tools.x86_64                        2.4.6-88.el7.centos            base
keycloak-httpd-client-install.noarch      0.6-3.el7                      base
libmicrohttpd.i686                        0.9.33-2.el7                   base
libmicrohttpd.x86_64                      0.9.33-2.el7                   base
libmicrohttpd-devel.i686                  0.9.33-2.el7                   base
libmicrohttpd-devel.x86_64                0.9.33-2.el7                   base
libmicrohttpd-doc.noarch                  0.9.33-2.el7                   base
python2-keycloak-httpd-client-install.noarch

1) httpdのインストール
# yum -y install httpd httpd-tools httpd-devel httpd-manual
Complete!

2)確認
[root@ /]# yum list installed | grep httpd

[root@ofcm9och /]# yum list installed | grep httpd
httpd.x86_64                       2.4.6-88.el7.centos            @base
httpd-devel.x86_64                 2.4.6-88.el7.centos            @base
httpd-manual.noarch                2.4.6-88.el7.centos            @base
httpd-tools.x86_64                 2.4.6-88.el7.centos            @base


3)  起動する。
# systemctl start httpd


4) 起動の状態を確認する。
$ systemctl status httpd

httpd.service - The Apache HTTP Server
   Loaded: loaded (/usr/lib/systemd/system/httpd.service; disabled; vendor preset: disabled)
   Active: active (running) since Mon 2018-12-24 23:32:33 JST; 23s ago
     Docs: man:httpd(8)
           man:apachectl(8)
 Main PID: 1338 (httpd)
   Status: "Total requests: 0; Current requests/sec: 0; Current traffic:   0 B/sec"
   CGroup: /system.slice/httpd.service
           tq1338 /usr/sbin/httpd -DFOREGROUND
           tq1339 /usr/sbin/httpd -DFOREGROUND
           tq1340 /usr/sbin/httpd -DFOREGROUND
           tq1341 /usr/sbin/httpd -DFOREGROUND
           tq1342 /usr/sbin/httpd -DFOREGROUND
           mq1343 /usr/sbin/httpd -DFOREGROUND

Dec 24 23:32:33 ofcm9och systemd[1]: Starting The Apache HTTP Server...
Dec 24 23:32:33 ofcm9och httpd[1338]: AH00557: httpd: apr_sockaddr_info_get...ch
Dec 24 23:32:33 ofcm9och httpd[1338]: AH00558: httpd: Could not reliably de...ge
Dec 24 23:32:33 ofcm9och systemd[1]: Started The Apache HTTP Server.
Hint: Some lines were ellipsized, use -l to show in full.


5) httpd自動起動の設定
$ systemctl enable httpd
(確認)
systemctl list-unit-files | grep httpd
httpd.service                                 enabled


2. SELinuxの無効化

1) 現状の確認
[root@ /]# sestatus
SELinux status:                 enabled


2)Configファイルのコピーを保存。(??)
[root@ /]# cp -piv /etc/selinux/config /etc/selinux/config.`date "+%Y%m%d_%H%M%S
"`
‘/etc/selinux/config’ -> ‘/etc/selinux/config.20181223’



3) Configファイルの修正
[root@ /]# cd  /etc/selinux/
[root@ selinux]# vi config

#SELINUX=enforcing
SELINUX=disabled


4) OSの再起動
shutdown -r now


5)再確認
[root@ /]#  sestatus
SELinux status:                 disabled
 


6httpd自動起動の設定

[root@ /]# systemctl enable httpd
[root@ /]# systemctl list-unit-files | grep httpd

httpd.service                                 enabled

3. Firewallを設定する。

1) ファイアウォールが起動中かどうかを確認

# firewall-cmd --state
running

2) ファイアウォール設定を確認
# firewall-cmd --list-all

public (active)
  target: default
  icmp-block-inversion: no
  interfaces: eth0
  sources:
  services: ssh dhcpv6-client
  ports:
  protocols:
  masquerade: no
  forward-ports:
  source-ports:
  icmp-blocks:
  rich rules:

3) http/httpsのサービス追加
[root@ ~]# firewall-cmd --zone=public --add-service=http --permanent
success
[root@ ~]# firewall-cmd --zone=public --add-service=https --permanent
success
[root@ ~]# firewall-cmd --list-all <- ここでやっても変化なし。 リロード要。
[root@ /]# firewall-cmd --reload
success
# firewall-cmd --list-all
 public (active)
  target: default
  icmp-block-inversion: no
  interfaces: eth0
  sources:
  services: ssh dhcpv6-client http https
  ports:       <- 後日、ポート番号を指定して解放する。
  protocols:
  masquerade: no
  forward-ports:
  source-ports:
  icmp-blocks:
  rich rules:


4. https通信に関する設定する。

1) mod_sslがインストールされているかの確認。
 (Loaded Modulesの確認): # httpd -M
  又は
 (Installed Packagesの確認): #yum list installed | grep mod_ssl

 この段階では、両方とも、何も検知しない。

2) mod_sslのインストール
[root@ /]# yum install mod_ssl
Complete!

3)再起動で変更を反映します。
 # systemctl restart httpd

4) (Loaded Modulesの確認): # httpd -M   
 ssl_module (shared)

ブラウザで表示できることの確認、
OK

5. Python3.6 とpip のインストール

CentOSで必要なパッケージをインストールします。

# yum groupinstall "development tools"
Complete!
#yum install zlib-devel bzip2-devel openssl-devel ncurses-devel sqlite-devel readline-devel tk-devel
Complete!
#yum install httpd-devel python-devel
Package httpd-devel-2.4.6-88.el7.centos.x86_64 already installed and latest version
Package python-devel-2.7.5-76.el7.x86_64 already installed and latest version
Nothing to do

Group Listの "Development Tools"のインストール方法が変わりました。
# yum --setopt=group_package_types=mandatory,default,optional groupinstall "Development Tools"
 など。

詳細:  * Development tool for CentOS / RHEL 7

Pythonをソースからインストールする。

# cd /usr/local/src  このディレクトリに入れて管理することはとても大事。

[root@ofcm9och src]# yum -y install wget
[root@ofcm9och src]#wget https://www.python.org/ftp/python/3.6.8/Python-3.6.8.tgz

[root@ofcm9och src]# ls -a
.  ..  Python-3.6.8.tgz


[root@ofcm9och src]# tar zxvf Python-3.6.8.tgz
[root@ofcm9och src]# cd Python-3.6.8
[root@ofcm9och Python-3.6.8]# ./configure --enable-shared
[root@ofcm9och Python-3.6.8]# ./configure --enable-optimizations <- Note1)
[root@ofcm9och Python-3.6.8]# make && make altinstall
zipimport.ZipImportError: can't decompress data; zlib not available
make: *** [altinstall] Error 1


**Note 1) added on Jan.2019
何度か、ソースコードからpythonをビルドした時に気が付いたのだが、./configure --enable-shared を実行すると、「効率的なシステム構築の為に、 ./configure --enable-optimizations を実行することを合わせて考えてください。」というメッセージが出るので、実行していたが、このコマンドを実行すると、シェアド・ライブラリ用のファイル libpython3.7m.so が作成されないようだ。 wsgiは、shared library を使うことを強く推奨しているので、 ./configure --enable-optimizations は実行してはいけない。




[root@ofcm9och Python-3.6.8]# yum list available | grep zlib-devel
zlib-devel.i686                           1.2.7-18.el7                   base
zlib-devel.x86_64                     1.2.7-18.el7                   base

[root@ofcm9och Python-3.6.8]# yum list installed | grep zlib-devel
入らなかった?

[root@ofcm9och Python-3.6.8]# yum install zlib-devel
Complete!
[root@ofcm9och Python-3.6.8]# make && make altinstall
Collecting setuptools
Collecting pip
Installing collected packages: setuptools, pip
Successfully installed pip-18.1 setuptools-40.6.2
↑ This comment will come up when Python 3.6 is installed successfully.

次に、シンボリックリンクを作成する。

シンボリック・リンクとは
ln -s」で、ファイルの“シンボリックリンク”を作成できます。シンボリックリンクは、いわばファイルの“別名”で、長いファイル名に別の名前を付けたり、パス名の指定が分かりにくい場所にあるファイルを扱いやすくしたりする(例:ディレクトリへのシンボリックリンク)場合に使います。

ln -s ファイル名 リンク名
(ファイルのシンボリックリンクを作成する)
以下の実行例では、ファイル「mylist02.txt」に対し、「latest」という名前のシンボリックリンクを作成しています。この場合、テキストエディタで「latest」というファイルを編集したり、閲覧したりすることは、「mylist02.txt」を編集したり、閲覧したりすることと同じ操作結果になります。

==【例】==
1.$ ls -l
2.合計 8
3.-rw-rw-r--. 1 study study 65 5月 15 00:00 mylist01.txt
4.-rw-rw-r--. 1 study study 127 5月 17 00:00 mylist02.txt
「mylist01.txt」というファイルと「mylist02.txt」というファイルがある

$ ln -s mylist02.txt latest
「ln -s」で「mylist02.txt」に「latest」という名前のシンボリックリンクを作成する
$ ls -l
2.合計 8
3.lrwxrwxrwx. 1 study study  12  5月 18 19:39 latest -> mylist02.txt
4.-rw-rw-r--. 1 study study  65  5月 15 00:00 mylist01.txt
5.-rw-rw-r--. 1 study study 127  5月 17 00:00 mylist02.txt 
==【例 おわり】==


この理解にもとづき、最初に現状の確認。

[root@ofcm9och /]# cd /usr/local/bin
[root@ofcm9och bin]# ls -a
.   2to3-3.6          idle3.6  pydoc3.6   python3.6m         pyvenv-3.6
..  easy_install-3.6  pip3.6   python3.6  python3.6m-config

[root@ofcm9och bin]# cd /
[root@ofcm9och /]# cd usr/bin
[root@ofcm9och bin]# ls -a
python
ab                     gtroff                    python2
aclocal                gunzip                python2.7
aclocal-1.13           gzexe              python2.7-config
acpi_listen            gzip                 python2-config
addr2line              h2ph                python-config <- python3は無い。


(Symbolic Linkの作成:python3.6(実在)にpython3というリンクを作る)

$ ln -s /usr/local/bin/python3.6 /usr/bin/python3

[root@ofcm9och bin]# ln -s /usr/local/bin/python3.6 /usr/bin/python3
[root@ofcm9och bin]# ls -a
.                        gsoelim               pwmake
..                       gstack                  pwscore
[                        gtar                      pydoc
a2p                    gtbl                     python
ab                      gtroff                  python2
aclocal              gunzip                 python2.7
aclocal-1.13      gzexe                  python2.7-config
acpi_listen        gzip                     python2-config
addr2line           h2ph                   python3  <- 出来た。

=============================================
 
この段階で、python3.7 とコマンドをうっても、起動できません。
以下のようなエラーになります。
[ ~]# python3.6
python3.7: error while loading shared libraries: libpython3.6m.so.1.0: cannot open shared object file: No such file or directory


[root@ofcm9och bin]# cd /
[root@ofcm9och /]# cd /usr/local/lib
[root@ofcm9och lib]# ls -a
.   libpython3.6m.so      libpython3.so  python3.6
..  libpython3.6m.so.1.0  pkgconfig
[root@ofcm9och /]# find -name lib64
./usr/lib/debug/usr/lib64
./usr/lib/debug/lib64
./usr/lib64
./usr/share/gdb/auto-load/usr/lib64
./usr/share/gdb/auto-load/lib64
./usr/local/lib64
./usr/src/kernels/3.10.0-957.1.3.el7.x86_64.debug/arch/sh/lib64
./lib64


$ ln -s /usr/local/lib/libpython3.6m.so.1.0 /lib64/


[root@ofcm9och /]# ln -s /usr/local/lib/libpython3.6m.so.1.0 /lib64/
[root@ofcm9och /]# find -name libpython3.6m.so.1.0
./usr/lib64/libpython3.6m.so.1.0
./usr/local/lib/libpython3.6m.so.1.0
./usr/local/src/Python-3.6.8/libpython3.6m.so.1.0

[root@ofcm9och /]# python3.6 --version # 最後にバージョンの確認ができればpythonのインストール完了
Python 3.6.8

[root@ofcm9och /]# which python <- pythonだけだとデフォルト
/usr/bin/python
[root@ofcm9och /]# python -V
Python 2.7.5



これで、python3.6 というコマンドで起動できるようになりました。

[ /]# python3.6
Python 3.6.2 (default, Jan 15 2019, 21:24:34)
[GCC 4.8.5 20150623 (Red Hat 4.8.5-36)] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>>

=============================================


# 同時にpip3.6もインストールされるので、シンボリックリンクを貼る
[root@ofcm9och /]# python -m pip -V
/usr/bin/python: No module named pip


[root@ofcm9och /]# cd /usr/local/bin
[root@ofcm9och bin]# ls -a
.   2to3-3.6          idle3.6  pydoc3.6   python3.6m         pyvenv-3.6
..  easy_install-3.6  pip3.6   python3.6  python3.6m-config


[root@ofcm9och bin]# cd /
[root@ofcm9och /]# cd usr/bin
[root@ofcm9och bin]# ls -a   <- pipは存在しない。

git                                  pic                      which
git-receive-pack            piconv                 whiptail
git-shell                         pinentry               who
git-upload-archive         pinentry-curses    whoami
git-upload-pack             ping                      write
glib-compile-schemas   ping6                     x86_64
gmake                           pinky                     x86_64-redhat-linux-c++



$ ln -s /usr/local/bin/pip3.6 /usr/bin/pip3.6


[root@ofcm9och bin]# ln -s /usr/local/bin/pip3.6 /usr/bin/pip3.6
[root@ofcm9och bin]# ls -a  (symlinkが作成された)

glib-compile-schemas   pinky                     x86_64-redhat-linux-c++
gmake                  pip3.6                    x86_64-redhat-linux-g++


[root@ofcm9och bin]# python -m pip -V
/usr/bin/python: No module named pip
[root@ofcm9och bin]# python3 -m pip -V
pip 18.1 from /usr/local/lib/python3.6/site-packages/pip (python 3.6)


python3 に紐づいたpipのバージョンが18.1 と確認できたところで、
今回は終了です。

0 件のコメント:

コメントを投稿