CentOS 7テストサーバーにdjangoアプリケーションをデプロイするのに問題があります。 Minicondaは、最初にサーバーのルート構成ファイルを介してインストールされた後、アプリケーションのコピーが実行され、condaコマンドによって生成された環境が1002:1002グループにアプリケーションとして追加されます。
その後、Gunicornとアプリケーションの内部フォルダをアクティブにして755および+x権限を取得し、グループ1002:1002を追加するbashスクリプトを公開しました。
ただし、とにかくminiconda3フォルダとdjangoappアプリケーションフォルダを100x:100xグループに追加した後は展開できません。
私のスクリプト
#!/bin/bash
NAME="djangoapp"
DJANGODIR=/var/www/dangoapp
SOCKFILE=/var/www/djangoapp/run/gunicorn.sock
USER=nginx
GROUP=webdata
NUM_WORKERS=5
DJANGO_SETTINGS_MODULE=app.settings
DJANGO_WSGI_MODULE=app.wsgi
TIMEOUT=3600
echo "Starting $NAME as `whoami`"
cd $DJANGODIR
source activate djangoapp
export DJANGO_SETTINGS_MODULE=$DJANGO_SETTINGS_MODULE
export PYTHONPATH=$DJANGODIR:$PYTHONPATH
RUNDIR=$(dirname $SOCKFILE)
test -d $RUNDIR || mkdir -p $RUNDIR
#exec gunicorn ${DJANGO_WSGI_MODULE}:application \
exec /home/adm/miniconda3/envs/ws/bin/gunicorn ${DJANGO_WSGI_MODULE}:application \
--name $NAME \
--workers $NUM_WORKERS \
--user $USER \
--bind=unix:$SOCKFILE \
--timeout $TIMEOUT
Gunicornエラーメッセージが表示されます。
./gunicorn.sh
Starting djangoapp as root
[2018-12-22 00:01:07 -0200] [17316] [INFO] Starting gunicorn 19.7.1
[2018-12-22 00:01:07 -0200] [17316] [INFO] Listening at: unix:/var/www/djangoapp/run/gunicorn.sock (17316)
[2018-12-22 00:01:07 -0200] [17316] [INFO] Using worker: sync
[2018-12-22 00:01:07 -0200] [17323] [INFO] Booting worker with pid: 17323
[2018-12-22 00:01:07 -0200] [17323] [ERROR] Exception in worker process
Traceback (most recent call last):
File "/home/nlt-adm/miniconda3/envs/ws/lib/python3.4/site-packages/gunicorn/arbiter.py", line 578, in spawn_worker
File "/home/nlt-adm/miniconda3/envs/ws/lib/python3.4/site-packages/gunicorn/workers/base.py", line 126, in init_process
File "/home/nlt-adm/miniconda3/envs/ws/lib/python3.4/site-packages/gunicorn/workers/base.py", line 135, in load_wsgi
File "/home/nlt-adm/miniconda3/envs/ws/lib/python3.4/site-packages/gunicorn/app/base.py", line 67, in wsgi
File "/home/nlt-adm/miniconda3/envs/ws/lib/python3.4/site-packages/gunicorn/app/wsgiapp.py", line 65, in load
File "/home/nlt-adm/miniconda3/envs/ws/lib/python3.4/site-packages/gunicorn/app/wsgiapp.py", line 52, in load_wsgiapp
File "/home/nlt-adm/miniconda3/envs/ws/lib/python3.4/site-packages/gunicorn/util.py", line 352, in import_app
File "/var/www/djangoapp/app/wsgi.py", line 12, in <module>
from django.core.wsgi import get_wsgi_application
ImportError: No module named 'django'
[2018-12-22 00:01:07 -0200] [17323] [INFO] Worker exiting (pid: 17323)
[2018-12-22 00:01:07 -0200] [17316] [INFO] Shutting down: Master
[2018-12-22 00:01:07 -0200] [17316] [INFO] Reason: Worker failed to boot.
編集する:スクリプトなしでgunicornでテストされ、動作します! ...
gunicorn --bind 0.0.0.0:8000 djangoapp.wsgi:application
[2018-12-22 01:47:50 -0200] [17869] [INFO] Starting gunicorn 19.7.1
[2018-12-22 01:47:50 -0200] [17869] [INFO] Listening at: http://0.0.0.0:8000 (17869)
[2018-12-22 01:47:50 -0200] [17869] [INFO] Using worker: sync
[2018-12-22 01:47:50 -0200] [17872] [INFO] Booting worker with pid: 17872
^C[2018-12-22 01:48:15 -0200] [17869] [INFO] Handling signal: int
[2018-12-21 21:48:15 -0600] [17872] [INFO] Worker exiting (pid: 17872)
[2018-12-22 01:48:15 -0200] [17869] [INFO] Shutting down: Master
この問題をどのように解決できますか?
答え1
最初は、gunicornのbash実行スクリプトでこの問題を解決する方法を見つけました。見つかった解決策は、minicondaの環境実行が許可されていないため、$ USERパラメータを削除することでした。
修正するコードはコードのグニコーン部分です。
exec gunicorn ${DJANGO_WSGI_MODULE}:application \
--name $NAME \
#--user $USER
--workers $NUM_WORKERS \
--bind $PORT \
--bind=unix:$SOCKFILE \
--timeout $TIMEOUT
--access-logfile - $LOGDIR \
--access-logformat '"%(r)s" %(s)s %(b)s'