RHEL7.5 上でPython3.6動かす
作業メモ。
anaconda使わないでmod_wsgi経由のDjango起動まで。
RHELはAWSにある既存のやつ(↓)から、インスタンスタイプは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化しないとね。