簡體   English   中英

如何通過 nginx Docker 容器提供 Django 靜態文件?

[英]How can I serve Django static files via nginx Docker container?

在開發過程中,我喜歡在盡可能接近生產的設置中部署 Django 靜態文件。 為了實現這一點,我將 Django 后端包裝到一個圖像 ( Dockerfile ) 中,並將前端 JS 和后端 Django 靜態文件與配置為網絡服務器 ( Dockerfile_nginx ) 的nginx一起Dockerfile_nginx到另一個圖像中。 設置如下:

文件系統結構:

<projekt-repo>
  /frontend
  /backend
    /static (generated with python manage.py collectstatic)
    settings.py
  manage.py
  nginx.conf
  Dockerfile
  Dockerfile_nginx

settings.py

STATIC_ROOT = os.path.join(BASE_DIR, "backend/static")
STATIC_URL = '/static/'
STATICFILES_DIRS = [os.path.join(BASE_DIR, "static")]

nginx.conf

server {
  listen 0.0.0.0:8080;
  root /var/www;
  location / {
    try_files $uri $uri/ /index.html;
  }
}

server {
  listen 0.0.0.0:8000;
  root /var/www/django;
  location /static/ {
    autoindex on;
    alias /var/www/django/static/;
  }
}

Dockerfile_nginx

FROM nginx:1.17.8-alpine
COPY nginx.conf /etc/nginx/conf.d/nginx.conf
COPY edge_frontend/www /var/www
COPY edge_backend/static /var/www/django/static

如果我運行該應用程序並嘗試通過 Django 管理站點 ( localhost:8000/admin ) 登錄,則該站點的樣式不正確並且日志輸出狀態

backend  | Not Found: /static/admin/css/base.css
backend  | Not Found: /static/admin/css/login.css
backend  | Not Found: /static/admin/css/responsive.css
backend  | Not Found: /favicon.ico
backend  | Not Found: /static/admin/css/base.css
backend  | Not Found: /static/admin/css/login.css
backend  | Not Found: /static/admin/css/responsive.css
backend  | Not Found: /favicon.ico

顯然,設置中存在一些我現在無法發現的不匹配? 有人可以幫忙嗎?

在您的項目中創建一個名為“static”的文件夾,然后

添加你的settings.py

STATIC_URL = '/static/'
STATIC_ROOT = os.path.join(BASE_DIR, 'static')

或者你想要另一條路?

您必須在settings.py設置BASE_DIRSTATIC_URLSTATIC_ROOT如下...

BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))

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

STATIC_URL = '/static/'

並運行python manage.py collectstatic

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM