테스트 서버에 애플리케이션을 배포하는 중 오류가 발생했습니까?

테스트 서버에 애플리케이션을 배포하는 중 오류가 발생했습니까?

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 매개변수를 제거하는 것이었습니다.

수정해야 할 코드는 코드의 gunicorn 부분입니다.

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'

관련 정보