Azure Advent Calendar 2012 7日目の記事です。
さて、最近AWS Elastic Beanstalkにちょっと浮気はしたものの、私はAzure WebサイトとWebMatrixが大好きです。
そのAzure Webサイトが最近こっそりPythonとDjangoに対応したとの噂を小耳に挟んだので、試してみることにしました。
ローカルでの準備
まず作業用のディレクトリを作ります。
次に、作業ディレクトリにGitのレポジトリを作成します。
以下は作業例。
# cd /d d:\work\src
# mkdir DjangoAzure2
# cd DjangoAzure2
# git init
Gitのレポジトリが作成できたら、Djangoやそのほかライブラリをざっくりこのディレクトリにコピーします。
# mkdir site-packages
# cd site-packages
# xcopy /s C:\Python27\lib\site-packages\* .
すごい数のコピーが実行されますが、慌てずにコピーの終了を待ちましょう。
Djangoアプリケーションの作成
Python Tools for Visual Studio(PTVS)を使ってDjangoアプリケーションを作成しましょう。PTVSの入手とインストールについてはこちらでご確認下さい。
Visual Studioを起動し、Djangoのプロジェクトを下図の要領で、先ほど作成した作業用ディレクトリにDjangoのプロジェクトを追加します。
アプリケーションを開発したら、ローカルで実行してエラー等無いことを確認します。
ここまで来たら、DjangoAzure2ディレクトリの下にはsite-packagesとDjangoApplication二つのディレクトリが作成されているはずです。
D:\work\src\DjangoAzure2>dir
ドライブ D のボリューム ラベルは Data です
ボリューム シリアル番号は C800-1F03 です
D:\work\src\DjangoAzure2 のディレクトリ
2012/12/05 20:32 .
2012/12/05 20:32 ..
2012/12/05 21:05 DjangoApplication
2012/12/05 20:32 site-packages
0 個のファイル 0 バイト
4 個のディレクトリ 1,190,730,883,072 バイトの空き領域
次にiisでWSGIを使用するためにPTVSのサイトよりwfastcgi.pyを入手し、この作業ディレクトリに追加します。
D:\work\src\DjangoAzure2>dir
ドライブ D のボリューム ラベルは Data です
ボリューム シリアル番号は C800-1F03 です
D:\work\src\DjangoAzure2 のディレクトリ
2012/12/05 20:32 .
2012/12/05 20:32 ..
2012/12/05 21:05 DjangoApplication
2012/12/05 20:32 site-packages
2012/12/05 20:28 14,988 wfastcgi.py
1 個のファイル 14,988 バイト
4 個のディレクトリ 1,190,730,883,072 バイトの空き領域
ここまで来たら、すべてのファイルをコミットします。
# git add --all
# git commit -m "Initila Site"
Azure Webサイトの準備
Azure Webサイトの追加をします。
次にWebサイトのGitを有効にします。Git発行の設定をクリックして、Gitレポジトリの作成を開始させます。
作成されると、GitレポジトリのURLが表示されるので、コピーしておきます。
デプロイとサイトの動作設定
それではWebサイトのレポジトリにプッシュして、Djangoアプリケーションのデプロイをしましょう。
# git remote add azure
# git push azure master
デプロイが開始されます。このときのAzure管理コンソールの表示は下のようになります。
デプロイが終わるとコマンドプロンプトの出力は以下のようになります。
D:\work\src\DjangoAzure2>git push azure master
Counting objects: 7904, done.
Delta compression using up to 8 threads.
Compressing objects: 100% (6821/6821), done.
Writing objects: 100% (7904/7904), 11.35 MiB | 1.11 MiB/s, done.
Total 7904 (delta 2270), reused 0 (delta 0)
remote: New deployment received.
remote: Updating branch 'master'.
remote: .............................
remote: Preparing deployment for commit id '077832e60e'.
remote: Preparing files for deployment.
remote: .......................................................
remote: Deployment successful.
To https://ishisaka@ishisakafirstdjango.scm.azurewebsites.net/ishisakafirstdjango.git
* [new branch] master -> master
これで、デプロイ自体は終了なのですが、このままではDjangoのアプリケーションが動作しないので、動作するように構成で設定します。
構成の変更
Azure管理コンソールで構成をクリックして、構成画面を表示させます。
アプリ設定で以下のようにキー値と値を設定します。
キー 値 DJANGO_SETTINGS_MODULE DjangoApplication.settings PYTHONPATH D:\home\site\wwwroot\DjangoApplication;D:\home\site\wwwroot\site-packages WSGI_HANDLER django.core.handlers.wsgi.WSGIHandler()
DJANGO_SETTINGS_MODULE環境変数はDjangoの動作設定が書かれ多モジュールを設定します。
PYTHONPATH環境変数はアプリケーションとライブラリへの参照パスを指定します。Windows Azure Web Siteではユーザーがデプロイしたファイルは“D:\home\site\wwwroot\” ディレクトリに保存されるので、今回では上のような指定になります。アプリケーションディレクトリ名は適宜変更して下さい。
WSGI_HANDLERではWSGIから呼び出されるメソッドを指定します。カスタマイズしていない限り、上の設定のままで問題ないはずです。
次に、Pythonとwsgiが動作するようにハンドラーマッピングの変更を行います。
拡張 スクリプトプロセッサパス 追加の引数 * D:\python27\python.exe D:\home\site\wwwroot\wfastcgi.py
設定が完了したら下の方にある保存ボタンをクリックして、変更した設定を保存します。
設定保存するとAzureの方でIISのアプリケーションプールの再起動などが行われ、Djangoのアプリケーションが起動します。
http://ishisakafirstdjango.azurewebsites.net/(このサイトは消されている可能性あり)
まとめ
WebMatrixで一発デプロイという感じでは無いので、ASP.NETやnode.jsに比べると手順は多少煩雑ですが、それほど難しくなくDjangoのアプリケーションをAzure Webサイトにデプロイできることがおわかりいただけたと思います。
Azure WebサイトはPython/Djangoまで対応とは全く憎いやつです。この勢いでRuby on Railsにも対応しちゃえばいいのに。
後、この方法でDjangoが動くならと言うことで悪いこと役に立つことをする人たちが出てくるとおもしろいかもな。
当然のことながらWEBサイトの容量はそれなりに厳しいですし、強固な保証があるわけでも無いので、本格的なアプリケーションを作るのであればデータベースを外部のMySqlやAzure SQLデータベースの使用を検討した方が良いでしょう。
さて、明日の当番はkunyamiさんです。ではハリキッテどうぞ!!
コメント
RT @ishisaka: Windows Azure WebサイトでPython/Djangoを使おう!: Azure Advent Calendar 2012 7日目の#azurejp… http://t.co/GrZfNAJb
RT @ishisaka: Windows Azure WebサイトでPython/Djangoを使おう!: Azure Advent Calendar 2012 7日目の#azurejp… http://t.co/GrZfNAJb
RT @ishisaka: Windows Azure WebサイトでPython/Djangoを使おう!: Azure Advent Calendar 2012 7日目の#azurejp… http://t.co/GrZfNAJb
[…] 記事内容的には、Windows Azure Advent Calendar 2012 12月7日記事の続き的なものになります。 […]