シン・レンタルサーバーや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',]
これで動作します。