私は、Django のシームレスな展開の単一サーバーへの質問に対する Ken Cochrane の回答に従っています。私は基本的に oneと oneの 2 つの実稼働サーバーを実行しており、nginx は次のように構成されています (不要な詳細を省略しています)。primary
fallback
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
、アップグレードしてからオンに戻します。解決策はほぼ完璧ですが、問題が 1 つあります。CSS ファイルと JS ファイルを収集して圧縮するために django-compressor を使用していますが、2 つのインスタンスが同じ静的ファイル名を持つことが保証されていません。そのため、primary
がダウンしている間、fallback
サーバーはアプリのリクエストを正常に処理しますが、nginx/.../primary/static/
は/.../fallback/static/
.
Django を介して静的ファイル要求をルーティングせずにこの問題を解決する方法はありますか? または、 Django の更新をシームレスに展開するためのより良い方法はありますか? (ダウンタイムをゼロにすることに興味があるため、2 サーバー モデルに魅力を感じました。)