エックスサーバー上でDjangoを動かす方法をまとめました。
環境 #
- Windows10
- Python 3.7.3
事前準備 #
サブドメインの設定 #
エックスサーバーでサブドメインを設定しておきます。
サブドメインの設定方法は公式ページを参照してください。
https://www.xserver.ne.jp/manual/man_domain_subdomain_setting.php
webappという名前で今回は設定しました。
設定してから数時間で設定が反映されるはずです。
SSHの設定 #
サーバー側でコマンドを入力するためにSSH接続の設定をする必要があります。
SSHの設定は公式ページを参照してください。
https://www.xserver.ne.jp/manual/man_server_ssh.php
SSHの接続にTeraTermを使用しました。
Linuxbrewのインストール #
SSHで接続後にLinuxbrewをインストールします。
Linuxbrewのインストール方法は下記のページが参考になります。
python3のインストール #
サーバー上でbrewコマンドを使用してpython3をインストールします。
brew install python3
インストール後にpython3とpip3がインストールされているか確認します。
$ python3 -V
Python 3.7.3
$ pip3 -V
pip 19.0.3 from /home/ユーザー名/.linuxbrew/opt/python/lib/python3.7/site-packages/pip (python 3.7)
pipenvのインストール #
pipenvをインストールします。
pip3 install pipenv
Djangoを動かす #
ローカルPC上で行う作業 #
自分のPCでpipenvをインストールします。
pip install pipenv
プロジェクト用のフォルダを作成します。
mkdir test
cd test
pipenvでDjangoをインストールします。
pipenv install django
pipenvの仮想環境内に入ります。
pipenv shell
Djangoのプロジェクトを作成します。xserver_testとしてみました。
django-admin startproject xserver_test
testappという名前のアプリケーションを作成します。
python manage.py startapp testapp
setting.pyにアプリケーションを登録します。
INSTALLED_APPS = [
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'testapp'
]
xserver_testフォルダ内のurls.pyをtestappフォルダ内のurls.pyを参照するように変更します。
from django.contrib import admin
from django.urls import path, include
urlpatterns = [
path('admin/', admin.site.urls),
path('',include('testapp.urls'))
]
testapp内のurls.pyを新規作成します。
from django.urls import path
from . import views
urlpatterns = [
path('', views.index)
]
testapp内のviews.pyを変更してhttpレスポンスを返すようにします。
from django.shortcuts import HttpResponse
def index(request):
return HttpResponse('Hello world!')
runserverコマンドを入力してhttp://127.0.0.1:8000/
にアクセスします。
python manage.py runserver
Hello world!と表示されれば成功です。

settings.pyのDEBUGとALLOWED_HOSTSを変更します。
DEBUG = False
ALLOWED_HOSTS = ['*']
正式に公開する場合はDjangoドキュメントのデプロイチェックリストの内容を参考にしてsettings.pyを変更してください。
エックスサーバーで行う作業 #
事前準備でサブドメインを作成していると、public_html内にサブドメイン名フォルダが作成されています。 Teratermでサブドメイン名フォルダに移動してtestフォルダを作成します。
cd /home/ユーザー名/ドメイン名/public_html/サブドメイン名/
mkdir test
cd test
ローカルPC上で作成したファイルをエックスサーバーのtestフォルダに転送します。
エックスサーバーのファイルマネージャーを利用してファイルをアップロードするか
WinSCPなどのFTPクライアントを利用してファイルを転送します。
ファイル転送後のtestフォルダの構成は以下のようになります。
manage.py
│ Pipfile
│ Pipfile.lock
├─testapp
│ │ admin.py
│ │ apps.py
│ │ models.py
│ │ tests.py
│ │ urls.py
│ │ views.py
│ │ __init__.py
│ └─migrations
│ └─ __init__.py
│
└─xserver_test
│ settings.py
│ urls.py
│ wsgi.py
└ __init__.py
Teraterm上でpipenvを利用して仮想環境を作成します。
PipfileとPipfile.lockを元に必要なモジュールを仮想環境に自動的にインストールします。
pipenv install
pipenvのvenvオプションで仮想環境のパスをメモしておきます。
$ pipenv --venv
仮想環境のパスが表示されるのでメモしておきます
testフォルダに.htaccessファイルをファイルマネージャーで作成するかまたはローカルで作成して、 FTPクライアントで転送します。
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*)$ /test/index.cgi/$1 [QSA,L]
index.cgiファイルをファイルマネージャーで作成するかまたはローカルで作成して、FTPクライアントでtestフォルダに転送します。
1行目には先程メモした仮想環境のパスをシェバンとして設定します。文字コードはUTF-8
で保存して、パーミッションを755に設定します。
#!pipenv仮想環境のパス/bin/python3.7
import sys, os
sys.path.insert(0, "pipenv仮想環境のパス/bin")
os.environ['DJANGO_SETTINGS_MODULE'] = "xserver_test.settings"
from wsgiref.handlers import CGIHandler
from django.core.wsgi import get_wsgi_application
application = get_wsgi_application()
CGIHandler().run(application)
サブドメイン.ドメイン/test にブラウザでアクセスしてHello world!と表示されればDjangoが動いていることを確認できます。

追加設定 #
FastCGIの設定もできるようです。