インストールの手順をメモしています。
SSL証明書は無料のLet’s Encryptをcertbotコマンドで取得します。
Apacheのインストール
dnfコマンドでhttpdをインストールします。
$ dnf -y install httpd
SSLでhttps接続を使用するために、mod_sslをインストールします。
$ dnf -y install mod_ssl
ファイアウォールにhttp、httpsサービスを追加します。
$ firewall-cmd --permanent --add-service=http
$ firewall-cmd --permanent --add-service=https
apacheの起動(start)、終了(stop)、再起動(restart)は下記の通りになります。
$ systemctl start httpd
$ systemctl stop httpd
$ systemctl restart httpd
pythonのインストールと環境設定
dnfコマンドでインストールします。
$ dnf install python38 python38-devel -y
python38 を pythonとpython3で実行できるように変更。
$ alternatives --config python
There are 3 programs which provide 'python'.
Selection Command
-----------------------------------------------
*+ 1 /usr/libexec/no-python
2
3 /usr/bin/python3.8
Enter to keep the current selection[+], or type selection number: 3
$ alternatives --config python3
There are 3 programs which provide 'python3'.
Selection Command
-----------------------------------------------
*+ 1 /usr/libexec/no-python
2
3 /usr/bin/python3.8
Enter to keep the current selection[+], or type selection number: 3
pip3.8 を pip で実行できるように変更。
$ update-alternatives --install /usr/bin/pip pip /usr/bin/pip3.8 1
仮想環境の構築
Python3 の標準ライブラリである venv で仮想環境を作成する方法を紹介します。
$ dnf -y install python3-virtualenv
$ mkdir /example
$ cd /example
$ virtualenv venv
/example/venv に Python3.8 用の仮想環境が作成されました。
仮想環境の有効化
作成した仮想環境のディレクトリに移動して「source 仮想環境の名前/bin/activate」を実行します。
$ cd /example
$ source venv/bin/activate
仮想環境の終了
仮想環境から抜け出すには、deactivate コマンドを実行します。
(venv)$ deactivate
Django のインストール
Djangoのインストールは仮想環境を有効化した状態で進めます。
(venv)$ python -m pip install Django
(venv)$ cd /example
(venv)$ django-admin startproject mysite
(venv)$ cd mysite
(venv)$ python manage.py startapp myapp
仮想環境にpipで必要なモジュールをインストール
mod_wsgiとは、WSGI (Web Server Gateway Interface) インターフェースに準拠した PythonのプログラムをApache HTTP Serverで動作させるためのモジュールです。こちらも仮想環境を有効にした状態でインストールします。
(venv)$ pip install httpd-devel
(venv)$ pip install mod_wsgi
EPELライブラリを有効化して、Certbotをインストール
certbotコマンドは、公的な認証局Let’s Encryptが発行する無料のTLSサーバ証明書を、簡単なコマンド操作で取得・更新することができるので、こちらをインストールして証明書のインストールと設定を行います。
$ yum install https://dl.fedoraproject.org/pub/epel/epel-release-latest-8.noarch.rpm
$ dnf install certbot python3-certbot-apache
apacehのバーチャルホスト(/etc/httpd/conf.d/example.conf)を事前に作成しておきます。
# example.conf
<VirtualHost *:80>
ServerName example-mysite.com
DocumentRoot /example/mysite
</VirtualHost>
certbotコマンドでssl用のバーチャルホストを自動生成します。
$ certbot --apache
Saving debug log to /var/log/letsencrypt/letsencrypt.log
Which names would you like to activate HTTPS for?
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
1: example-mysite.com
....
Select the appropriate numbers separated by commas and/or spaces, or leave input
blank to select all options shown (Enter 'c' to cancel): 1
実行すると、example-le-ssl.confファイルが作成されます。ファイルの中身は下記になります。
<IfModule mod_ssl.c>
<VirtualHost *:443>
ServerName example-mysite.com
DocumentRoot /example/mysite
SSLCertificateFile /etc/letsencrypt/live/service.three-villages.com/fullchain.pem
SSLCertificateKeyFile /etc/letsencrypt/live/service.three-villages.com/privkey.pem
Include /etc/letsencrypt/options-ssl-apache.conf
</VirtualHost>
</IfModule>
wsgiの設定
SSLの設定が完了したので、次はバーチャルホストにwsgiの設定を行います。
DocumentRootは使用しないのでコメントに変更して、下記のような設定を追加します。
<IfModule mod_ssl.c>
LoadModule wsgi_module /example/venv/lib64/python3.8/site-packages/mod_wsgi/server/mod_wsgi-py38.cpython-38-x86_64-linux-gnu.so
WSGISocketPrefix /var/run/wsgi
<VirtualHost *:443>
ServerName example-mysite.com
# DocumentRoot /example/mysite
WSGIDaemonProcess wsgi_app user=apache group=apache python-home=/example/venv python-path=/example/mysite
WSGIProcessGroup wsgi_app
WSGIScriptAlias / /example/mysite/mysite/wsgi.py
<directory /example/mysite/mysite>
<Files wsgi.py>
Require all granted
</Files>
</directory>
Alias /static/ /example/mysite/static/
<Directory /example/mysite/static>
Require all granted
</Directory>
SSLCertificateFile /etc/letsencrypt/live/service.three-villages.com/fullchain.pem
SSLCertificateKeyFile /etc/letsencrypt/live/service.three-villages.com/privkey.pem
Include /etc/letsencrypt/options-ssl-apache.conf
</VirtualHost>
</IfModule>
バーチャルホストの設定が完了したら、apacheを再起動することで設定が反映されます。