回答編集履歴
3
文章の軽微修正
answer
CHANGED
@@ -27,7 +27,7 @@
|
|
27
27
|
|
28
28
|
---
|
29
29
|
|
30
|
-
で
|
30
|
+
でやっと本題ですが、mod_wsgi を使うという前提で質問に回答します。
|
31
31
|
|
32
32
|
> どのディレクトリにアプリを置くべきか
|
33
33
|
|
@@ -35,16 +35,16 @@
|
|
35
35
|
|
36
36
|
> パーミッションの設定はどうすべきか
|
37
37
|
|
38
|
-
|
38
|
+
Apache が WSGIの設定ファイル `/home/centos/myapp/wsgi.py` にアクセスできるようにする必要があります。
|
39
39
|
|
40
40
|
CentOS7 だとホームディレクトリのパーミッションは 700 になっていると思いますので、`chmod 755 /home/centos` で他ユーザーに読み込み・実行権限を付与してください。(もし他のユーザーにホームディレクトリを見られては困るのであれば、Djangoアプリのディレクトリを他の場所に移動してください)
|
41
41
|
|
42
|
-
同様に `/home/centos/myapp` に
|
42
|
+
また、すでにそうなっているはずですが、同様に `/home/centos/myapp` に others の`rx`権限が、`/home/centos/myapp/wsgi.py` に`r`権限があるかも念のため確認してください。
|
43
43
|
|
44
|
-
ちなみに SQLite3 のデータ
|
44
|
+
ちなみに上記の mod_wsgi の設定例ではDjangoアプリを一般ユーザー(centosさん)権限で動かします。(これを daemon mode といいます)そのため SQLite3 のデータファイルは、apacheではなく所有者(centos)として読み書きを行うので、他ユーザーからの書き込みを許可してあげる必要はありません。
|
45
45
|
|
46
|
-
|
46
|
+
daemon mode で一般ユーザー権限で動かすことにより、万が一 Django アプリに侵入された際に他のプロセスやOSごと乗っ取られるリスクを最小限にすることができセキュアです。
|
47
47
|
|
48
48
|
> apacheをどのユーザで起動すべきか
|
49
49
|
|
50
|
-
|
50
|
+
デフォルト(`apache`)のまま変える必要はないと思います。
|
2
パーミッション周りの誤りを修正
answer
CHANGED
@@ -19,6 +19,7 @@
|
|
19
19
|
|
20
20
|
<Directory /home/centos/myapp>
|
21
21
|
WSGIProcessGroup myapp
|
22
|
+
Require all granted
|
22
23
|
</Directory>
|
23
24
|
```
|
24
25
|
|
@@ -34,14 +35,16 @@
|
|
34
35
|
|
35
36
|
> パーミッションの設定はどうすべきか
|
36
37
|
|
37
|
-
上記の mod_wsgi の設定例ではDjangoアプリを一般ユーザー(centosさん)権限で動かし
|
38
|
+
上記の mod_wsgi の設定例ではDjangoアプリを一般ユーザー(centosさん)権限で動かします。(これを daemon mode といいます)ですので、Apache が WSGIの設定ファイル `/home/centos/myapp/wsgi.py` にアクセスできるようにする必要があります。
|
38
39
|
|
39
|
-
|
40
|
+
CentOS7 だとホームディレクトリのパーミッションは 700 になっていると思いますので、`chmod 755 /home/centos` で他ユーザーに読み込み・実行権限を付与してください。(もし他のユーザーにホームディレクトリを見られては困るのであれば、Djangoアプリのディレクトリを他の場所に移動してください)
|
40
41
|
|
41
|
-
|
42
|
+
同様に `/home/centos/myapp` に読み込み・実行権限が、`/home/centos/myapp/wsgi.py` に読み込み権限があるかも念のため確認してください。
|
42
43
|
|
43
|
-
|
44
|
+
ちなみに SQLite3 のデータベースファイルは、apacheではなく所有者(centos)として読み書きを行うので、他ユーザーからの書き込みを許可してあげる必要はありません。
|
44
45
|
|
46
|
+
デプロイにあたり特別な設定が要らない、つまり開発したものをそのまま本番環境(Apache)で動かせるので運用が楽です。さらに一般ユーザー権限で動かすことで、万が一 Django アプリに侵入された際に他のプロセスやOSごと乗っ取られるリスクを最小限にすることができセキュアです。
|
47
|
+
|
45
48
|
> apacheをどのユーザで起動すべきか
|
46
49
|
|
47
|
-
|
50
|
+
意図がよくわかりませんが、デフォルト(apache)のまま変える必要はないと思います。
|
1
文章の軽微修正
answer
CHANGED
@@ -2,23 +2,23 @@
|
|
2
2
|
|
3
3
|
Python には [WSGI](https://ja.wikipedia.org/wiki/Web_Server_Gateway_Interface) という独自のWebアプリケーション用インタフェースが用意されています。Django もこの WSGI を使うことをオススメしています。
|
4
4
|
|
5
|
-
一般的には `Webサーバ --- WSGIサーバー --- WSGIアプリ(Django)` という構成を取るのですが、Apache には mod_wsgi という便利モジュールが用意されていて、これを入れるだけで WSGIサーバーなしで WSGIアプリを動かすことができます。
|
5
|
+
一般的には `Webサーバー --- WSGIサーバー --- WSGIアプリ(Django)` という構成を取るのですが、Apache には mod_wsgi という便利モジュールが用意されていて、これを入れるだけで WSGIサーバーなしで WSGIアプリを動かすことができます。
|
6
6
|
|
7
7
|
つまり `Apache(mod_wsgi) --- Django` という構成です。これをおすすめします。
|
8
8
|
|
9
9
|
おおまかな手順は次の通りです
|
10
10
|
|
11
11
|
1. **Python3.6用**の mod_wsgi をインストール (pipを使うのが無難?)
|
12
|
-
|
12
|
+
1. Apacheの設定ファイルを編集し、mod_wsgi を読み込ませる
|
13
|
+
1. Apacheの設定ファイルを編集し、Djangoアプリの設定を入れる
|
13
14
|
|
14
15
|
```httpd.conf
|
16
|
+
# Djangoアプリ設定例
|
15
17
|
WSGIDaemonProcess myapp user=centos group=wheel threads=5
|
16
18
|
WSGIScriptAlias /myapp /home/centos/myapp/wsgi.py
|
17
19
|
|
18
20
|
<Directory /home/centos/myapp>
|
19
21
|
WSGIProcessGroup myapp
|
20
|
-
SetHandler wsgi-script
|
21
|
-
AddHandler wsgi-script .wsgi
|
22
22
|
</Directory>
|
23
23
|
```
|
24
24
|
|