捨ててもいいCentOSでとにかく動かしたいとき。
python3はvirtualenvでインストールした方が良い。
(追記)
最後にDockerfileを書いた。この手順をDockerfileに書き直しただけ。出来上がるイメージは600MBとかになるので、重すぎると思う。
alpineで作り直したらまだ軽くなるか。flaskをプロダクション環境で動かす時のベストプラクティスが知りたい。
Versions
CentOS
CentOS Linux release 7.6.1810 (Core)
HTTPD
httpd-devel
もインストールする。
httpd-tools-2.4.6-90.el7.centos.x86_64
httpd-2.4.6-90.el7.centos.x86_64
httpd-devel-2.4.6-90.el7.centos.x86_64
PYTHON
yum install python3
で入れる
Python 3.6.8
ポイント
-
mod_wsgi
はyum
でインストールしない。- python27のものが入ってしまう。
-
pip3 install mod_wsgi
でインストールする - これをインストールするときに
gcc
が必要になる。
yum install httpd httpd-devel python3 python3-devel gcc -y
pip3 install mod_wsgi
- HTTPDのconf
-
LoadModule
で、上でインストールした物を指定する。これがApacheが動かすPythonのバージョンとなる。 -
python-path
はsite-packages
まで含めたPathを指定する - 親玉confに
Listen 8080
をちゃんと指定しておく
-
[root@ryo httpd]# cat /etc/httpd/conf.d/userdir.conf
<VirtualHost *:8080>
ServerName example.com
LoadModule wsgi_module /usr/local/lib64/python3.6/site-packages/mod_wsgi/server/mod_wsgi-py36.cpython-36m-x86_64-linux-gnu.so
WSGIDaemonProcess ml user=vagrant group=vagrant threads=5 python-path=/usr/local/lib64/python3.6/site-packages
WSGIScriptAlias / /opt/tryml/ryo/wsgi.wsgi
<Directory /opt/tryml/ryo/>
WSGIProcessGroup ml
Order deny,allow
Allow from all
Require all granted
</Directory>
</VirtualHost>
- wsgiのファイルを作る
import sys, os
sys.path.insert(0, os.path.dirname(__file__))
from sebserver import app as application
参考
Dockerfile
FROM centos:7
COPY ["*.py", "wsgi.wsgi", "requirements.txt", "/var/www/html/"]
RUN yum install httpd httpd-devel python3 python3-devel gcc -y; pip3 install -r /var/www/html/requirements.txt; mkdir /var/www/html/static; chown apache:apache /var/www/html/*
COPY templates/sample.html /var/www/html/templates/
COPY docker/py.conf /etc/httpd/conf.d/
COPY docker/httpd.conf /etc/httpd/conf/
CMD ["/usr/sbin/httpd", "-DFOREGROUND"]