如何在Kubernetes中获得django静态文件?

问题描述 投票:1回答:1

这是我使用rest框架的django应用程序的部署:

#Deployment
apiVersion: extensions/v1beta1
kind: Deployment
metadata: 
  labels: 
    service: my-api-service e
  name: my-api-deployment 

spec: 
  replicas: 1
  template: 
    metadata: 
      labels: 
        name: my-api-selector
    spec: 
      containers: 
        - 
          name: nginx
          image: nginx
          command: [nginx, -g,'daemon off;']
          imagePullPolicy: IfNotPresent
          volumeMounts:
            - 
              name: shared-disk
              mountPath: /static
              readOnly: true
            - 
              name: nginx-config
              mountPath: /etc/nginx/nginx.conf
              subPath: nginx.conf

          ports:
            - 
              name: nginx
              containerPort: 80
        - 
          env: 

            - 
              name: STATIC_ROOT
              value: /src/static/
            -
              name: MEDIA_ROOT
              value: /src/media/         
            -
              name: CLIENT_ORIGIN
              value: https://marketforce.platinumcredit.co.ke
            -
              name: DJANGO_SETTINGS_MODULE
              value: config.production
            -
              name: DEBUG
              value: "true"

          image: localhost:5000/workforce-api:0.2.0         
          command: [ "./entrypoint.sh" ]
          name: my-api-container
          imagePullPolicy: IfNotPresent
          ports: 
            - 
              name: my-api-port
              containerPort: 9000
              protocol: TCP

          volumeMounts:
            - 
              name: shared-disk
              mountPath: /src/static


      initContainers:
        - 
          name: assets
          image: localhost:5000/workforce-api:0.2.0
          command: [bash, -c]
          args: ["python manage.py collectstatic --noinput"]
          command: [bash, -c]
          args: ["sleep 10"]
          command: [bash, -c]
          args: ["cp -r static/* /data"]
          imagePullPolicy: IfNotPresent
          volumeMounts:
            - 
              mountPath: /data
              name: shared-disk
      volumes:
        -
          name: shared-disk
          emptyDir: {}
        -
          name: nginx-config
          configMap:
            name: nginx-config

我的服务:

# Service
apiVersion: v1
kind: Service
metadata:
  name: my-api-service
  labels:
    label: my-api-service
spec:
  type: NodePort
  ports:
  - port: 80
    targetPort: 80
    protocol: TCP
    name: http

  selector:
    name: my-api-selector

这是我的nginx配置:

apiVersion: v1
kind: ConfigMap
metadata:
  name: nginx-config
data:
  nginx.conf: |
    events {
      worker_connections  1024;
    }
    http {
      upstream api {
        server 127.0.0.1:9000 fail_timeout=0;
      }
      server {
        access_log /var/log/nginx/api.my.log;
        error_log /var/log/nginx/api.my.mesozi.com-http-error.log;
        listen 80;
        server_name localhost;

        location /static/ {
          autoindex on;    
          alias /static/; 
        }

        location /media/ {
        alias   /src/media/;
        }

       location = /favicon.ico {
        access_log off;
        log_not_found off;
        }


        location / {
          proxy_set_header X-Real-IP $remote_addr;
          proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
          proxy_set_header Host $host;
          proxy_set_header X-NginX-Proxy true;
          proxy_pass http://127.0.0.1:9000/;
        }
      }
    }

正如您在我的部署文件中所看到的,我在同一个pod中运行nginx和我的应用程序。一切都在minikube上运行良好,除了它没有被应用的样式。在浏览器中查看network所有静态文件请求都可以200。我错过了什么?

我想我的API显示样式没有任何用处,但我只是想把它拖到工作原因它应该。

django nginx django-rest-framework kubernetes
1个回答
1
投票

查看静态文件部分:

location /static/ {
          autoindex on;    
          alias /static/; 
        }

/static/是静态Web文件的绝对路径吗?如果没有,请使用别名的完整路径,因为之前尚未定义root。

为什么你为这种文件打开了autoindex标志,它应该设置为关闭,如:

autoindex off;

或者,您可以尝试使用静态文件的根定义:

location /static/ {
        root /var/;
        autoindex off;
      }

然后在/var下有一个静态文件夹/var/static。位置部分将附加到根目录中指定的路径。

© www.soinside.com 2019 - 2024. All rights reserved.