エックスサーバーで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://teratermproject.github.io

Linuxbrewのインストール

SSHで接続後にLinuxbrewをインストールします。
Linuxbrewのインストール方法は下記のページが参考になります。

https://note.mu/coeeff/n/neab8acfde97e

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に設定します。

https://ja.wikipedia.org/wiki/%E3%82%B7%E3%83%90%E3%83%B3_(Unix)

#!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の設定もできるようです。

https://teratail.com/questions/8230

Licensed under CC BY-NC-SA 4.0
最終更新 2025年7月9日 22:00
Hugo で構築されています。
テーマ StackJimmy によって設計されています。