Я следую за Ken Cochrane's answer на вопрос Seamless deployment of Django to single server. Я в основном работает два производственных серверов, один primary
и один fallback
, и мой Nginx сконфигурирован следующим образом (опуская несущественные детали):Обработка различных статических файлов между средами при развертывании обновлений для первичных/резервных серверов Django
upstream app-primary {
server localhost:12345;
server localhost:12346 backup;
}
server {
root /home/fraxtil/app/primary;
location /static/ {
alias /home/fraxtil/app/primary/static/;
}
location/{
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Host $http_host;
proxy_redirect off;
proxy_pass http://app-primary;
}
}
При нажатии обновления, обновить fallback
, затем отключить primary
, обновление его и снова включите. Решение - это почти, но есть одна проблема: я использую django-compressor для сбора и сжатия моих CSS и JS-файлов, и у обоих экземпляров не гарантируется наличие одинаковых статических имен файлов. Таким образом, пока primary
не работает, сервер fallback
обрабатывает запросы приложений просто отлично, но nginx ищет статические файлы в /.../primary/static/
вместо /.../fallback/static/
.
Есть ли способ решить эту проблему без маршрутизации статических запросов файлов через Django? В качестве альтернативы существует ли лучше способ беспрепятственного развертывания обновлений Django? (Мне интересно иметь нулевое время простоя, поэтому модель с двумя серверами заманила меня.)