I have a client who wants a self-contained app on www.fly.io (no external cloud use, etc.). It is a variant of an image display application, where the images are uploaded from the admin side. End-users simply view the images. I wanted to learn Python, so I wrote the app in Django. It works fine in development, but I have not found a way to serve the images in production. Some details:
- Fly.io offers “volumes”, an internal storage option that is seamlessly configured such that it operates like a local storage volume. The data on the volumes are backed up.
- I have no access to a web server like Nginx. The serving of the images must be done through WSGI (in this case, gunicorn).
I have tried to accomplish this through Whitenoise, as follows:
# settings.py WHITENOISE_USE_FINDERS = True WHITENOISE_AUTOREFRESH = True STATIC_URL = 'static/' STATIC_ROOT = BASE_DIR / 'static_collected' STATICFILES_DIRS = [ '/data/media', ] MEDIA_ROOT = '/data/media' MEDIA_URL = '/media/'
# urls.py ... urlpatterns += staticfiles_urlpatterns() urlpatterns += static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)
Whitenoise is serving the .css correctly. The images are being correctly uploaded to /data/media. But the images are not being served correctly in production!
My assumption was that by using these Whitenoise settings, and by adding
/data/media to the
STATICFILES_DIRS , the images would be served correctly. Any ideas? Is it even possible to serve image files this way on Django?
Thank you for your help, this is becoming a real headache!
(P.S. I did not change the
STATIC_ROOT after adding
WHITENOISE_USE_FINDERS and removing
collectstatic from the Dockerfile, but the .css is still working fine.)