エックスサーバーで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をつけていたのが原因だったようです。

  4. 大野 より:

    参考にさせていただいています。

    ご存知でしたら教えてください。

    Linuxbrewをインストールすると、以下3つのエラーが出ます。

    私はX10のプランなのですが、同じでしょうか?
    何か原因ご存知でしたら教えてください。

    curlの更新も試しましたが、バージョンは7.29.0の変更できずでした…
    参考
    https://kengotakimoto.com/post-1894/#toc4

    エラー
    ———————–
    Error: Please update your system cURL.
    Minimum required version: 7.41.0
    Your cURL version: 7.29.0
    Your cURL executable: /usr/bin/curl

    Error: Please update your system Git.
    Minimum required version: 2.7.0
    Your Git version: 1.8.3.1
    Your Git executable: /usr/bin/git

    Error: Curl must be installed and in your PATH!
    Failed during: /home/loosecarrot/.linuxbrew/bin/brew update –force
    ———————–

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

      私もX10のプランを使用しています。

      >curlの更新も試しましたが、バージョンは7.29.0の変更できずでした…
      参考先のURLを確認すると /home/[サーバーID]/opt に最新のcurlをインストールしています。
      エラー内容を確認すると /usr/bin/curl のcurlを実行しているのでバージョンが古いままになっていると思います。

      シェル変数PATHに /home/[サーバーID]/opt を /usr/bin/ より前に追加してcurlを実行すれば、インストールした最新のcurlが使われるのではないかなと思います。

  5. なおき より:

    エックスサーバーに付属のMySQLを利用しようとすると、pipenv install 時にmysqlclientのインストールが失敗します。

    [サーバー名 src]$ pipenv install mysqlclient
    Installing mysqlclient…
    Error: An error occurred while installing mysqlclient!
    Error text: Collecting mysqlclient
    Using cached mysqlclient-2.0.3.tar.gz (88 kB)

    ERROR: Command errored out with exit status 1:
    command: /home/サーバー名/ドメイン/public_html/src/.venv/bin/python -c ‘import sys, setuptools, tokenize; sys.argv[0] = ‘”‘”‘/tmp/pip-install-3r8htlu7/mysqlclient/setup.py'”‘”‘; __file__='”‘”‘/tmp/pip-install-3r8htlu7/mysqlclient/setup.py'”‘”‘;f=getattr(tokenize, ‘”‘”‘open'”‘”‘, open)(__file__);code=f.read().replace(‘”‘”‘\r\n'”‘”‘, ‘”‘”‘\n'”‘”‘);f.close();exec(compile(code, __file__, ‘”‘”‘exec'”‘”‘))’ egg_info –egg-base /tmp/pip-pip-egg-info-1eca8uz0
    cwd: /tmp/pip-install-3r8htlu7/mysqlclient/
    Complete output (15 lines):
    /bin/sh: mysql_config: コマンドが見つかりません
    /bin/sh: mariadb_config: コマンドが見つかりません
    /bin/sh: mysql_config: コマンドが見つかりません
    Traceback (most recent call last):
    File “”, line 1, in
    File “/tmp/pip-install-3r8htlu7/mysqlclient/setup.py”, line 15, in
    metadata, options = get_config()
    File “/tmp/pip-install-3r8htlu7/mysqlclient/setup_posix.py”, line 70, in get_config
    libs = mysql_config(“libs”)
    File “/tmp/pip-install-3r8htlu7/mysqlclient/setup_posix.py”, line 31, in mysql_config
    raise OSError(“{} not found”.format(_mysql_config_path))
    OSError: mysql_config not found
    mysql_config –version
    mariadb_config –version
    mysql_config –libs
    —————————————-
    ERROR: Command errored out with exit status 1: python setup.py egg_info Check the logs for full command output.

    This is likely caused by a bug in mysqlclient. Report this to its maintainers.
    ✘ Installation Failed

    同様のトラブルに見舞われている方が結構いるようで、root権限が必要なディレクトリにあるmysql_configを編集することでの解決策しか見つかりませんでした。

    しかし、エックスサーバーはroot権限が無いのでmysql_configファイルが、そもそも見えてません。

    Djangoをmysqlclient以外のdb.backendsが利用可能なバージョンまで落とす以外に方法はないのでしょうか?

    もしも解決策をご存じでしたらご教授いただければ幸いです。