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

时间:2018-02-17 16:58:10

标签: django nginx django-rest-framework kubernetes

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

    /ImageEncryption/

我的服务:

#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

这是我的nginx配置:

# 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

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

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

2 个答案:

答案 0 :(得分:1)

查看静态文件部分:

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

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

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

autoindex off;

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

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

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

答案 1 :(得分:0)

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