くらげになりたい。

くらげのようにふわふわ生きたい日曜プログラマなブログ。趣味の備忘録です。

Amazon Linux2+Apache+virtualenv+python3+Djangoでアプリをデプロイ

Amazon Linux2がリリース版になってから、Djangoアプリをデプロイしたので、
その時の備忘録φ(..)メモメモ

特に、python3のインストールがつらかった。。

各種バージョンは以下の感じ

$ cat /etc/system-release
Amazon Linux 2

$ httpd -v
Server version: Apache/2.4.33 ()
Server built:   Jun 15 2018 20:38:53

$ python3 -V
Python 3.7.0rc1
$ pip3 -V
pip 9.0.3 from /usr/lib/python3.7/site-packages (python 3.7)

インストール

## enable python3 for Amazon Linux2
$ sudo amazon-linux-extras enable python3

## instal httpd and python3
$ sudo yum install -y httpd-devel python3-devel gcc gcc-c++

aws-extrasリポジトリに、python3.6.2があるが、python3-develがない。。
やむなくaws-coreのpython3.7.0.rc1のpython3-develをインストール。。

仮想環境(Virtualenv)の作成

### setup virtual env
$ cd /var/www/cgi-bin/sample_app/
$ sudo pip3 install virtualenv
$ virtualenv -p python3.7 virtualenv     # create virtual env
$ . virtualenv/sampleApp/bin/activate # activate

### setup libraries
$ pip3 install -r require/require.txt

Djangowsgi.pyの設定

それぞれのパスは以下の感じ。

  • Django Projectのパス:/var/www/cgi-bin/sample_app/
  • virtualenvのパス: /var/www/cgi-bin/sample_app/virtualenv/
  • Django Projectのwsgi.pyのパス:/var/www/cgi-bin/sample_app/wsgi.py
  • Django Projectのstaticディレクトリのパス:/var/www/cgi-bin/sample_app/sample_app/static/

各種パスに応じて、wsgi.pyを変更する

変更前
import os
from django.core.wsgi import get_wsgi_application

os.environ.setdefault("DJANGO_SETTINGS_MODULE", "sample_app.settings")
application = get_wsgi_application()
変更後
import os
import site
import sys

# ----------------------------------
# django projectのパス
PROJECT_ROOT = os.path.abspath(os.path.dirname(os.path.dirname(__file__)))

# virtualenvのパッケージパス
site.addsitedir(os.path.join(PROJECT_ROOT, 'virtualenv', 'lib', 'python3.7', 'site-packages'))
# django projectのパス
site.addsitedir(os.path.join(PROJECT_ROOT))
# ----------------------------------

os.environ.setdefault("DJANGO_SETTINGS_MODULE", "sample_app.settings")

from django.core.wsgi import get_wsgi_application
application = get_wsgi_application()

Apache(conf)

Apacheの設定として、Django用のconfファイルを作成する。 * /etc/httpd/conf.d/wsgi_django.conf

※ いろいろやったけどうまくいかないので、python自体とpip mod_wsgiは全体共通に。。

# install mod_wsgi using pip
$ sudo pip3 install mod_wsgi

# find mod_wsgi.so
$ find /usr/local/lib64/python3.7 -type f -name "mod_wsgi*.so"
 # => /usr/local/lib64/python3.7/site-packages/mod_wsgi/server/mod_wsgi-py37.cpython-37m-x86_64-linux-gnu.so

# create
$ sudo vim /etc/httpd/conf.d/wsgi_django.conf
# describe found .so path
LoadModule wsgi_module /usr/local/lib64/python3.7/site-packages/mod_wsgi/server/mod_wsgi-py37.cpython-37m-x86_64-linux-gnu.so

Alias /static /var/www/cgi-bin/sample_app/sample_app/static
<Directory /var/www/cgi-bin/sample_app/sample_app/static>
  Require all granted
</Directory>

WSGIScriptAlias / /var/www/cgi-bin/sample_app/sample_app/wsgi.py
<Directory /var/www/cgi-bin/cryptocurrency_web>
  Require all granted
</Directory>
# apache を再起動
$ sudo systemctl restart httpd

参考にしたサイト様