Heroku | Cloud Application Platform
Heroku と言えば Ruby/Clojure/Node ですが、
Django アプリ(というか Python アプリ)がデプロイできるようになったらしいので試してみました。
変更履歴
- 2011-09-21 gunicorn 対応しました
heroku にアカウントを作る
というかそもそも Heroku のアカウントすら持っていなかったので、アカウント作るところから。
ここでメールアドレスを登録すればあとはまぁ普通のアカウント作成です。
heroku コマンドをインストールする
初めての gem install
$ sudo gem install heroku
Django をデプロイする準備
最低限必要なのは virtualenv です。
easy_install なり pip で virtualenv が使える環境は作っておきましょう。
とりあえずプロジェクトフォルダを作成
$ mkdir heroku-django $ cd heroku-django
virtualenv 環境をフォルダに展開します
$ virtualenv --no-site-packages . $ source bin/activate
何はともあれ Django をインストール
$ bin/pip install django
heroku は PostgresSQL なので psycopg2 をインストールします、これが結構やっかいですが ...
$ env ARCHFLAGS="-arch i386 -arch x86_64" bin/pip install psycopg2
デプロイ用に gunicorn をインストール
$ bin/pip install gunicorn
ここでインストールしたサイトパッケージに必要なファイルを書き出します
$ bin/pip freeze > requirements.txt
プロジェクトを作ります
$ bin/django-admin.py startproject snowflake
snowflake/settings.py を開いて admin や admindocs を有効にします
INSTALLED_APPS = (
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.sites',
'django.contrib.messages',
'django.contrib.staticfiles',
# Uncomment the next line to enable the admin:
'django.contrib.admin',
# Uncomment the next line to enable admin documentation:
'django.contrib.admindocs',
)
Procfile というファイルを作っておきます(中身はこんなの)
gunicorn を使います
$ cat Procfile web: bin/gunicorn_django -b 0.0.0.0:$PORT snowflake/settings.py
snowflake/urls.py を開いて home 関数との結びつけや管理画面への URL を有効にします
あと gunicorn を使うので静的ファイルの対応も
from django.conf.urls.defaults import patterns, include, url # Uncomment the next two lines to enable the admin: from django.contrib import admin admin.autodiscover() urlpatterns = patterns('', # Examples: url(r'^$', 'snowflake.views.home', name='home'), # url(r'^snowflake/', include('snowflake.foo.urls')), # Uncomment the admin/doc line below to enable admin documentation: url(r'^admin/doc/', include('django.contrib.admindocs.urls')), # Uncomment the next line to enable the admin: url(r'^admin/', include(admin.site.urls)), ) urlpatterns += patterns('django.contrib.staticfiles.views', url(r'^static/(?P<path>.*)$', 'serve', kwargs={"insecure": True}), )
snowflake/views.py は無いので、つくります
from django.http import HttpResponse def home(request): return HttpResponse("Django on Heroku!")
Django をデプロイする
さてここからデプロイ作業です。heroku ではデプロイは git を使います。
まずは不要なファイルがコミットされるのを防ぐため、無視リストを作りましょう。
無視リストは heroku-django ディレクトリ直下に作ります
$ cat >.gitignore <<EOF bin/ include/ lib/ *.pyc EOF
ファイルの確認をしましょう。以下のようなファイルがあるはずです
.git/ .gitignore Procfile bin/ include/ lib/ requirements.txt snowflake/__init__.py snowflake/manage.py snowflake/settings.py snowflake/urls.py snowflake/views.py
さて次に初期化とファイルの追加です
$ git init $ git add . $ git commit -m "Import"
ここで一番はじめにインストールした heroku コマンドを使います
アプリケーション名が表示されるはずなのでそれを覚えておいて下さい
初めて打った場合はメールアドレスやパスワードそして、公開鍵のアップロードが始まるはずです。
$ heroku create --stack cedar Creating あなたのアプリ名... done, stack is cedar http://あなたのアプリ名.herokuapp.com/ | git@heroku.com:あなたのアプリ名.git
ここでは smooth-samurai-8095 と出ていますが、違う表示がされるはずです。それが貴方のアプリ ID です。
heroku create 打つと git に heroku という remote が追加されるはずですので、確認してみて下さい。
$ git remote show heroku * remote heroku Fetch URL: git@heroku.com:あなたのアプリ名 Push URL: git@heroku.com:あなたのアプリ名 HEAD branch: (unknown)
remote heroku の URL にアプリケーション名が登録されていれば問題ありません。
あとは push するだけです。
git push heroku master
これで、デプロイは完了しました。
さて syncdb してみましょう。syncdb は heroku コマンドから使います。
$ heroku run bin/python snowflake/manage.py syncdb
あとはいつも見慣れた画面ですね、ユーザを追加したらデプロイ先へアクセスしてみましょう
- トップ画面
- http://あなたのアプリ名.herokuapp.com/
- 管理画面
- http://あなたのアプリ名.com/admin
まずはこんなところでしょうか
デモ
- トップ画面
- http://floating-mountain-8115.herokuapp.com/
- 管理画面
- http://floating-mountain-8115.herokuapp.com/admin
管理画面には ユーザ名 django パスワード django でログインできます(何も出来ませんが)
感想
heroku を使ったことが無かったので、不慣れで色々良くわからない点がありましたが、比較的デプロイしやすい気がしました。
AppEngine と比べると、自由度が高い分面倒に感じてしまいますが:-)
そうそう、デプロイ方式が Git というのはいいですね、fluxflex の時も思いましたが、気軽でイイですね。
heroku が Python に対応したことで、自由が好きな Python な人は Heorku を使うとイイと思います。
Add-On が沢山あり、色々なことが出来る様です、ただお金がかかるので趣味で ... というのは厳しそうです。
デプロイ先の一つとしてかなりありなのではないでしょうか。
参考
- http://blog.abhiomkar.in/2011/09/17/deploying-django-on-heroku-mac-os-x/
- http://www.askthepony.com/blog/2011/07/getting-django-on-heroku-prancing-8-times-faster/
- https://gist.github.com/1004844
- http://elweb.co/programacion/how-to-host-django-apps-on-heroku/
- http://kzk9.net/deploying-tornado-on-heroku-mac-os-x