2015-12-02 108 views
1

我有一個django應用程序,我使用gunicorn來運行它。我的腳本啓動gunicorn看起來像這樣:如何使用django作爲非root用戶運行gunicorn

django_path=/path/to/your/manage.py 
settingsfile=my_name 
workers=2 

cd $django_path 
exec gunicorn --env DJANGO_SETTINGS_MODULE=app.$settingsfile app.wsgi --workers=$workers & 

這個工程,當我執行它。然而,當我在projectfolder (cd /path/to/your/manage.py && ll)看我的數據庫中,我得到這個:

-rw-r--r-- 1 root root 55K Dec 2 13:33 db.sqlite3

這意味着我需要的根在未經許可做就DATABSE anyhting(例如做一個createuser)。所以我看了看周圍#2和嘗試了幾件事情:

  • 我整過的腳本在/etc/init.d/rc.local
  • 頂部然後我把腳本作爲腳本文件gunicorn_script.sh放於/etc/init.d,做了/usr/sbin/update-rc.d -f gunicorn_script.sh defaults
  • 最後,我想在rc.local文件的頂部把這個命令:su debian -c '/etc/init.d/gunicorn_script.sh start'執行gunicorn_script作爲Debian的用戶

他們都開始了我的應用程序,但親數據庫依然存在(僅限於root權限)。

那麼如何以非root用戶身份運行該腳本?

+1

嗨保羅。這是一篇關於以非root用戶身份運行Django,Nginx,Gunicorn的好文章:http://michal.karzynski.pl/blog/2013/06/09/django-nginx-gunicorn-virtualenv-supervisor/ –

回答

0

好的,所以我發現db.sqlite3將在django中通過makemigrationsmigrate命令在我從根目錄運行時創建。

因此,權限的問題。我切換到Debian並從那裏跑命令等瞧:

-rw-r--r-- 1 debian debian 55K Dec 2 13:33 db.sqlite3

1

我在我的項目文件夾中有一個腳本,用於運行gunicorn。這裏是一個標題:

#!/bin/bash 
CUR_DIR=$(dirname $(readlink -f $0)) 
WORK_DIR=$CUR_DIR 
USER=myusername 
PYTHON=/usr/bin/python3 
GUNICORN=/usr/local/bin/gunicorn 

sudo -u $USER sh -c "cd $WORK_DIR; $PYTHON -W ignore $GUNICORN -c $WORK_DIR/config/gunicorn/gunicorn.conf.py --chdir $WORK_DIR myappname.wsgi:application 

更新: 把下面的代碼到文件/etc/init.d/myservice,使root業主身份,併爲業主+x權限。

#!/bin/bash 
#chkconfig: 345 95 50 
#description: Starts myservice 
if [ -z "$1" ]; then 
echo "`basename $0` {start|stop}" 
    exit 
fi 

case "$1" in 
start) 
    sh /path/to/run_script.sh start & 
;; 

stop) 
    sh /path/to/run_script.sh stop 
;; 
esac 

現在你可以使用sudo service myservice start

我很抱歉,我不熟悉systemd還,但它也可以是更容易。

+0

好的謝謝,但它生活在你的項目文件夾?那麼當系統啓動時如何運行它?也許我忘了提到我希望腳本在系統啓動時運行? – Tom

+0

更新了init.d – baldr

+0

的後添加腳本,這些腳本幫助我設置了一個運行gunicorn的腳本,但是我發現了一個不同的解決方案來解決我的問題 – Tom

相關問題