我如何在Kubernetes中获得实际静态文件样式的Django静态文件



这是我在带有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/;
        }
      }
    }

您可以在我的部署文件中看到,我正在同时运行nginx和我的应用程序。除了未应用样式,一切都在Minikube中运行良好。在浏览器中查看network所有静态文件请求都可以200。我想念什么?

我想显示我的API的样式没有任何用处

查看静态文件部分:

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

/static/是静态网络文件的绝对路径吗?

再次,为什么要为此文件打开自动索引标志,应该设置为:

autoindex off;

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

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

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

只需在您的nginx.conf上添加以下代码 ... http { include /etc/nginx/mime.types; ... } ...

最新更新