エックスサーバーでDjangoを動かす
概要
エックスサーバー上で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を使用しました。
https://ja.osdn.net/projects/ttssh2
Linuxbrewのインストール
SSHで接続後にLinuxbrewをインストールします。
Linuxbrewのインストール方法は下記のページが参考になります。
https://note.mu/coeeff/n/neab8acfde97e
python3のインストール
サーバー上でbrewコマンドを使用してpython3をインストールします。
1brew install python3
インストール後にpython3とpip3がインストールされているか確認します。
1$ python3 -V
2Python 3.7.3
3$ pip3 -V
4pip 19.0.3 from /home/ユーザー名/.linuxbrew/opt/python/lib/python3.7/site-packages/pip (python 3.7)
pipenvのインストール
pipenvをインストールします。
1pip3 install pipenv
Djangoを動かす
ローカルPC上で行う作業
自分のPCでpipenvをインストールします。
1pip install pipenv
プロジェクト用のフォルダを作成します。
1mkdir test
2cd test
pipenvでDjangoをインストールします。
1pipenv install django
pipenvの仮想環境内に入ります。
1pipenv shell
Djangoのプロジェクトを作成します。xserver_testとしてみました。
1django-admin startproject xserver_test
testappという名前のアプリケーションを作成します。
1python manage.py startapp testapp
setting.pyにアプリケーションを登録します。
1INSTALLED_APPS = [
2 'django.contrib.admin',
3 'django.contrib.auth',
4 'django.contrib.contenttypes',
5 'django.contrib.sessions',
6 'django.contrib.messages',
7 'django.contrib.staticfiles',
8 'testapp'
9]
xserver_testフォルダ内のurls.pyをtestappフォルダ内のurls.pyを参照するように変更します。
1from django.contrib import admin
2from django.urls import path, include
3
4urlpatterns = [
5 path('admin/', admin.site.urls),
6 path('',include('testapp.urls'))
7]
testapp内のurls.pyを新規作成します。
1from django.urls import path
2from . import views
3
4urlpatterns = [
5 path('', views.index)
6]
testapp内のviews.pyを変更してhttpレスポンスを返すようにします。
1from django.shortcuts import HttpResponse
2
3def index(request):
4 return HttpResponse('Hello world!')
runserverコマンドを入力して http://127.0.0.1:8000/ にアクセスします。
1python manage.py runserver
Hello world!と表示されれば成功です。

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

追加設定
FastCGIの設定もできるようです。
https://teratail.com/questions/8230