質問: 似たような質問を複数回してしまい申し訳ありません。 今回で最後にします。 さくら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にお金を払ってしまったので諦めたくはありません。 どうかご教授のほどよろしくお願いします。
回答: 根本的に 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 WSGIProcessGroup yourapp SetHandler wsgi-script AddHandler wsgi-script .wsgi Require all granted ``` * `yourapp`: アプリのニックネーム。自由に決めてOK * `mickey`: Djangoアプリを起動するときのユーザー名メインで使っているユーザーアカウントをしているするとよいでしょう * `/yoururl`: Djangoアプリを公開するURL。この場合 http://yourdomain.example.com/yoururl/ がDjangoアプリのURLになります。http://yourdomain.example.com/ で公開したい場合は `/` とします がんばってください。