0. この記事について
Djangoで作ったホームページを公開しようと思い、Microsoft Azure上に仮想マシンを作ってデプロイした。その時の方法を記録する。
1. VMを作る
・Azure Portalから、Ubuntu Server 16.04 LTS の仮想マシンを作成した。
・そのままでは、再起動の度にIPアドレスが変わるため、静的なIPを設定するかDNS名を設定する。ここでは、後者にした。VMの「概要」→「パブリックIPアドレス」のアドレスをクリック→「DNS名ラベル」のところにラベルを入力。名前は、ここでは仮にmyapp.japaneast.cloudapp.azure.comとする。
・ネットワークの設定をする。「ネットワーク インターフェイス」の「受信ポートの規則」で、「HTTP」を追加する。
2. VM上にプロジェクトを持ってくる
・プロジェクトのディレクトリは、VM上の/home/user/myprojectにあると仮定する。
・プロジェクト内にあるwsgi.pyに次の行を追加する。
import sys
sys.path.append('/home/user/myproject')
・やらなくても動くが、settings.pyでDEBUG = TrueとなっているところをDEBUG = Falseにしておく。
・settings.pyで、ALLOWED_HOSTSの中に、Azureで設定したホスト名myapp.japaneast.cloudapp.azure.comを入れる。独自ドメインを使う場合は、それも入れる。
・/home/user/myproject/に、virtualenv ENVやpython -m venv ENVで作った仮想環境のフォルダENVがあると仮定する。
3. VM上にApacheを入れる
・sudo apt-get install apache2 libapache2-mod-wsgi-py3として、Apacheなどをインストールする。
・次のように、/etc/apache2/sites-available/000-default.confを編集していく。
・staticとwsgiの設定をする。
<VirtualHost *:80>
...
Alias /static /home/user/myproject/static
<Directory /home/user/myproject/static>
Require all granted
</Directory>
<Directory /home/user/myproject/myproject>
<Files wsgi.py>
Require all granted
</Files>
</Directory>
</VirtualHost>
・その下に、さらに3行追記する。
<VirtualHost *:80>
...
</Directory>
WSGIDaemonProcess myproject python-path=/home/user/myproject/ENV/lib/python3.6/site-packages
WSGIProcessGroup mysite
WSGIScriptAlias / /home/user/myproject/myproject/wsgi.py
</VirtualHost>
python-pathは、ENVで使っているpythonのバージョンなどに応じて書き換える。
・次に、ターミナルで権限関係の設定をする。
chmod 664 ~/myproject/db.sqlite3
sudo chown :www-data ~/myproject/db.sqlite3
sudo chown :www-data ~/myproject
・sudo service apache2 restartをする。
4. その他
・error.logやaccess.logは/var/log/apache2で見れる。
・Djangoのドキュメンテーションには、httpd.confを編集するデプロイ方法が書かれているが、Ubuntuの場合、これに相当するファイルは/etc/apache2/apache2.confのようだ。今回は、これは編集しなかった。
5. 参考
・How To Serve Django Applications with Apache and mod_wsgi on Ubuntu 14.04
・Microsoft Azureの仮想マシンにAzureサブドメイン(DNS名ラベル)を設定する方法