エックスサーバーでDjangoを動かす

Python
この記事は約5分で読めます。

エックスサーバー上でDjangoを動かす方法をまとめました。

環境

  • Windows10
  • Python 3.7.3

事前準備

サブドメインの設定

エックスサーバーでサブドメインを設定しておきます。
サブドメインの設定方法は公式ページを参照してください。

サブドメイン設定 | レンタルサーバー【エックスサーバー】
レンタルサーバー「エックスサーバー」のご利用マニュアル|エックスサーバーでサブドメインを利用する際に必要となるサーバーパネルの「サブドメイン設定」機能に関するご案内です。エックスサーバーではサブドメインを無制限に追加することが可能です。

webappという名前で今回は設定しました。
設定してから数時間で設定が反映されるはずです。

SSHの設定

サーバー側でコマンドを入力するためにSSH接続の設定をする必要があります。
SSHの設定は公式ページを参照してください。

SSH設定 | レンタルサーバー【エックスサーバー】
レンタルサーバー「エックスサーバー」のご利用マニュアル|エックスサーバーではSSH接続機能を提供しています。当マニュアルではお客様のサーバーアカウントへSSHで接続するための手順を記載しています。

SSHの接続にTeraTermを使用しました。

Linuxbrewのインストール

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

エックスサーバーにLinuxbrewでPythonをインストール|Coeeff|note
XSERVER(エックスサーバー)でPythonを動かしてみます。 XSERVERではデフォルトでPythonが利用できるよう用意されています。バージョンは(2.7.x / 3.4.x)です。 ただ、エックスサーバーは共有レンタルサーバーなので、管理者権限がありません。そのため、パッケージ管理ツールのpipが使え...

python3のインストール

サーバー上でbrewコマンドを使用してpython3をインストールします。

インストール後にpython3とpip3がインストールされているか確認します。

pipenvのインストール

pipenvをインストールします。

Djangoを動かす

ローカルPC上で行う作業

自分のPCでpipenvをインストールします。

プロジェクト用のフォルダを作成します。

pipenvでDjangoをインストールします。

pipenvの仮想環境内に入ります。

Djangoのプロジェクトを作成します。xserver_testとしてみました。

testappという名前のアプリケーションを作成します。

setting.pyにアプリケーションを登録します。

xserver_testフォルダ内のurls.pyをtestappフォルダ内のurls.pyを参照するように変更します。

testapp内のurls.pyを新規作成します。

testapp内のviews.pyを変更してhttpレスポンスを返すようにします。

runserverコマンドを入力して http://127.0.0.1:8000/ にアクセスします。

Hello world!と表示されれば成功です。

settings.pyのDEBUGとALLOWED_HOSTSを変更します。

あくまで一時的に公開する設定値です。
正式に公開する場合はDjangoドキュメントのデプロイチェックリストの内容を
参考にしてsettings.pyを変更してください。

エックスサーバーで行う作業

事前準備でサブドメインを作成していると、public_html内に
サブドメイン名フォルダが作成されています。

Teratermでサブドメイン名フォルダに移動してtestフォルダを作成します。

ローカルPC上で作成したファイルをエックスサーバーのtestフォルダに転送します。
エックスサーバーのファイルマネージャーを利用してファイルをアップロードするか
WinSCPなどのFTPクライアントを利用してファイルを転送します。

ファイル転送後のtestフォルダの構成は以下のようになります。

Teraterm上でpipenvを利用して仮想環境を作成します。
PipfileとPipfile.lockを元に必要なモジュールを仮想環境に自動的にインストールします。

pipenvのvenvオプションで仮想環境のパスをメモしておきます。

testフォルダに.htaccessファイルをファイルマネージャーで作成するか
またはローカルで作成して、FTPクライアントで転送します。

index.cgiファイルをファイルマネージャーで作成するか
またはローカルで作成して、FTPクライアントでtestフォルダに転送します。
1行目には先程メモした仮想環境のパスをシェバンとして設定します。
文字コードはUTF-8で保存して、パーミッションを755に設定します。

サブドメイン.ドメイン/test にブラウザでアクセスして
Hello world!と表示されればDjangoが動いていることを確認できます。

追加設定

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

エックスサーバーでDjangoのWebアプリを公開する方法について|teratail
エックスサーバーでDjangoのWebアプリを公開したいと思っているのですが、なかなか上手く行きません。現時点では、エックスサーバーにDjangoのインストールができたので、試しにサイトを表示させようと思ったのですが、「500 Internet Sever Error」

 

 

コメント

  1. ゆあさん より:

    突然失礼いたします。書き間違い?を発見したので報告させていただきます。
    事前準備>pipenvのインストールのコマンドがpython3→pip3かと思います。初心者なので間違っていたら無視してください。

    このサイトがとても見やすくて、いつも参考にさせていただいております。
    残しておく必要もないと思うのでコメント自体は削除しちゃってかまいません。
    失礼しました。

  2. くに より:

    はじめまして。非常にわかりやすい解説ありがとうございます。
    xserver 上に’pip3 install pipenv’を行ったところ下記のような表示がでました。

    PermissionError: [Errno 13] 許可がありません: ‘/etc’

    権限で777を付与しても上記の反応がみられます。検索しても
    わからなかったのでご教示いただけますと幸いです。

    • くに より:

      ローカルからxserver上に持ってきたtestディレクトリで、brew install pipenvを行ったところインストールできました。
      ただ、最後まで進んでサブドメイン/testをやりましたが、500でした。。。何が原因かさっぱりわからなきのですがbrewでインストールした事が原因と考えられるでしょうか?

      • くにさん
        コメントありがとうございます。

        >brewでインストールした事が原因と考えられるでしょうか?
        brewでpipenvをインストールしたことでエラーが発生している可能性はあります。

        また、私が導入途中でステータスコード500のエラーになったときは、index.cgiの書き方が間違っている時に発生しました。
        index.cgiの内容もあわせて確認してみたほうがよいと思います。

  3. なおき より:

    Windows10環境で手順を実行し、ローカルでのHello world!には成功しましたが、
    エックスサーバーにChromeでアクセスしたところ500エラーでした。

    手順を実行するに際しては特に引っ掛かった部分もなかったのですが、

    シェバンに設定する『 [pipenv –venv]の戻り値 /bin/python3.7』について、
    作業時には3.8.5(*)がインストールされましたので、3.8に記述を変えましたが、
    そもそも /bin に python3.7ないし3.8 というファイルがありません。(FFFTPで確認)
    原因として何が考えられるでしょうか?

    *TeraTermからpython3 -V で3.8.5がインストールされているのは確認済み

    • なおき より:

      すいません、自己解決しました。
      index.cgiをUTF-8で保存する際に、BOMをつけていたのが原因だったようです。