W końcu przeprowadziłem migrację środowiska deweloperskiego z runicorn / nginx do gunicorn / nginx.
Wygodne byłoby replikowanie funkcji automatycznego przeładowywania serwera uruchomieniowego do gunicorn, aby serwer automatycznie uruchamiał się ponownie po zmianie źródła. W przeciwnym razie muszę ręcznie zrestartować serwer za pomocą kill -HUP
.
Jakiś sposób, aby uniknąć ręcznego ponownego uruchomienia?
kill -HUP
PID procesu, ale zamiast tego używałbym supervisorctl. Nie myśl jednak, że to się bardzo zmienia.Odpowiedzi:
Chociaż jest to stare pytanie, tylko dla spójności - od wersji 19.0 gunicorn ma
--reload
opcję. Dlatego żadne narzędzia innych firm nie potrzebują więcej.źródło
killall -HUP procname
będzie działać dobrze), aby nowi pracownicy uruchomili, a stare bezpiecznie zamkną.Jedną z opcji byłoby użycie --max-requestów, aby ograniczyć każdy powstały proces do obsługi tylko jednego żądania poprzez dodanie
--max-requests 1
do opcji uruchamiania. Każdy nowo utworzony proces powinien widzieć zmiany w kodzie, aw środowisku programistycznym dodatkowy czas uruchamiania na żądanie powinien być znikomy.źródło
pip
pakiet stanie,watchdog
.Bryan Helmig wymyślił to i zmodyfikowałem go do używania
run_gunicorn
zamiastgunicorn
bezpośredniego uruchamiania , aby umożliwić po prostu wycięcie i wklejenie tych 3 poleceń do powłoki w folderze głównym projektu django (z aktywowanym virtualenv):źródło
127.0.0.1:80
razie potrzeby nie zapomnij podać swojego adresu IP lub FQDN i portu .settings.py
,models.py
(wymagane migracji), lub kod źródłowy jakiejś zewnętrznej aplikacji nie w moichwatchmedo
wzorów.Używam git push do wdrażania w środowisku produkcyjnym i konfigurowania haków git do uruchamiania skryptu. Zaletą tego podejścia jest to, że możesz jednocześnie przeprowadzić migrację i instalację pakietu. https://mikeeverhart.net/2013/01/using-git-to-deploy-code/
Następnie utwórz skrypt
/home/git/project_name.git/hooks/post-receive
.Upewnij się
chmod u+x post-receive
i dodaj użytkownika do sudoers. Pozwól mu działaćsudo supervisorctl
bez hasła. https://www.cyberciti.biz/faq/linux-unix-running-sudo-command-without-a-password/Skonfigurowałem z mojego serwera lokalnego / deweloperskiego,
git remote
który umożliwia mi wypychanie na serwer produkcyjnyJako bonus, zobaczysz wszystkie monity podczas działania skryptu. Dzięki temu zobaczysz, czy występuje problem z migracją / instalacją pakietu / restartem nadzorcy.
źródło
#!/bin/bash
jak wspomniano powyżej, zamiast tego,#!/bin/sh
copost-receive
miał przykład Git !