はじめに

僕はサーバをさくらのレンタルサーバのスタンダードプランしか借りていないので、サーバサイドでガシガシプログラムを動かすことができないのですが、Django を使って API を作りたかったので、その設定方法を紹介します。

紹介する範囲

今回は Django の WSGI を CGI を通して利用する方法のみを紹介します。

さくらのレンタルサーバで Python 自体を利用する方法や Django の細かな設定自体は紹介しません。

CGI の設定

さくらのレンタルサーバでは mod_wsgi が設定されていないため、Python を実行するには CGI を通さなければいけません。

そこで、 Django のプロジェクトルートに index.cgi を作成し、以下の内容を書き加えます。
この際、パーミッションを 755 に指定するのを忘れないようにします。

#!/path/to/python

import sys
sys.path.append('/path/to/djangoproject/')

import cgitb
cgitb.enable()

from wsgiref.handlers import CGIHandler
from projectname.wsgi import application

CGIHandler().run(application)

まず、1行目は使用している Python の環境をしてします。
pyenv と pyenv-virtualenv などを使用している場合は #!/home/username/.pyenv/versions/envname/python などですね。

4行目は今使用している Django のプロジェクトへのパスを指定します。
ここは pwd で表示される値をそのまま持ってくれば大丈夫です。

10行目の projectname は自分で設定しているプロジェクト名に変更します。

内部でやっていることは Django が設定している WSGI を CGI ハンドラーに載せて実行しているだけです。

アクセスしてみる

index.cgi を入り口としているので https://example.com/index.cgi がルートになります。
デフォルトの管理画面だと https://example.com/index.cgi/admin になります。

アクセスする際には settings.pyALLOWED_HOSTS にホストを追加するのを忘れないようにしましょう。

またこのままだと index.cgi が常に入っていてダサいので .htaccess を用いて index.cgi 無しで見れるようにします。

RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*)$ /index.cgi/$1 [QSA,L]

おわりに

以上、簡単でしたがスタンダードのさくらのレンタルサーバで Django を動かす方法でした。