だてブログ

ねことテクと趣味のブログ

一般権限でWebディレクトリ外にDjangoパスを通す方法

経緯

root権限を持っていないユーザーは環境依存の強いDjangoのデプロイにとても苦労すると思います。(例えばhttpd.confでAliasを書いたり)
そこで、少し遠回りではありますが、cgiとあるライブラリを使って遠回りにDjangoパスを通す方法をここにするそうと思います。

参照

【apache】拡張子なしのファイルをCGIスクリプトとして扱う

方法

1. 上のdjango-cgiのファイルをdjangoのアプリ名と同じ名前にしてhtmlから見える位置に置く。 (例)

$ cd /var/www/
$ tree
html
├── djangoapp(元 django-python3.cgi)
└── .htaccess
djangoapp
├── djangoapp
├── manage.py
└── __init__.py       ...

2. /var/www/html/djangoapp(元 django-python3.cgi)のファイルを幾つか書き換える

(1~2行目)
#!/home/user/.pyenv/versions/envname/bin/python
# encoding: utf-8
↓↓↓↓↓
#!pythonのbinパス($ which pythonで調べる)
# encoding: utf-8

(27~30行目)
# Change this to the directory above your site code.
# sys.path.append("/home/user/local/lib/python3.4/site-packages")
# sys.path.append("/djangoproject/src")
↓↓↓↓↓
# Change this to the directory above your site code.
sys.path.append(pythonのsite-packagesのある場所)
sys.path.append(djangoアプリのある場所:/var/www/djangoapp)

(89~92行目)
# Change to the name of your settings module
os.environ['DJANGO_SETTINGS_MODULE'] = 'application.settings'
from django.core.wsgi import get_wsgi_application
run_with_cgi(get_wsgi_application())
↓↓↓↓↓
# Change to the name of your settings module
os.environ['DJANGO_SETTINGS_MODULE'] = 'djangoapp.settings' ← アプリ名
from django.core.wsgi import get_wsgi_application
run_with_cgi(get_wsgi_application())

3. .htaccess (/var/www/html/.htaccess)を編集(下を追加)

<FilesMatch "^[^\.]+$">
    SetHandler cgi-script
</FilesMatch>

4. djangoのstaticファイルをhtmlから見える位置に置き、settings.pyのSTATIC_URL, STATIC_ROOTも変更