首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用docker和nginx服务django媒体文件?

问如何使用docker和nginx服务django媒体文件?
EN

Stack Overflow用户
提问于 2021-08-18 20:02:20
回答 1查看 250关注 0票数 0

当涉及到Nginx时,我对接和服务Django应用程序的设置有点不同,所以我找到的解决方案没有帮助。

我已经对接了django应用程序,除了媒体文件,它工作得很好。我不是在容器中使用nginx,而是在实际的服务器上使用。除了媒体文件之外,所有的请求,甚至静态文件都得到了完美的服务。以下是静态和媒体的设置:

代码语言:javascript
复制
STATIC_ROOT = os.path.join(BASE_DIR, 'static_cdn')
STATIC_URL = '/static/'

MEDIA_ROOT = os.path.join(BASE_DIR, 'media_cdn')
MEDIA_URL = '/media/'


STATICFILES_DIRS = (
    os.path.join(BASE_DIR, 'static'),
)

这是我的docker-compose文件:

代码语言:javascript
复制
version: "3"
services:
  backend:
    image: gitrepo:latest
    #image: 731d5d7e9296
    ports:
      - 8400:8000
    links:
      - database
    command: bash -c "python manage.py migrate
      && python manage.py collectstatic --noinput
      && python manage.py runserver 0.0.0.0:8000"
    volumes:
      - media-cdn-data:/app/media_cdn
    deploy:
      restart_policy:
        condition: on-failure

    tty: true

  database:
    image: "postgres:12" # use latest official postgres version
    env_file:
      - database.env # configure postgres
    volumes:
      - database-data:/var/lib/postgresql/data/ # persist data even if container shuts down
volumes:
  database-data: # named volumes can be managed easier using docker-compose
  media-cdn-data:

这是我的nginx文件:

代码语言:javascript
复制
server {
       server_name app.platformname.com;
             location /media/ {
                 proxy_pass http://127.0.0.1:8400/;
                 alias /app/media_cdn/;
             }
       location / {
            proxy_pass http://127.0.0.1:8400/;
            proxy_set_header Host $host;
            proxy_set_header X-Real-IP $remote_addr;
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
            proxy_set_header X-Forwarded-Proto $scheme;
            proxy_read_timeout 3600;
            proxy_set_header Connection '';
            # these two lines here
            proxy_http_version 1.1;
        }
}

感谢任何帮助,我在过去的4天里一直在努力:)

EN

回答 1

Stack Overflow用户

发布于 2021-08-18 20:40:58

我也没有看到你的docker-compose文件中有任何nginx块。你的

您已经在后端部分和反向代理部分尝试过这种方法

代码语言:javascript
复制
 - "./dist/static_cdn:/backend/static_cdn" # map physical machine

并在nginx文件中添加以下内容:

代码语言:javascript
复制
 alias /backend/static_cdn;

注意:请为nginx/反向代理更新您的docker-compose文件,如下所示

为什么要映射本地物理机,而不是容器?因为,如果您没有将本地机器映射到容器,您将得到权限被拒绝的错误

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/68838628

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档