ngtokuの日記

主に雑記帳です。SNSではngtokuのID取れなかったんで、別のIDでやってます。

RHEL7.5 上でPython3.6動かす

作業メモ。
anaconda使わないでmod_wsgi経由のDjango起動まで。

RHELAWSにある既存のやつ(↓)から、インスタンスタイプはt2.microで。
RHEL-7.5_HVM_GA-20180322-x86_64-1-Hourly2-GP2 (ami-6871a115)

基本これベース
https://it-engineer-lab.com/archives/161

1.タイムゾーン変更

$ sudo timedatectl set-timezone Asia/Tokyo

2.Pythonインストール

以下より
https://www.unixarena.com/2018/05/how-to-install-python-3-on-redhat-enterprise-linux-7-x.html/

RHELなのにcentos7.iuscommunityだったのでちょっと確認したけどこれでいいらしい。
インストール後、ls したり echoしたりして確認。

$ sudo yum install https://dl.fedoraproject.org/pub/epel/epel-release-latest-$(rpm -E '%{rhel}').noarch.rpm
$ sudo yum install -y https://centos7.iuscommunity.org/ius-release.rpm
$ sudo yum install -y python36u python36u-pip
$ ls -ltr /usr/bin/python*
$ echo $PATH


python -V の結果がver2.7.5だったので再起動かログインし直して再確認、ちゃんとver3.6になってた。
シンボリックリンク変更してしまうとyumが動かなくなるので注意。

3.pipとDjangoインストール

当然ながら、ポート8080を解放しておかないとブラウザで確認できないぞ。

$ sudo /usr/local/bin/pip install --upgrade pip
$ sudo /usr/local/bin/pip install django
$ django-admin startproject mysite
$ cd mysite/
$ python manage.py runserver 0.0.0.0:8080


この状態でブラウザアクセスすると「ALLOWED_HOSTS直しなさい」って言われるので、
vi mysite/settings.py して ALLOWED_HOSTS を編集。
そのごrunserverしなおすと例のロケット画面表示。

4.Apacheとmod_wsgiインストール

Apacheのバージョンは2.4だった。

$ sudo yum install -y httpd httpd-devel
$ sudo systemctl enable httpd.service
$  sudo /sbin/service httpd start


以下エラーが出たので、develをインストール
src/server/wsgi_python.h:24:20: 致命的エラー: Python.h: そのようなファイルやディレクトリはありません

$ sudo yum install -y python36u-devel
$ sudo pip install mod_wsgi


以下でライブラリのフルパスを取得

$ sudo find / -name '*wsgi*.so'


依存関係確認。あったら対処。今回はなかったので作業なし。

$ ldd /usr/lib64/python3.6/site-packages/mod_wsgi/server/mod_wsgi-py36.cpython-36m-x86_64-linux-gnu.so


mod_wsgi設定

$ sudo vi /etc/httpd/conf.modules.d/mod_wsgi.conf


内容は以下。各自のプロジェクトのパスに応じて適宜書き替えてること。

LoadModule wsgi_module /usr/lib64/python3.6/site-packages/mod_wsgi/server/mod_wsgi-py36.cpython-36m-x86_64-linux-gnu.so


django設定

$ sudo vi /etc/httpd/conf.d/django.conf


内容は以下。WSGIPythonHomeは使わなかったのでコメント。ググった感じみんなvirtualenvつかってるが、今回は使用しない。
各自のプロジェクトのパスに応じて適宜書き替えること。

WSGIScriptAlias / /home/ec2-user/mysite/mysite/wsgi.py
#WSGIPythonHome /usr/lib64/python3.6/
WSGIPythonPath /home/ec2-user/mysite:/usr/lib64/python3.6/site-packages

<Directory /home/ec2-user/mysite/mysite>
<Files wsgi.py>
Require all granted
</Files>
</Directory>

# 以下がないとDjangoチュートリアルのcssファイルが参照できない。ていうか何もしないとhtmlタグつけられるのでcssとして機能しない
Alias /static/ /home/ec2-user/mysite/static/
<Directory /home/ec2-user/mysite/static>
Require all granted
</Directory>


/etc/httpd/conf.d/django.confの設定に合わせて、サンプルのスタイルシートをコピー。

$ cp -rp /usr/lib64/python3.6/site-packages/django/contrib/admin/static/ /home/ec2-user/mysite/


SELINUXをOFFにしないと ModuleNotFoundError: No module named 'encodings' とかpermission denied とかでる。

$ vi /etc/selinux/config


SELINUX=enforcing ⇨ SELINUX=disabled


Apache起動して、ポート80で確認。OK!
うまくいかなかったらerror_log確認。当然ながらポート80開けてないと見れないぞ。

$ sudo /sbin/service httpd restart
$ sudo less /var/log/httpd/error_log


本当に作業するならLet's Encrypt入れてHTTPS化しないとね。