エックスサーバー上でDjangoを動かす方法をまとめました。
環境
- Windows10
- Python 3.7.3
事前準備
サブドメインの設定
エックスサーバーでサブドメインを設定しておきます。
サブドメインの設定方法は公式ページを参照してください。
webappという名前で今回は設定しました。
設定してから数時間で設定が反映されるはずです。
SSHの設定
サーバー側でコマンドを入力するためにSSH接続の設定をする必要があります。
SSHの設定は公式ページを参照してください。
SSHの接続にTeraTermを使用しました。
Linuxbrewのインストール
SSHで接続後にLinuxbrewをインストールします。
Linuxbrewのインストール方法は下記のページが参考になります。

python3のインストール
サーバー上でbrewコマンドを使用してpython3をインストールします。
1 |
$ brew install python3 |
インストール後にpython3とpip3がインストールされているか確認します。
1 2 3 4 |
$ 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をインストールします。
1 |
python3 install pipenv |
Djangoを動かす
ローカルPC上で行う作業
自分のPCでpipenvをインストールします。
1 |
pip install pipenv |
プロジェクト用のフォルダを作成します。
1 2 |
mkdir test cd test |
pipenvでDjangoをインストールします。
1 |
pipenv install django |
pipenvの仮想環境内に入ります。
1 |
pipenv shell |
Djangoのプロジェクトを作成します。xserver_testとしてみました。
1 |
django-admin startproject xserver_test |
testappという名前のアプリケーションを作成します。
1 |
python manage.py startapp testapp |
setting.pyにアプリケーションを登録します。
1 2 3 4 5 6 7 8 9 |
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を参照するように変更します。
1 2 3 4 5 6 7 |
from django.contrib import admin from django.urls import path, include urlpatterns = [ path('admin/', admin.site.urls), path('',include('testapp.urls')) ] |
testapp内のurls.pyを新規作成します。
1 2 3 4 5 6 |
from django.urls import path from . import views urlpatterns = [ path('', views.index) ] |
testapp内のviews.pyを変更してhttpレスポンスを返すようにします。
1 2 3 4 5 |
from django.shortcuts import HttpResponse def index(request): return HttpResponse('Hello world!') |
runserverコマンドを入力して http://127.0.0.1:8000/ にアクセスします。
1 |
python manage.py runserver |
Hello world!と表示されれば成功です。
settings.pyのDEBUGとALLOWED_HOSTSを変更します。
1 2 3 |
DEBUG = False ALLOWED_HOSTS = ['*'] |
エックスサーバーで行う作業
事前準備でサブドメインを作成していると、public_html内に
サブドメイン名フォルダが作成されています。
Teratermでサブドメイン名フォルダに移動してtestフォルダを作成します。
1 2 3 |
$ cd /home/ユーザー名/ドメイン名/public_html/サブドメイン名/ $ mkdir test $ cd test |
ローカルPC上で作成したファイルをエックスサーバーのtestフォルダに転送します。
エックスサーバーのファイルマネージャーを利用してファイルをアップロードするか
WinSCPなどのFTPクライアントを利用してファイルを転送します。
ファイル転送後のtestフォルダの構成は以下のようになります。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
│ 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を元に必要なモジュールを仮想環境に自動的にインストールします。
1 |
$ pipenv install |
pipenvのvenvオプションで仮想環境のパスをメモしておきます。
1 2 |
$ pipenv --venv 仮想環境のパスが表示されるのでメモしておきます |
testフォルダに.htaccessファイルをファイルマネージャーで作成するか
またはローカルで作成して、FTPクライアントで転送します。
1 2 3 |
RewriteEngine On RewriteCond %{REQUEST_FILENAME} !-f RewriteRule ^(.*)$ /test/index.cgi/$1 [QSA,L] |
index.cgiファイルをファイルマネージャーで作成するか
またはローカルで作成して、FTPクライアントでtestフォルダに転送します。
1行目には先程メモした仮想環境のパスをシェバンとして設定します。
文字コードはUTF-8で保存して、パーミッションを755に設定します。
1 2 3 4 5 6 7 8 9 10 11 |
#!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の設定もできるようです。

コメント