SIGMA-SE Tech Blog

SIGMA-SE Tech Blog

VPSで作るDjangoサイト構築手順 - Apache編 : 3/4 Django環境とサーバー設定のセットアップ

目的

この記事では、以下のVPS環境でDjangoサイトを構築するために必要な「Django環境とサーバー設定のセットアップ手順」について説明する。

  • OS:CentOS 7,4
  • 言語:Python
  • WEBサーバー:Apache
  • FW:Django
  • DB:PostgresSQL
  • ドメイン:example.com

実施内容

CentOSにパッケージリポジトリを導入

  • 開発パッケージのインストール
    EPELリポジトリを有効化する。
    ※ EPELはCentOSやRHELにない便利なパッケージを提供する外部リポジトリ。

    $ yum -y install epel-release
    
  • IUSリポジトリの追加
    Pythonの最新アップストリームバージョンを提供するリポジトリ。
    IUSリポジトリ経由 でPythonの最新バージョンをインストールできるようにする。

    $ yum -y install https://centos7.iuscommunity.org/ius-release.rpm
    

Pythonインストール

  • Python3.6のインストール
    python36upython36u-develをインストールする。

    $ yum -y install python36u
    $ yum -y install python36u-pip python36u-devel
    
  • バージョン確認

    $ python3.6 -V
    Python 3.6.4
    

Djangoインストール

  • venvで仮想環境を構築
    Pythonの仮想環境を作成するパッケージは、他にもvirtualenvanacondapyenvpyenv-virtualenvなど多数あるが、ここでは、Python3から標準搭載されているvenvを使用する。

    vopsは、仮想環境が入るディレクトリ名なので各自の環境に合わせること。

    $ python3.6 -m venv /var/www/vops
    
  • 仮想環境上にDjangoをインストール
    pipDjangoをインストールする。

    $ source /var/www/vops/bin/activate # 仮想環境起動
    $ pip install django # djangoインストール
    
  • Djangoプロジェクトの雛形作成
    opsは、プロジェクト名なので、各自の環境に合わせること。

    $ django-admin startproject /var/www/vops/ops
    

アプリケーション作成

  • 実際にプログラムの成果物を配置することになるアプリケーションを作成 ※ ここでは、macuosという名称のアプリケーションを作成する。
    $ source /var/www/vops/bin/activate    # 仮想環境起動
    $ python manage.py startapp /var/www/vops/ops/macuos    # アプリケーションを作成
    

mod_wsgiインストール

  • httpd-develmod_wsgiをインストール Python3上では事前にhttpd-develをインストールする必要があるため、mod_wsgiの前に httpd-develをインストールする。
    $ source /var/www/vops/bin/activate # 仮想環境起動
    $ yum install -y httpd httpd-devel # httpd-develをインストール
    $ pip3.6 install mod_wsgi # pipでmod_wsgiをインストール
    

WSGIと仮想ホストの設定ファイル作成

  • Apache設定ファイルの確認
    Apacheの設定ファイルhttpd.confの設定内容を確認する。

    $ cat /etc/httpd/conf/httpd.conf
    …
    Include conf.modules.d/*.conf  
    IncludeOptional conf.d/*.conf 
    …
    
    • 補足
      上記Includeは、conf.modules.d(module系の設定ファイル)配下の*.confをロードする設定、IncludeOptionalは、conf.d(その他設定系のファイル)配下の*.confをロードする設定となる。

      そのため、次項でWSGI設定ファイル(django-wsgi.conf)と仮想ホスト設定ファイル(django.conf)を作成し、Apacheからmod_wsgiを介し、Djangoを起動できるよう、wsgi_module設定ファイルを作成する。
  • WSGI設定ファイル作成
    /etc/httpd/conf.modules.d配下に下記の内容でdjango-wsgi.confを作成する。

    LoadModule wsgi_module  /var/www/vops/lib64/python3.6/site-packages/mod_wsgi/server/mod_wsgi-py36.cpython-36m-x86_64-linux-gnu.so
    
    • 補足
      ※ wsgi_moduleのファイルパスは、findで確認。
      $ find /var/www -name 'mod_*.so'
      
  • 仮想ホスト設定ファイル作成
    /etc/httpd/conf.d配下に下記の内容でdjango.confを作成する。

    NameVirtualHost *:80
    NameVirtualHost *:443
    WSGISocketPrefix run/wsgi
    
    <VirtualHost *:443>… (※1)
        ServerName example.com … (※2)
        SSLEngine On … (※3)
        SSLCertificateFile /etc/letsencrypt/live/example.com/cert.pem … (※4)
        SSLCertificateKeyFile  /etc/letsencrypt/live/example.com/privkey.pem … (※4)
    
        WSGIDaemonProcess example.com processes=2 threads=15 python-home=/var/www/vops python-path=/var/www/vops/lib64/python3.6/site-packages … (※5)
        WSGIProcessGroup example.com … (※6)
        WSGIScriptAlias / /var/www/vops/ops/ops/wsgi.py … (※7)
    
        Alias /static /var/www/vops/ops/macuos/static … (※8)
        <Directory /var/www/vops/ops/macuos/static> 
            Require all granted
        </Directory>
    
        <Directory /var/www/vops/ops/ops> … (※9)
            <Files wsgi.py>
                Require all granted
            </Files>
        </Directory>
    </VirtualHost>
    <VirtualHost *:80>… (※10)
        ServerName example.com
        RewriteEngine on
        RewriteCond %{HTTPS} off
        RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]
    </VirtualHost>
    
    • 上記注釈
      ※1 SSL/TLSポートのVirtualHost。
      ※2 ServerName:自身のドメイン、サブドメイン、IP等を設定。
      ※3 SSLEngine:SSL/TLSエンジンの有効化。
      ※4 SSL/TLSサーバー証明書と秘密鍵の設定。Apache2.4では、上記のSSLCertificateFile、SSLCertificateKeyFileの設定になるが、Apache2.2だとSSLCertificateFile、SSLCertificateKeyFile、SSLCertificateChainFileの3つに設定が必要でさらに内容も若干違うため、バージョンが古い場合は、注意が必要。
      ※5 マルチプロセスかつ、デーモンモードでの起動設定。
      ※6 WSGIDaemonProcessと同じ、example.comを設定する必要あり。
      ※7 wsgi.pyエイリアスと起動直後のトップ画面をexample.comで表示したい場合の設定。 例えば、トップ画面から"XXX"というサブフォルダを掘りたい場合は、WSGIScriptAliasの第一パラメータに"/XXX"を指定する。
      ※8 静的ファイルへの(アイコンや画像など)エイリアスを設定 及び、静的フォルダまでのパスを設定。
      ※9 wsgi.pyまでのパスを設定。(起動直後にwsgi.pyを実行するよに設定)
      ※10 httpデフォルトの80ポートのVirtualHost。httpsにリダイレクトするように設定。


Copyright SIGMA-SE All Rights Reserved.
s-hama@sigma-se.jp