마지막으로 개발 환경을 runserver에서 gunicorn / nginx로 마이그레이션했습니다.
runserver의 자동 재로드 기능을 gunicorn에 복제하는 것이 편리하므로 소스가 변경되면 서버가 자동으로 다시 시작됩니다. 그렇지 않으면 수동으로 서버를 다시 시작해야합니다 kill -HUP
.
수동 재시작을 피할 수있는 방법이 있습니까?
마지막으로 개발 환경을 runserver에서 gunicorn / nginx로 마이그레이션했습니다.
runserver의 자동 재로드 기능을 gunicorn에 복제하는 것이 편리하므로 소스가 변경되면 서버가 자동으로 다시 시작됩니다. 그렇지 않으면 수동으로 서버를 다시 시작해야합니다 kill -HUP
.
수동 재시작을 피할 수있는 방법이 있습니까?
답변:
이것은 오래된 질문이지만 일관성을 위해 버전 19.0 gunicorn에는 --reload
옵션 이 있습니다. 따라서 더 많은 타사 도구가 필요하지 않습니다.
killall -HUP procname
잘 작동 함)를 보내 새로운 작업자를 시작하고 이전 작업자를 정상적으로 종료하도록 말합니다 .
한 가지 옵션은 --max-requests 를 사용 --max-requests 1
하여 시작 옵션 에 추가 하여 생성 된 각 프로세스를 하나의 요청 만 제공하도록 제한하는 것 입니다. 새로 생성 된 모든 프로세스는 코드 변경 사항을 확인해야하며 개발 환경에서는 요청 당 추가 시작 시간이 무시할 수 있어야합니다.
pip
가능한 패키지 가 필요하더라도 더 좋습니다 watchdog
.
브라이언 Helmig는 이 함께 와서 나는 그것을 사용하도록 수정 run_gunicorn
실행하는 대신 gunicorn
단지 인하가 가능하도록, 직접 (당신의 VIRTUALENV 활성화와 함께) 장고 프로젝트 루트 폴더에있는 쉘에이 3 개 명령을 붙여 넣습니다 :
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
127.0.0.1:80
필요한 경우 대신 IP 또는 FQDN 및 포트를 배치하는 것을 잊지 마십시오 .
settings.py
, models.py
(마이그레이션 필요) 또는 watchmedo
패턴에 없는 일부 외부 앱의 소스 코드를 변경할 때뿐입니다 .
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
보너스로 스크립트가 실행되는 동안 모든 프롬프트를 볼 수 있습니다. 따라서 마이그레이션 / 패키지 설치 / 감독자 다시 시작에 문제가 있는지 확인할 수 있습니다.
#!/bin/bash
위 대신에 언급 한 바와 같이이의 #!/bin/sh
어떤 망할 놈의 것입니다 post-receive
예를했다!
kill -HUP
프로세스 PID가 아니라 supervisorctl을 대신 사용합니다. 하지만 이것이 많이 변한다고 생각하지 마십시오.