naritoブログ

【お知らせ】
新ブログができました。今後そちらで更新し、このサイトは更新されません(ウェブサイト自体は残しておきます)
このブログの内容に関してコメントしたい場合は、新ブログのフリースペースに書き込んでください

このブログの内容を新ブログに移行中です。このブログで見つからない記事は、新ブログにありま

Django、静的ファイルのデプロイ(Apache)

約981日前 2016年9月17日9:16
プログラミング関連
Django Python
Djangoで、ユーザ登録機能(汎用ビュー)
https://torina.top/detail/286/
を、サーバにデプロイしてみます。

既にPythonとmod_wsgiは入っていて、デプロイすれば動かせる状態とします。

まだ動かせない方は、
さくらVPS(CentOS) Python3.5とmod_wsgiの導入
https://torina.top/detail/151/

などを参考に構築して、どうぞ。

サーバ環境はさくらVPSのCentOS6
mod_wsgi(4.5.6ですが、多分低くても大丈夫)
Apache2.2
Python3.5
です。

結論から言うと、DjangoのをApache上で動かす場合、以下のようなconfファイルを作成する必要があります。
書き方や設定はいくつかあると思います。

LoadModule wsgi_module modules/mod_wsgi.so
WSGISocketPrefix run/wsgi
<VirtualHost *:80>
ServerName test.torina.top

WSGIDaemonProcess test.torina python-path=/home/django/testproject
WSGIProcessGroup test.torina.top
WSGIScriptAlias / /home/django/testproject/testproject/wsgi.py

Alias /static/ /home/django/testproject/static/

<Directory /home/django/testproject/static>
Order deny,allow
Allow from all
</Directory>

</VirtualHost>


ここで大事なのは以下の1行です。
Alias設定で、/static/を/home/django/testproject/static/ へと紐づけています。

Alias /static/ /home/django/testproject/static/


なぜこんなことをしているのかというと、
DEBUGをTrueにしrunserverする開発環境等はいいのですが、本番環境でDEBUGをFalseにすると
/static/ (settings.pyのSTATIC_URL)は各アプリケーション内のstaticディレクトリや、STATICFILES_DIRSを読みにいきません。
(非効率であったり、セキュリティ上の理由です。)
そのため、/static/等の静的ファイルは別の方法で配信する必要があります。それをしているのが、以下です。

Alias /static/ /home/django/testproject/static/


サーバ全体で管理している、静的ファイルの置き場等があるならばそちらを指定しましょう。
むしろこちらがおすすめです。

Alias /static/ /var/www/static


それをするための準備が少し必要です。まずsettings.pyに、以下のように追加します。

# 今回の例
STATIC_ROOT = os.path.join(BASE_DIR, "static")

# すぐ上のAlias設定ならば、以下
# STATIC_ROOT = "/var/www/static"


そして、以下のコマンドを入力します。
すると、STATIC_ROOTに各アプリケーション(admin等もちゃんと含みます)のstaticディレクトリや、STATICFILES_DIRSの内容が移されます。

python manage.py collectstatic


そして最後にSTATIC_ROOTに向かって、ApacheならAliasの設定をする、という流れです。


今回、/home/djangoにプロジェクトを置いています。
できれば、Pythonコードは Web サーバーのドキュメントルート下に置かないようにしておくことをお勧めします。