Cómo desplegar archivos estáticos

Ver también

Para obtener una introducción a la utilización de django.contrib.staticfiles, consulte Cómo gestionar archivos estáticos (por ejemplo, imágenes, JavaScript, CSS).

Servir archivos estáticos en producción

La forma básica de poner archivos estáticos en producción consiste en dos pasos: ejecutar el comando collectstatic cuando cambian los archivos estáticos, luego asegurarse de que la carpeta de archivos estáticos recopilados (STATIC_ROOT) se mueve a un servidor de archivos estáticos y se sirven. Dependiendo del alias staticfiles STORAGES, es posible que deban moverse los archivos a una nueva ubicación manualmente o el método post_process <django.contrib.staticfiles.storage.StaticFilesStorage.post_process> de la clase Storage se encargue de eso.

Como con todas las tareas de despliegue, el diablo está en los detalles. Cada configuración de producción será un poco diferente, por lo que deberán adaptar la forma básica a sus necesidades. A continuación, se presentan algunos patrones comunes que pueden ayudar.

Serving the site and your static files from the mismo servidor

Si deseas servir tus archivos estáticos desde el mismo servidor que ya está sirviendo tu sitio web, el proceso puede parecerse a lo siguiente:

Probablemente querrás automatizar este proceso, especialmente si tienes múltiples servidores web.

Servir archivos estáticos desde un servidor dedicado

La mayoría de los sitios web Django más grandes utilizan un servidor web separado – es decir, uno que no también esté ejecutando a Django – para servir archivos estáticos. Este servidor a menudo corre un tipo diferente de servidor web – más rápido pero menos completo. Algunas opciones comunes son:

La configuración de estos servidores está fuera del alcance de este documento; consulta la documentación respectiva de cada servidor para obtener instrucciones.

Dado que tu servidor de archivos estáticos no estará ejecutando a Django, necesitarás modificar la estrategia de despliegue para parecerse a:

Servir archivos estáticos desde un servicio en la nube o CDN

Otra táctica común es servir archivos estáticos desde un proveedor de almacenamiento en la nube como S3 de Amazon y/o una red de entrega de contenido (CDN). Esto te permite ignorar los problemas de servir archivos estáticos y puede hacer que las páginas web se carguen más rápido (especialmente cuando se utiliza una CDN).

Cuando se utilizan estos servicios, el flujo de trabajo básico sería similar al anterior, excepto que en lugar de utilizar rsync para transferir tus archivos estáticos al servidor necesitarías transferir los archivos estáticos al proveedor de almacenamiento o CDN.

Hay cualquier número de formas en que podrías hacer esto, pero si el proveedor tiene una API, puedes utilizar un backend de almacenamiento de archivos personalizado para integrar la CDN con tu proyecto Django. Si has escrito o estás utilizando un backend de almacenamiento de archivos personalizado de terceros, puedes decirle a collectstatic que lo utilice estableciendo staticfiles en STORAGES.

Por ejemplo, si has escrito un backend de almacenamiento S3 en myproject.storage.S3Storage podrías utilizarlo con:

STORAGES = {
    # ...
    "staticfiles": {"BACKEND": "myproject.storage.S3Storage"}
}

Una vez hecho esto, solo tienes que ejecutar collectstatic y tus archivos estáticos se transferirían a través de tu paquete de almacenamiento hasta S3. Si más adelante necesitas cambiar al proveedor de almacenamiento diferente, podrías tener que cambiar solo staticfiles en la configuración STORAGES.

Para obtener detalles sobre cómo escribir uno de estos backends, consulta Cómo escribir una clase de almacenamiento personalizada. Hay aplicaciones de terceros disponibles que proporcionan backends de almacenamiento para muchas APIs de almacenamiento de archivos comunes. Un buen punto de partida es la visión general en djangopackages.org.

Aprende más

Los textos traducidos manteniendo todas sus etiquetas intactas son: