質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

89.10%

さくらVPSにDjango製アプリのデプロイ

解決済

回答 1

投稿

  • 評価
  • クリップ 2
  • VIEW 2,528

mickey

score 26

似たような質問を複数回してしまい申し訳ありません。
今回で最後にします。

さくらVPS
CentOS6
Django1.11.1
python3.6.1

質問は2つあります。

1.Django プロジェクトを置く場所とDocumentRootの変更

公式には/var/www/html/以下に置くべきではないと書いてありますが、/var/www/site/というディレクトリを作ってここでdjango-admin startproject xxx としても大丈夫ですか?
また上記のようにした場合、DocumentRootの記述を変更しなくてはいけないのですか?もし変更しない場合/var/www/site/にあるプロジェクトを特定のドメイン(トップページ)にアクセスされたときに表示するためにはどこでどう記述するのでしょう?

2.WEBサーバー上におけるDjangoアプリの起動

こちらを見てpython3とmod_wsgiをインストールしました。このあとにDjangoを入れて1で質問したように/var/www/site/にプロジェクトを配置していくのですが、配置しただけでもうアプリは動いている状態になるのですか?ローカル開発環境ではrunserverをしてはじめて動作を確認できるのですが、本番ではどういう仕組になっているのかわかりません。

さくらVPSについてはドットインストールに沿って設定し、pythonやdjango等のインストールについては検索して試行錯誤しながら入れています。ただpython3をいれても作業用ユーザーのときのみpython3.6 -Vでバージョンが表示され、root権限時にはpython3.6 command not foundと表示され(pip, virtualenvも同様)、その度に色々いじってわからなくなってまたOSの再インストールといいったことをもう15回以上繰り返しています。

長い期間かけてはじめてまともに最後までサイトを作ったのですが、まさかサーバーに公開するのがこれほどまでに難しいことだとは思っていませんでした。でももうさくらVPSにお金を払ってしまったので諦めたくはありません。

どうかご教授のほどよろしくお願いします。

  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 過去に投稿した質問と同じ内容の質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 1

checkベストアンサー

+4

根本的に Django + mod_wsgi の動作を勘違いしているような気がします。

Django で作ったウェブアプリは、Apache が DocumentRoot 配下にある HTMLや画像ファイルを読み込むのとは異なり、WSGIという仕組みで Apache(mod_wsgi) と Django がやりとりを行います。

// 通常の静的ファイル

[ Apache ] ---ファイルアクセス--→ "/var/www/html/index.html" など


// Django(WSGI)アプリ

[ Apache ]-[ mod_wsgi ] ←-----WSGI-----→ [ Django ]


// Django runserverしたとき

[ Django(テスト用サーバ) ]
↑こいつ単体で動きます

そのため、

  • Django アプリのあらゆるファイルはApache公開ディレクトリ(DocumentRoot等)に置く必要はありませんし、セキュリティの観点から置くべきではありません(/var/www/site/ は公開ディレクトリではないのでOKです)
  • DocumentRoot は Django の動作には全く関係ないので変更する必要はありません

また Apache に WSGI の設定を追加することにより、自動的にDjangoアプリが起動されます。つまり、mod_wsgi をいれて、設定ファイルをちょっと書けばあとは勝手にやってくれるので、本来であればかなり楽な部類になると思います。

その Apache の設定方法は Django 公式リファレンスに載ってます。

Apache と mod_wsgi 環境で Django を使う方法 — Django 1.4 documentation

こんな感じになると思います

WSGIDaemonProcess yourapp user=mickey group=wheel threads=5
WSGIScriptAlias /yoururl /var/www/site/wsgi.py

<Directory /var/www/site>
    WSGIProcessGroup yourapp
    SetHandler wsgi-script
    AddHandler wsgi-script .wsgi
    Require all granted
</Directory>
  • yourapp: アプリのニックネーム。自由に決めてOK
  • mickey: Djangoアプリを起動するときのユーザー名メインで使っているユーザーアカウントをしているするとよいでしょう
  • /yoururl: Djangoアプリを公開するURL。この場合 http://yourdomain.example.com/yoururl/ がDjangoアプリのURLになります。http://yourdomain.example.com/ で公開したい場合は / とします

がんばってください。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

15分調べてもわからないことは、teratailで質問しよう!

  • ただいまの回答率 89.10%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる