Apacheと複数のDjangoの設定メモ(DDNSを使ったLAN内、mod_md)
DDNSを作成
RouterでForward設定(80,443両方)
Django-adminでプロジェクトの作成(名前をsampleとしてみる、場所をd:web/と仮定。d:web/sampleがprojectのルート)
Apacheのhttpd.confの設定
まず、Let's encryptでSSL証明書をもらうために80(http)でのhtml承認を行う。
Apacheのhtdocsの直下にsample1,sample2というフォルダを作る。
d:web/sampleの直下にsample1,sample2というフォルダを作る。(これやらないと起動しない)
httpd.confファイル
LoadFile "C:/Anaconda3/python36.dll"
LoadModule wsgi_module "c:/Anaconda3/Lib/site-packages/mod_wsgi/server/mod_wsgi.cp36-win_amd64.pyd"
WSGIPythonHome "c:/Anaconda3"
# WSGIPythonPath "d:/web/sample1;d:/web/sample2" #windows用, linuxは:では競合してうまく動かない
WSGIPassAuthorization On
<IfModule md_module>
MDBaseServer on
MDCertificateProtocol ACME
MDCAChallenges http-01 # http用
# MDCAChallenges tls-alpn-01 # https用
MDDriveMode auto
MDPrivateKeys RSA 2048
MDRenewWindow 33%
MDStoreDir md
# the staging ACMEv2 endpoint
MDCertificateAuthority https://acme-staging-v02.api.letsencrypt.org/directory #staging環境
#MDCertificateAuthority https://acme-v02.api.letsencrypt.org/directory #本番環境
MDCertificateAgreement accepted
</IfModule>
<VirtualHost *:80>
ServerName sample1.yourdomain.com
DocumentRoot "${SRVROOT}/htdocs/sample1"
ErrorLog "d:/web/sample1/logs/error.log"
CustomLog "d:/web/sample1/logs/access.log" common
WSGIScriptAlias / "d:/web/sample1/sample1/wsgi.py"
Protocols h2 http/1.1 acme-tls/1
Alias /static "d:/web/sample1/static"
<Directory "d:/web/sample1/sample1">
<Files wsgi.py>
Require all granted
</Files>
</Directory>
<Directory "d:/web/sample1/static">
Require all granted
</Directory>
</VirtualHost>
<VirtualHost *:80>
ServerName sample2.yourdomain.com
DocumentRoot "${SRVROOT}/htdocs/sample2"
ErrorLog "d:/web/sample2/logs/error.log"
CustomLog "d:/web/sample2/logs/access.log" common
WSGIScriptAlias / "d:/web/sample2/sample2/wsgi.py"
Protocols h2 http/1.1 acme-tls/1
Alias /static "d:/web/sample2/static"
<Directory "d:/web/sample2/sample2">
<Files wsgi.py>
Require all granted
</Files>
</Directory>
<Directory "d:/web/sample2/static">
Require all granted
</Directory>
</VirtualHost>
競合を避けるために、それぞれのAppのwsgi.pyファイルの中でsys.pathを追加する。
wsgi.py ファイル
import os
import sys # 追加する
from django.core.wsgi import get_wsgi_application
sys.path.append('d:/web/api_v1') # 追加する
os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'api_v1.settings')
application = get_wsgi_application()
2回起動して、stagingのSSLがGetできたか確認
apache24/md内のファイルを削除し、本番に切り替えてSSLを再度取得
<VirtualHost *:443>
SSLEngine on
ServerName sample1.mywire.org
DocumentRoot "${SRVROOT}/htdocs/sample1"
ErrorLog "d:/web/sample1/logs/error.log"
CustomLog "d:/web/sample1/logs/access.log" common
WSGIScriptAlias / "d:/web/sample1/sample1/wsgi.py"
Protocols h2 http/1.1 acme-tls/1
Alias /static "d:/web/sample1/static"
<Directory "d:/web/sample1/sample1">
<Files wsgi.py>
Require all granted
</Files>
</Directory>
<Directory "d:/web/sample1/static">
Require all granted
</Directory>
</VirtualHost>
<VirtualHost *:443>
SSLEngine on
ServerName sample2.mywire.org
DocumentRoot "${SRVROOT}/htdocs/sample2"
ErrorLog "d:/web/sample2/logs/error.log"
CustomLog "d:/web/sample2/logs/access.log" common
WSGIScriptAlias / "d:/web/sample2/sample2/wsgi.py"
# 本来ならここで SSLCertificateFile を指定しますが mod_md では必要ありません。
# MDStoreDir で指定した場所にサーバー証明書が作成され、それが自動的に使用されます。
Protocols h2 http/1.1 acme-tls/1
Alias /static "d:/web/sample2/static"
<Directory "d:/web/sample2/sample2">
<Files wsgi.py>
Require all granted
</Files>
</Directory>
<Directory "d:/web/sample2/static">
Require all granted
</Directory>
</VirtualHost>
を追加して完了。