如何将 Django 媒体存储连接到 Dokku 持久化存储? Django 上的静态和媒体设置Nginx media.conf 设置dokku storage:list dokkuappname resultDokku 挂载示例

问题描述

我使用 Dokku 在服务器上部署了我的 Django 应用程序。 Staticfiles 似乎可以正常工作,因为 CSS 在管理仪表板中非常好,我可以上传文件,但无法访问该文件

我发现无论如何我都应该使用 Dokku 持久性存储。所以我设置了它(我想)。然后我设置了我的 Nginx。在 Nginx 之前,Django 显示文件路径的“页面未找到”。现在,我收到“您要查找的页面不存在。”。

如何将我的应用正确连接到持久性存储?

编辑: 我手动将文件添加/var/lib/dokku/data/storage/dokkuappname 并且能够下载。所以 Nginx 正在工作,但 Django 没有使用存储文件夹作为媒体文件夹。

Django 上的静态和媒体设置

# STATIC
# ------------------------------------------------------------------------------
# https://docs.djangoproject.com/en/dev/ref/settings/#static-root
STATIC_ROOT = str(ROOT_DIR / "staticfiles")
# https://docs.djangoproject.com/en/dev/ref/settings/#static-url
STATIC_URL = "/static/"
# https://docs.djangoproject.com/en/dev/ref/contrib/staticfiles/#std:setting-STATICFILES_Dirs
STATICFILES_Dirs = [str(APPS_DIR / "static")]
# https://docs.djangoproject.com/en/dev/ref/contrib/staticfiles/#staticfiles-finders
STATICFILES_FINDERS = [
    "django.contrib.staticfiles.finders.FileSystemFinder","django.contrib.staticfiles.finders.AppDirectoriesFinder",]


# MEDIA
# ------------------------------------------------------------------------------
# https://docs.djangoproject.com/en/dev/ref/settings/#media-root
MEDIA_ROOT = str(APPS_DIR / "media")
# https://docs.djangoproject.com/en/dev/ref/settings/#media-url
MEDIA_URL = "/media/"

Nginx media.conf 设置

location /media/ {
    alias /var/lib/dokku/data/storage/dokkuappname/;
}

dokku storage:list dokkuappname result

dokkuappname volume bind-mounts:
     /var/lib/dokku/data/storage/dokkuappname:/media

解决方法

解决方案

我想查看 Django 媒体文件夹的路径。我将 print(MEDIA_ROOT) 放入 base.py 以在部署期间打印路径。是/app/my_app_dir/media。我意识到 /app 存在于 Dokku 文档中,但我一直认为它是像 path/to/app 这样的占位符。不,是路径。

Dokku 挂载示例

dokku storage:mount app-name /var/lib/dokku/data/storage/node-js-app:/app/storage

我修复了我的挂载命令:

dokku storage:mount my_app/var/lib/dokku/data/storage/my_app:/app/my_app_dir/media

终于成功了!