codememo

gunicorn 소스 변경 시 자동 재로드

tipmemo 2023. 7. 17. 21:08
반응형

gunicorn 소스 변경 시 자동 재로드

마지막으로 개발 환경을 runserver에서 gunicorn/nginx로 마이그레이션했습니다.

runserver의 자동 재로드 기능을 gunicorn으로 복제하여 소스가 변경될 때 서버가 자동으로 다시 시작되도록 하는 것이 편리합니다.그렇지 않으면 서버를 수동으로 재시작해야 합니다.kill -HUP.

수동으로 다시 시작하지 않을 방법이 있습니까?

이 질문은 오래된 질문이지만 버전 19.0 이후로 알아야 합니다.gunicorn선택권이 있습니다.따라서 이제 타사 툴이 필요하지 않습니다.

한 가지 옵션은 --max-requests를 사용하여 생성된 각 프로세스를 다음을 추가하여 하나의 요청만 처리하도록 제한하는 것입니다.--max-requests 1시작 옵션으로 이동합니다.새로 생성된 모든 프로세스는 코드 변경 사항을 확인해야 하며 개발 환경에서 요청당 추가 시작 시간은 무시해도 됩니다.

브라이언 헬미그가 이것을 고안해냈고 저는 이것을 사용하도록 수정했습니다.run_gunicorn시작하는 대신gunicorn직접적으로, 가상 환경이 활성화된 상태에서 이 세 가지 명령어를 django 프로젝트 루트 폴더의 셸에 잘라 붙여넣기만 하면 됩니다.

pip install watchdog -U
watchmedo shell-command --patterns="*.py;*.html;*.css;*.js" --recursive --command='echo "${watch_src_path}" && kill -HUP `cat gunicorn.pid`' . &
python manage.py run_gunicorn 127.0.0.1:80 --pid=gunicorn.pid

git push를 사용하여 운영 환경에 배포하고 git hooks를 설정하여 스크립트를 실행합니다.이 접근 방식의 장점은 마이그레이션과 패키지 설치를 동시에 수행할 수 있다는 것입니다.https://mikeeverhart.net/2013/01/using-git-to-deploy-code/

mkdir -p /home/git/project_name.git
cd /home/git/project_name.git
git init --bare

그런 다음 스크립트를 만듭니다./home/git/project_name.git/hooks/post-receive.

#!/bin/bash
GIT_WORK_TREE=/path/to/project git checkout -f
source /path/to/virtualenv/activate
pip install -r /path/to/project/requirements.txt
python /path/to/project/manage.py migrate
sudo supervisorctl restart project_name

꼭 해주세요!chmod u+x post-receive사용자를 sudoers에 추가합니다.실행 허용sudo supervisorctl비밀번호 없이https://www.cyberciti.biz/faq/linux-unix-running-sudo-command-without-a-password/

로컬/개발 서버에서 다음을 설정했습니다.git remote운영 서버에 푸시할 수 있습니다.

git remote add production ssh://user_name@production-server/home/git/project_name.git

# initial push
git push production +master:refs/heads/master

# subsequent push
git push production master

스크립트가 실행 중일 때 모든 프롬프트를 볼 수 있습니다.따라서 마이그레이션/패키지 설치/감독자 재시작에 문제가 없는지 확인할 수 있습니다.

언급URL : https://stackoverflow.com/questions/12773763/gunicorn-autoreload-on-source-change

반응형