---
title: Serving Static and Media Files
---

## Serving Files

In production, the InvenTree web server software *does not* provide hosting of static files, or user-uploaded (media) files.

When running in [production mode](./production.md) (i.e. the `INVENTREE_DEBUG` flag is disabled), a separate web server is required for serving *static* and *media* files. In `DEBUG` mode, the django webserver facilitates delivery of *static* and *media* files, but this is explicitly not suitable for a production environment.

!!! into "Read More"
    You can find further information in the [django documentation](https://docs.djangoproject.com/en/dev/howto/static-files/deployment/).

There are *many* different ways that a sysadmin might wish to handle this - and it depends on your particular installation requirements.

The [docker production example](./docker_prod.md) provides an example using [Nginx](https://www.nginx.com/) to serve *static* and *media* files, and redirecting other requests to the InvenTree web server itself.

You may use this as a jumping off point, or use an entirely different server setup.

#### Static Files

Static files can be served without any need for authentication. In fact, they must be accessible *without* authentication, otherwise the unauthenticated views (such as the login screen) will not function correctly.

#### Media Files

It is highly recommended that the *media* files are served in such a way that user authentication is required.

Refer to the [docker production example](./docker_prod.md) for a demonstration of using nginx to serve media files only to authenticated users, and forward authentication requests to the InvenTree web server.
