Nginx 在用于容器的 Azure Web 应用程序中的 Dockered Django 应用程序中找不到静态文件

Nginx not finding static files in Dockered Django app in Azure Web App for containers

我设法 运行 我的 Django 应用程序在本地使用 docker 组合(Django 容器 + Nginx 容器)并且它工作正常,但是当我想 运行 它在 Azure 网络中容器 nginx 的应用程序找不到资源。 我不知道我是否应该更改一些配置以便它可以在 Azure 服务中工作,或者我需要在 azure 应用程序设置中启用端口以便我的容器可以通信。

这是我的 nginx 配置 (nginx.conf) :

upstream myapp {
    server web:8000;
}

server {

    listen 80;
    server_name myappname.azurewebsites.net;

    location / {
        proxy_pass http://myapp;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header Host $host;
        proxy_redirect off;
    }

    location /static/ {
        alias /home/app/web/static/;
    }

    location /media/ {
        alias /home/app/web/media/;
    }

}

我不知道为什么当我 运行 docker 撰写时它在本地工作但在 azure web 应用程序中 nginx 找不到静态文件。

如果我需要澄清或包含任何其他内容,请告诉我。

提前致谢。

谢谢 。将您的建议作为答案发布,以帮助其他社区成员。

python manage.py collectstatic

You need that command for Django to copy over all your static files to the directory specified in the STATIC_ROOT setting. Remember you have to execute that every time you have some change in your static files.

停止开发容器:

$ docker-compose down -v

测试:

$ docker-compose -f docker-compose.prod.yml up -d --build
$ docker-compose -f docker-compose.prod.yml exec web python manage.py migrate --noinput
$ docker-compose -f docker-compose.prod.yml exec web python manage.py collectstatic --no-input --clear

您还可以通过 docker-compose -f docker-compose.prod.yml logs -f 在日志中验证是否已通过 Nginx 成功提供对静态文件的请求。

可以参考Dockerizing Django with Postgres, Gunicorn, and Nginx, Cannot locate static files after deploying with docker and