安さに目が眩んで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
6)httpd自動起動の設定
[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
# 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]# 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
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.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 件のコメント:
コメントを投稿