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名ラベル)を設定する方法