シン・レンタルサーバーのFastCGIでDjangoを動かす

シン・レンタルサーバーやXserverではレンタルサーバーとしては珍しくFastCGIが使えます。Djangoを動作させるにはVPSのようなOSレベルから管理できる環境か、HerokuのようなPaasを使うことが多いと思いますが、シン・レンタルサーバーのFastCGIでも動かすことができましたので方法をメモしておきます。

シン・レンタルサーバーのpythonは3.6ですが、まずここがきびしいのでpython3.11を使えるようにします。

$ pwd
/home/aruita
$ wget https://repo.anaconda.com/archive/Anaconda3-2024.02-1-Linux-x86_64.sh
$ sh Anaconda3-2024.02-1-Linux-x86_64.sh
... 指示に従ってインストール ...
$ ./anaconda3/bin/python -V
Python 3.11.7

* Anacondaの最新バージョンは https://www.anaconda.com/download#downloads を確認してください。

Djangoプロジェクトを保管するディレクトリをホームディレクトリに作成します。

$ mkdir djangoproject
$ cd djangoproject
$ pwd
/home/aruita/djangoproject

Django等のライブラリをローカルに保存するのにvenvを使用します。

$ ~/anaconda3/bin/python -m venv venv
$ . venv/bin/activate
(venv) $ python -V
Python 3.11.7
(venv) $ which python
~/djangoproject/venv/bin/python

Djangoをインストールします。またFastCGIを動作させるためにflupもインストールします。

(venv) $ pip install django flup
...
Successfully installed asgiref-3.8.1 django-5.0.4 flup-1.0.3 sqlparse-0.4.4

mysiteという名前のプロジェクトを作ります。

(venv) $ pwd
/home/aruita/djangoproject
(venv) $ django-admin startproject mysite
(venv) $ cd mysite
(venv) $ pwd
/home/aruita/djangoproject/mysite

次に、公開ディレクトリにindex.fcgiを作成します。公開URLはexample.comとします。適時読み替えてください。

(venv) $ cd ~/example.com/public_html
(venv) $ vi index.fcgi
#!/home/aruita/djangoproject/venv/bin/python
# 仮想環境pythonのフルパス

import sys
sys.path.append('/home/aruita/djangoproject/mysite') # Djangoプロジェクトのルートディレクトリ

from flup.server.fcgi import WSGIServer
from mysite.wsgi import application # プロジェクト内のwsgiモジュールから参照

WSGIServer(application).run()

index.fcgiをFastCGIとして動作させるために実行権限と.htaccessによる設定を行います。

(venv) $ chmod +x index.fcgi
(venv) $ vi .htaccess
AddHandler fcgid-script .fcgi

RewriteEngine on
RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*)$ index.fcgi/$1 [L]

ブラウザで example.com へアクセスするとDisallowedHostのエラーになるので、settings.py内のALLOWED_HOSTSにドメインを追加します。

(venv) $ vi ~/djangoproject/mysite/mysite/settings.py
#ALLOWED_HOSTS = []
ALLOWED_HOSTS = ['example.com',]

これで動作します。