Så här distribuerar du statiska filer¶
Se även
För en introduktion till användningen av django.contrib.staticfiles
, se Hur man hanterar statiska filer (t.ex. bilder, JavaScript, CSS).
Servering av statiska filer i produktion¶
Den grundläggande beskrivningen av att sätta statiska filer i produktion består av två steg: kör kommandot collectstatic
när statiska filer ändras, ordna sedan så att den samlade katalogen för statiska filer (STATIC_ROOT
) flyttas till servern för statiska filer och serveras. Beroende på aliaset staticfiles
STORAGES
kan filer behöva flyttas till en ny plats manuellt eller så kan metoden post_process
i klassen Storage
ta hand om det.
Som med alla driftsättningsuppgifter ligger djävulen i detaljerna. Varje produktionsinstallation kommer att vara lite annorlunda, så du måste anpassa den grundläggande skissen för att passa dina behov. Nedan finns några vanliga mönster som kan vara till hjälp.
Servera webbplatsen och dina statiska filer från samma server¶
Om du vill servera dina statiska filer från samma server som redan serverar din webbplats kan processen se ut ungefär som följer:
Skicka upp din kod till deployment-servern.
På servern kör du
collectstatic
för att kopiera alla statiska filer tillSTATIC_ROOT
.Konfigurera din webbserver så att den serverar filerna i
STATIC_ROOT
under URL:enSTATIC_URL
. Här är till exempel hur man gör detta med Apache och mod_wsgi.
Du kommer förmodligen att vilja automatisera den här processen, särskilt om du har flera webbservrar.
Servering av statiska filer från en dedikerad server¶
De flesta större Django-webbplatser använder en separat webbserver - dvs. en som inte också kör Django - för att servera statiska filer. Denna server kör ofta en annan typ av webbserver - snabbare men mindre fullfjädrad. Några vanliga val är:
Konfigurationen av dessa servrar omfattas inte av detta dokument; se respektive servers dokumentation för instruktioner.
Eftersom din statiska filserver inte kommer att köra Django måste du ändra distributionsstrategin så att den ser ut ungefär som följer:
När dina statiska filer ändras kör du
collectstatic
lokalt.Skicka din lokala
STATIC_ROOT
upp till den statiska filservern till den katalog som serveras. rsync är ett vanligt val för det här steget eftersom det bara behöver överföra de delar av statiska filer som har ändrats.
Servering av statiska filer från en molntjänst eller CDN¶
En annan vanlig taktik är att servera statiska filer från en molnlagringsleverantör som Amazons S3 och/eller ett CDN (content delivery network). Detta gör att du kan ignorera problemen med att servera statiska filer och kan ofta ge snabbare laddning av webbsidor (särskilt när du använder ett CDN).
När du använder dessa tjänster ser det grundläggande arbetsflödet ut ungefär som ovan, förutom att du istället för att använda rsync
för att överföra dina statiska filer till servern måste överföra de statiska filerna till lagringsleverantören eller CDN.
Det finns ett antal olika sätt att göra detta på, men om leverantören har ett API kan du använda custom file storage backend för att integrera CDN med ditt Django-projekt. Om du har skrivit eller använder en anpassad lagringsbackend från tredje part kan du berätta för collectstatic
att använda den genom att ställa in staticfiles
i STORAGES
.
Om du till exempel har skrivit en S3-lagringsbackend i myproject.storage.S3Storage
kan du använda den med:
STORAGES = {
# ...
"staticfiles": {"BACKEND": "myproject.storage.S3Storage"}
}
När det är gjort är allt du behöver göra att köra collectstatic
och dina statiska filer kommer att skjutas genom ditt lagringspaket upp till S3. Om du senare behöver byta till en annan lagringsleverantör kan du bara behöva ändra staticfiles
i inställningen STORAGES
.
För detaljer om hur du skriver en av dessa backends, se Så här skriver du en anpassad lagringsklass. Det finns appar från tredje part som tillhandahåller lagringsbackends för många vanliga API:er för fillagring. En bra startpunkt är översikten på djangopackages.org.
Läs mer¶
För fullständig information om alla inställningar, kommandon, malltaggar och andra delar som ingår i django.contrib.staticfiles
, se the staticfiles reference.