Apacheと複数のDjangoの設定メモ (DDNSを使ったLAN内、mod_md)

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()
```


２回起動して、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>

```
を追加して完了。