エックスサーバーで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 = ['*']
Warning

あくまで一時的に公開する設定値です。
正式に公開する場合は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
1415└─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

関連ページ